linux內核及系統啟動流程

Linux內核

內核概述

GUN/Linux操作系統的基本體系結構

如圖,最上面是用戶空間(User Space),是用戶程序執行的地方;用戶空間之下是內核空間(Kernel Space),內核位于此?;诖?,GUN C Library(glibc)提供了連接內核的系統調用接口,還提供了在用戶空間應用程序和內核之間進行轉換的機制,因為內核空間和用戶空間的應用程序使用的是不同的保護地址空間。用戶空間的進程使用的是自己的虛擬地址空間,而內核則占用單獨的地址空間。

內核的核心功能:

  • 系統調用接口(System call interface)

  • 程序管理(Process control)

  • 內存管理(Memory management)

  • 文件系統管理(Filesystem management)

  • 設備的驅動(Device drivers)

linux內核及系統啟動流程

Linux內核的特點

  • 支持模塊化

  • 支持模塊的動態裝載和卸載

linux內核的設計原則

單內核體系設計、但充分借鑒了微內核設計體系的優點,為內核引入模塊化機制。

內核的組成部分

核心文件:

/boot/vmlinuz-VERSION-release
ramdisk:
    CentOS 5:/boot/initrd-VERSION-release.img
    CentOS 6:/boot/initramfs-VERSION-release.img

模塊文件:/lib/modules/VERSION-release/


CentOS 系統啟動流程

POST(Power On Self Test):

檢測系統外圍關鍵設備(如:CPU、內存、顯卡、I/O、鍵盤鼠標等)是否正常。

加載BIOS(Basic Input and Output System):

根據在BIOS中設置的系統啟動順序來搜索用于啟動系統的驅動器(硬盤、光盤、U盤等)。在平時的啟動過程中,大多為硬盤啟動,基于此,BIOS會讀取硬盤的第0磁道的第1扇區(MBR)的內容來引導啟動。

BOOT Sequence:

按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用到設備

MBR(Master Boot Record):

linux內核及系統啟動流程

三部分組成,分別是主引導程序(Bootloader)、硬盤分區表DPT(Disk Partition Table)和magic number。

Bootloader:提供一個菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統控制權移交給內核。

在Linux中常用的主引導程序有LILO(LInux LOader)和GRUB(GRand Uniform Bootloader),此處以GRUB引導為例。

啟動引導程序GRUB:

stage1:stage1的代碼直接存在于MBR,是后續引導的入口,無識別文件系統的能力。
stage1.5: MBR之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統,具有識別文件系統的能力。
stage2:加載磁盤分區(/boot/grub/)

啟動內核:

當stage2被載入內存執行時,首先會解析grub的配置文件/boot/grub/grub.conf,然后加載內核鏡像到內存中,并將控制權轉交給內核。而內核會立即作自身初始化。
  • 探測可識別的所有硬件設備

  • 加載硬件驅動程序(可能會借助于ramdisk加載驅動)

  • 以只讀方式掛載rootfs

  • 運行用戶空間的第一個應用程序:/sbin/init

運行init程序

  • CentOS 5:SysV

  • CentOS 6:Upstart

  • CentOS 7:Systemd

設置默認運行級別

  • CentOS 5:/etc/inittab

  • CentOS 6:/etc/inittab,/etc/init/*.conf

  • CentOS 7:default.target–>/usr/lib/systemd/system/*.target

運行系統初始腳本,完成系統初始化

/etc/rc.d/rc.sysinit

啟動內核模塊

/etc/modules.conf /etc/modules.d/*

關閉對應級別下應關閉的服務,啟動需要啟動的服務

/etc/rc.d/rc#.d/*

執行自定義引導程序

/etc/rc.d/rc.local

設置登陸終端

/sbin/mingetty

原創文章,作者:Jeason,如若轉載,請注明出處:http://www.www58058.com/30369

(0)
JeasonJeason
上一篇 2016-08-08
下一篇 2016-08-08

相關推薦

  • find 的使用及練習

    find是個使用頻率比較高的命令。常常用它在系統特定目錄下,查找具有某種特征【名字類型屬主權限等】的文件。find命令的格式: find  [-path ..] -options [-print -exec -ok] path:要查找的目錄路徑。 ~ 表示$HOME目錄 . 表示當前目錄 / 表示根目錄 -print :表示將結果輸出到標準輸出-e…

    Linux干貨 2017-06-11
  • 安裝CentOS 6.9

    安裝完VMvare,VMware可以運行虛擬機,虛擬機就相當于一臺電腦,然后我們在這臺電腦上安裝Linux系統,我們這次介紹安裝CentOS 6.9的過程 1.打開VMware,依照下圖步驟安裝     首先我們需要創建新的虛擬機,然后配置出適合自己物理機的虛擬機 2.點擊典型類型安裝     這里推薦使用典…

    2017-07-12
  • rpm與yum的初步學習

    rpm與yum的初步學習   我們在使用linux系統時需要安裝和卸載軟件,我們這節就先來看一下rpm和yum的初步簡單實用。 linux軟件安裝:   安裝程序的方式:      通用二進制格式:直接解壓壓縮文件,就可以使用。但一定要注意安裝平臺。     &nbsp…

    Linux干貨 2016-08-24
  • DNS高級應用

        DNS高級應用     1、主從復制      應用場景: (1)、當主DNS服務器壓力過大,無法正常處理過多的DNS解析請求時,從DNS服務器可以起到負載均衡的作用。 (2)、當主DNS服務器出現故障時,從DNS服務器可以為其提供冗余備份功能。     實驗環…

    Linux干貨 2015-06-18
  • iptables入門到進階

    netfilter/iptables:        netfilter是存在于內核中的一個防火墻框架,用來管理網絡數據包,netfilter在IP數據包處理流程中的5個關鍵位置放置了5個鉤子(hook)函數,當數據包流經相應的位置時,相應的鉤子函數會被調用,每個對應的鉤子上有對應的表,表中有對應的…

    Linux干貨 2017-05-02
  • 使用ext_skel和phpize構建php5擴展

    首先聲明:我們要構建的是擴展或者模塊名為hello_module.該模塊提供一個方法:hello_word. 1、php環境的搭建 我們一般使用源碼包編譯安裝,而不是binary包安裝。因為使用PHP的二進制分發包安裝有些冒險,這些版本傾向于忽略./configure的兩個重要選項,它們在開發過程中很便利: 第一個–enable-debug。這個…

    Linux干貨 2015-05-28
欧美性久久久久