linux啓動方式

1:BIOS自檢
    電腦開機後
,電腦會進入BIOS,、.BIOS的第一個步驟是加電自檢,BIOS的第二個步驟是檢測本地設備。,偵測電腦周邊配套設備是否工作正    常,如cpu的類型,速度,緩存等;主板類型,內存的速度,容量,硬盤的大小,類型和工作模式,風扇速度等,主要是爲了檢查這些設備在開機的時候是否能正常的工作.
2:載入啓動程序
   主板的BIOS會讀取硬盤的主引導記錄(MBR),MBR中存放的是一段很小的程序,他的功能是從硬盤讀取操作系統核心文件並運行,因爲這個小程序太小了,因此通常這個小程序不具備直接引導系統內核的能力,他先去引導另一個稍微大一點的小程序,再由這個大一點的小程序去引導系統內核.
3:加載內核
    
LINUX內核一般是壓縮保存的,因此,它首先要進行自身的解壓縮。內核映象前面的一些代碼完成解壓縮。解壓後將其放入高端內存中,如果有初始RAM磁盤映像,就會將它移動到內存中,並標明以後使用,然後內核映象前面的代碼調用內核,並開始啓動內核引導的過 程 
4:啓動init服務
    這裏的Init程序,一般放在/sbin下,(到這裏會出現很多不同的啓動方式,主要有:
SystemV,BSD,upstart和systemd).
     
這裏主要說SystemV,init進程是所有進程的起點,也是Linux內核啓動後的第一個動作,所以這個程序的PID是永遠是1,init進程是所有進程的發起者和控制
    init進程有以下兩個作用。
    一:扮演父進程的角色。因爲init進程永遠不會被終止,所以系統總是可以確信它的存在,並在必要的時候以它      爲參照。如果某個進程在它衍生出來的全部子進程結束之前被終止,就會出現必須以init爲參照的情況。此時那些失去了父進程的子進程    就都會以init作爲它們的父進程。
    二:讀取運行等級。init它會讀取/etc/inittab裏面定義的運行等級,來決定啓動哪個等級的服務

   運行等級
run level可以從0到6分成7種,一般是爲了執行不同的程序或環境而設置的
    run level 0:是作關機,所以不能設置在/etc/inittab中,否者一開機就會作關機的動作。
    run level 1:是Single user mode模式,只允許root賬號登錄,主要是作一些系統維護的工作。
    run level 2:可以使所有的用戶登錄,但不會啓用NFS working,也就是沒有網絡功能
    run level 3:可以使所有用戶登錄,並擁有完整的功能。包含run level 2沒有的功能,但是開機後是用文本模式
    run level 4 :使用者自己定義,但是默認情況下和run level 3完全相同,
    run level 5:和run level 3幾乎一樣,唯一的不同是開機後是圖形界面,
    run level 6:重啓。所以run level 6也不會設置在/etc/inittab中,否者開機後立刻重啓
5: 執行run level對應目錄中的腳本,例如:等級爲5,則執行/etc/rc.d/rc5.d下面的腳本
    執行時按腳本的文件名  串行執行,這樣就造成開機比較慢。目前systemd是以並行執行(號稱最快2秒開機) 

注意:假如是以busybox的init作爲第一個進程,它沒有運行等級之分,直接會執行/etc/下的rcS,然後由rcS來啓動其它的腳本 
發佈了32 篇原創文章 · 獲贊 6 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章