標籤:程式 電腦 檢測 system bootloader
Centos系統啟動流程
啟動流程: POST --> BootSequence(BIOS) --> Bootloader (MBR) ->kernel (ramdisk) --> rootfs (switch_root) --> /sbin/init (/etc/inittab,/etc/init/*.conf, /usr/lib/systemd/system/)--> 預設運行層級、系統初始化、關閉及啟動服務、啟動終端(圖形終端)
圖解:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/41/1D/wKiom1PQxc6SML8nAAFcDmK4XC0648.jpg" width="886" height="482" alt="wKiom1PQxc6SML8nAAFcDmK4XC0648.jpg" />(1)POST
第一步首先加電自檢,電腦本身不會執行程式,由此它會載入一段程式,它會在開機時自動實現將某個RAM中的程式映射到cpu可以定址的地址空間中去,並且可以讓cpu可以執行其中的指令,而這些指令是完成系統檢測的,檢測完成之後,當所有的硬體或基本的核心硬體沒有問題的話就進行BIOS。
(2)BIOS
根據BIOS中所設定的程式啟動流程去找與其對應裝置上的MBR,按照引導次序執行(Boot Sequence),根據引導次序逐個尋找對應的存放裝置上的MBR,若MBR存在,則讀取MBR上的BootLoader,BootLoader是一段程式,早期的MBR總共512位元組,但它留給BootLoader空間大小是446位元組,在BootLoader當中配置了所有引導的作業系統的核心的位置,因此BIOS在載入記憶體以後,當它實現將控制流程程或控制許可權轉交給BootLoader以後,BootLoader就接收了整個系統的控制許可權,而後根據使用者的選擇,去讀取相應作業系統的核心。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/7E/13/wKiom1b2fHLj0Ou-AAFUo5VjAZY297.jpg" title="bios.jpg" alt="wKiom1b2fHLj0Ou-AAFUo5VjAZY297.jpg" />
grub: GRand Unified Bootloader
grub 0.x: grub legacy
grub 1.x: grub2 grub legacy:
stage1: mbr
stage1_5: mbr之後的扇區,讓stage1中的bootloader能識別stage2所在的分區上的檔案系統;
stage2:磁碟分割(/boot/grub/)設定檔:/boot/grub/grub.conf <-- /etc/grub.confstage2及核心等通常放置於一個基本磁碟分區;
/boot/grub/grub.conf:
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/7E/13/wKiom1b2eAaDFenVAAGnb-53uAg525.jpg" style="float:none;" title="grub.jpg" alt="wKiom1b2eAaDFenVAAGnb-53uAg525.jpg" />
(3)第三步:將核心裝載進核心中合適的位置,解壓縮並完成核心初始化,BootLoader會把控制許可權轉交給核心。
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/7E/13/wKiom1b2eCPxqirGAACTeRptGwA534.jpg" title="gru是b.jpg" style="float:none;" alt="wKiom1b2eCPxqirGAACTeRptGwA534.jpg" />
(4)第四步:如果核心訪問根檔案系統的裝置需要用到某個驅動程式,而核心中也沒有,就需要到根檔案中去找這個驅動程式,但這檔案系統本身又沒有掛載,因此要想訪問根檔案系統得先找到驅動,要訪問驅動得先找到根檔案系統,這就出現了一個難題,這時就要藉助於initrd,為核心提供訪問真正的根檔案系統所需要的基本驅動程式。因此initrd是一個輔助性的、過渡性的中介層。它能夠實現將kernel與真正的根檔案系統串連起來,當串連完成之後它就沒有任何意義了。
Linux Kernel:
CentOS啟動流程:POST--> Bootloader(BIOS, MBR) --> Kernel(initrd) --> rootfs -->switch_root --> /sbin/init
核心設計體系:單核心、微核心
Linux:單核心設計,但充分借鑒了微核心體系的設計的優點;為核心引入了模組化機制;
核心的組成部分:
kernel:核心核心,一般為bzImage,通常位於/boot目錄,名稱為vmlinuz-VERSION-release;
kernel object:核心對象,即核心模組,一般放置於/lib/modules/VERSION-release/
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/7E/0F/wKioL1b2ePXyUAzEAACWXUpf5tY823.jpg" title="lsboot.jpg" style="float:none;" alt="wKioL1b2ePXyUAzEAACWXUpf5tY823.jpg" />
(5)第五步:執行init進程,而init程式本身的設定檔是/etc/inittab(而在Centos 6上init不在是傳統的init,而是upstart,而upstart的設定檔在/etc/inittab和/etc/init/.*conf下的所有檔案
1. 根據boot loader的設定載入Kernel 會主動調用init進程,而init會取得run-level資訊
2. init執行/etc/rc.d/rc.sysinit檔案來準備軟體執行的作業環境(如網路、時區等)
3. init執行run-level的各個服務的啟動(script方式)
4. init執行/etc/rc.d/rc.local檔案
5. init執行終端機類比程式mingetty來啟動login進程,最後就等待使用者登入
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/7E/13/wKiom1b2eFfAeVdUAAJEhgnedtU729.jpg" title="init.jpg" style="float:none;" alt="wKiom1b2eFfAeVdUAAJEhgnedtU729.jpg" />
字元介面:
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/7E/13/wKiom1b2d9_SXFT9AABApAL10KU941.jpg" title="3.jpg" style="float:none;" alt="wKiom1b2d9_SXFT9AABApAL10KU941.jpg" />
圖形介面:
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/7E/0F/wKioL1b2eH6RoIFGAABbaWDBhs8157.jpg" title="5.jpg" style="float:none;" alt="wKioL1b2eH6RoIFGAABbaWDBhs8157.jpg" />
Centos系統啟動流程