Linux系統啓動流程

CentOS6系統啓動流程

  操做系統(OS)也是一個程序,若是在硬件通電後讓這個特殊的程序運行起來,以及這個特殊的程序在啓動過程當中作了什麼,以下圖:
Linux系統啓動流程 shell

  從圖中可知,系統啓動(不單單是Linux系統)大體可分爲幾個主要過程:硬件初始化-->找到並加載操做系統的內核-->內核初始化-->操做系統運行環境初始化-->登陸初始化-->登陸成功後的用戶初始化(包含圖形界面初始化或shell的初始化)-->最終用戶成功進入
操做系統並開始使用操做系統。 bash

下面以CentOS6系統進入命令行爲例簡單描述一下上面的幾個主要過程。 服務器

1.按下電源通電。主板通電後,CPU開始工做,它執行固定地址處的一段很是小的硬編碼程序:BIOS,因而BIOS掌握了CPU控制權。 socket

2.BIOS程序會進行硬件的上電自檢(Power-On Self-Test,POST)以確認有哪些硬件以及這些硬件是否故障。對於咱們要探索的操做系統啓動流程來講,最重要的是會根據檢測到磁盤順序(除了磁盤,也能夠是其它硬件設備,好比U盤、光盤、網卡等),按順序找到這些磁盤上正確的MBR,因而MBR開始掌握CPU控制權。 ide

3.MBR是引導系統內核啓動的第一段代碼,它的位置固定處於磁盤的第一個扇區位置處(若是不固定,就不知道怎麼找到MBR)。引導內核啓動的代碼段稱爲Boot Loader,除MBR外,還須要經過其它引導系統的代碼段來一步步引導啓動內核,因此要引導一個內核的啓動,須要跳轉並執行多段BootLoader。根據使用的啓動管理工具(如LILIO、GRUB、GRUB2等)不一樣,這一段段的引導代碼段稱呼和存放位置都不同,但第一個引導內核啓動的代碼段必定稱爲MBR,也必定處於磁盤的第一個扇區位置,因此MBR才稱爲主引導記錄(Master Boot Record)。 工具

4.當找到內核映像後,將內核映像裝載到內存中並解壓(若是被壓縮的話),內核開始掌握CPU控制權並運行起來,期間內核會作不少工做,包括內核的初始化、掛載真正的根目錄並從臨時根目錄切換到真正的根目錄、啓動一些重要的進程,例如idle、進程調度器、init進程等。而後開始執行用戶空間的第一個進程:init進程,因而init進程掌握了CPU的控制權,也今後開始進入用戶空間。 編碼

5.init進程開始運行後就表示操做系統真正已經啓動成功了,但它仍然須要作系統級別的初始化,好比設置主機名、設置硬件參數、加載硬件驅動、掛載/etc/fstab中的一些文件系統等等。系統級別的運行環境一切初始化完成後,因而提供用戶登陸的界面,即init啓動getty類的進程。 操作系統

6.getty類的進程啓動後,將打開一個終端,並提示用戶輸入用戶名,而後啓動一個login進程讓用戶輸入密碼並驗證密碼,密碼驗證經過後再審覈用戶是否有權登陸,若是容許登陸,將根據/etc/passwd中的配置啓動該用戶對應的shell進程,例如bash進程。 命令行

7.shell進程啓動後讀取該shell對應的配置文件,並按照登陸式、交互式的shell運行模式進行初始化,初始化完成後將進入登陸式、交互式的shell,也就是命令行下。 blog

8.至此,用戶能夠經過shell命令行來使用操做系統。

CentOS7系統啓動流程

CentOS7的啓動與CentOS6啓動不一樣之處有兩大點:
1)內核引導階段,CentOS7默認使用grub2引導,而CentOS6默認使用傳統的grub引導。
2)系統環境初始化和後面的過程。內核初始化完成後,啓動PID=1的過程,而CentOS7中這個進程是systemd,它和CentOS6中的init進程的初始化方式大不相同。

systemd特性:
1)系統初始化時實現服務並行啓動;
2)按需啓動守護進程;
3)自動化的服務依賴關係管理;
4)同時採用socket式與D-Bus總線式激活服務;
5)系統狀態快照。

如下簡述CentOS7的啓動流程,詳細內容參考:man bootup幫助手冊。
1)UEFI或BIOS初始化,運行POST開機自檢;
2)選擇啓動設備;
3)引導內核,作部份內核初始化工做,加載initramfs;
4)啓動systemd進程,systemd進程此時工做在initramfs環境下;
5)systemd執行initrd.target全部單元,包括掛載/etc/fstab、從ramdisk的虛根文件系統切換到真正的根文件系統;
6)systemd執行默認target配置,其配置文件爲/etc/systemd/system/default.target;
7)systemd執行sysinit.target初始化系統及basic.target準備操做系統;
8)systemd啓動multi-user.target下的本機與服務器服務;
9)systemd執行multi-user.target下的/etc/rc.d/rc.local;
10)systemd執行multi-user.target下的getty.target讓用戶登陸;
11)啓動shell進程並初始化,最終進入命令行;

  上面的過程當中最須要關注的即是大大提早了systemd的工做:在內核初始化階段就參與了剩下的工做。等到systemd完成了根文件系統的切換後,將正式進入操做系統的初始化過程,這時將進入步驟6),即根據默認target配置文件default.targe選擇默認的「運行級別」。

相關文章
相關標籤/搜索