歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

淺解Linux的啟動流程

加載BIOS(Basic Input and Output System)系統在剛開機時須完成自舉,而在硬件內有一個固化的指令能完成這一點。它能在開機時自動將某個硬件的內容裝載進內存,將BIOS程序映射進CPU可以查找的線性地址空間或物理地址空間,而內存的ROM中的指令信息的第一段主要完成系統硬件健康狀況檢查,例如有無顯卡,顯卡是否正常,有無內存設備,CPU風扇能否運轉等。若檢查通過,BOIS運行時按照CMOS(保存計算機基本啟動信息的芯片,是BIOS上一塊可讀寫的並行或串行的flash芯片,用來保存計算機硬件配置和用戶對默寫參數的設置)設置的順序來搜索處於活躍狀態並可以引導的設備:可以是軟盤,硬盤上的某個分區,網絡上的某個設備,甚至為USB閃存。通常,Linux從硬盤引導,其中主引導記錄MBR(Master Boot Record)包含了主引導加載程序。MBR是一個512字節大小的扇區,位於磁盤上的第一個扇區中(0道0柱面1扇區),當MBR被加載到RAM中後,BIOS就會將控制權交給MBR。

讀取MBR主引導記錄存放了系統預啟動信息,分區表信息。系統找到了BIOS所指定的硬盤的MBR後,會將其復制到物理內存中,即Boot Loader。(Boot Loader分為grub,lilo,spfdisk等)

Boot LoaderBoot Loader是在內核運行之前運行的一段小程序,是計算機啟動過程中運行的第一個真正的軟件,負責加載啟動硬盤分區中的操作系統。通常每個操作系統在安裝過程中都要將自帶的啟動引導器寫入硬盤,以便能夠進行自身的引導。

Boot Loader可以初始化硬件設備,建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,為最終調用操作系統內核做好一切准備。

加載內核根據grub設定的內核映像所在路徑,系統讀取內核映像,並進行解壓縮操作。當內存映像被加載到內存之後,內核階段開始。內核映像並不是一個可執行的內核,而是一個壓縮過的內核映像。在這個內核映像前面是一個例程,它實現少量硬件設置,並對內核映像中包含的內核進行解壓,然後將其放入高端內存中。如果有初始RAM磁盤映像,就會將它移到內存中並標以後使用。接下來該例程會調用start-kernel()函數,啟動一系列的初始化函數並初始化各種設備,完成Linux核心環境的建立。至此,Linux內核已經建立起來了。

init進程執行init進程是系統所有進程的起點,內核在完成核內引導後,即在本線程(進程)空間內加載init進程,進程號是1。init進程是所有進程的發起者和控制者。在Linux中,它是第一個運行的進程,所以init進程的編號為1。如果init進程出現問題,系統的其余部分也不可用。

init進程有2個作用:一,扮演父進程的角色。由於init進程永遠不會終止,若某個進程在它衍生出來的子進程終止前被終止,就會出現必須以init進程為參照的情況,即失去父進程的子進程都會以init作為它們的父進程。二,在進入某個特定運行級別時運行相應的程序,以此對各種運行級別進行管理。

Linux的運行級別有如下7種:

0:關機

1:單用戶模式

2:無網絡支持的多用戶模式

3:有網絡支持的多用戶模式

4:保留,未使用

5:有網絡支持,有x—window支持的多用戶模式

6:重啟

init進程執行rc.sysinit在設定了運行等級後,Linux執行的第一個用戶層文件就是/etc/rc.d/rc.sysinit腳本程序,包括設定PATH,設定網絡配置(/etc/sysconfig/network),啟動swap分區,設定/proc等。

啟動內核模塊依據/etc/modules.conf文件或/etc/modules.d目錄下的文件來裝載內核模塊。

執行不同運行級別的腳本程序根據運行級別不同,系統會運行rc0.d到rc6.d中相應的腳本程序,來完成相應的初始化工作和啟動相應的服務。

執行/etc/rc.d/rc.localrc.local就是在一切初始化工作後,Linux留給用戶進行個性化的地方,可以想把你設置和啟動的東西放到這裡。

執行/bin/login程序,進入登錄狀態。此時,系統已經進入到等待用戶輸入username和password的時候了。

本文出自 “真水無香” 博客,請務必保留此出處http://chengyanli.blog.51cto.com/11399167/1787101

Copyright © Linux教程網 All Rights Reserved