linux系統啓動流程

                    linux系統啓動流程

linux系統啓動流程,計算機接通電源後首先是:

一、BISO進行POST自檢。然後根據BISO內設置的引導順序,從硬盤和軟盤中讀取引導,

BIOS的第1個步驟是加電POST自檢。POST的工作是對硬件進行檢測。BIOS的第2個步驟是進行本地設備的枚舉和初始化。當POST完成以後,他就會從內存中清理出來,而而BISO運行服務確依然停留在內存之中,所以目標操作系統就可以使用這些服務。

一般來說,linux系統都是從硬盤上引導的,其主引導記錄是MBR,他包含主引導加載程序,當MBR加載到RAM中,BISO會將控制權移交給MBR。

在超級用戶root下運行。纔看MBR內容。

#dd if=/dev/had of=mbr.bin bs=512 count=1
二.啓動GRUB/LILO引導加載程序!

注:引導加載程序用於引導操作系統啓動。當機器引導它的操作系統時,BIOS會讀取引導介質上最前面的512字節(主引導記錄)。

LILO和GRUB的區別。

LILO沒有交互式命令界面,而GRUB有;

LILO不支持網絡引導,GRUB支持。

LILO將可以引導的操作系統的信息存儲在MBR中。

如果配置文件出錯,就會默認轉到GRUB命令行界面中。

 三.加載內核

加載內核映像到內存中,內核映像並不是一個可執行的內核,而是一個壓縮過的內核映像,(壓縮映像<512kb,,或是一個>512kb的壓縮映像)。

 

 

 

init 在進入某個特定的運行級別時運行相應的程序,以此對各種運行級別進行管理。它的這個作用是由/etc/inittab文件定義的。

1./etc/rc.d/rc.sysinit

在init的配置文件中有如下一行:
si::sysinit:/etc/rc.d/rc.sysinit

 

rc.sysinit是由init執行的第一個腳本,它主要完成一些系統初始化的工作。rc.sysinit是每一個運行級別都要首先運行的重要腳本,它主要完成的工作有:激活交換分區、檢查磁盤、加載硬件模塊以及其他一些需要優先執行的任務。/etc/rc.d/ rc.sysinit主要完成各個運行模式中相同的初始化工作。包括:

設置初始的$PATH變量;
配置網絡;
爲虛擬內存啓動交換;
調協系統的主機名;
檢查root文件系統,以進行必要的修復;
檢查root文件系統的配額;
爲root文件系統打開用戶和組的配額;
以讀/寫的方式重新裝載root文件系統;
清除被裝載的文件系統表/etc/mtab;
把root文件系統輸入到mtab;
使系統爲裝入模塊做準備;
查找模塊的相關文件;
檢查文件系統,以進行必要的修復;
加載所有其他文件系統;
清除/etc/mtab、/etc/fastboot和/etc/nologin;
刪除UUCP和lock文件;
刪除過時的子系統文件;
刪除過時的pid文件;
設置系統時鐘;
激活交換分區;
初始化串行端口;
裝入模塊。

 

2./etc/rc.d/rcX.d/[KS]

在rc.sysinit執行後,將返回init,繼續執行/etc/rc.d/rc程序。以運行級別5爲例,init將執行配置文件inittab中的以下內容:
15:5:wait:/etc/rc.d/rc 5

這一行表示以5爲參數運行/etc/rc.d/rc,/etc/rc.d/rc是一個shell腳本,它接受5作爲參數,去執行/etc/rc.d/rc5.d目錄下的所有的rc啓動腳本,/etc/rc.d/rc5.d目錄中的啓動腳本實際上都是一些鏈接文件,而不是真正的rc啓動腳本,真正的rc啓動腳本實際上都在/etc/rc.d/init.d目錄下。而這些rc啓動腳本有着類似的用法,它們一般能接受stat、stop、restart、status等參數。

/etc/rc.d/rc5.d中的rc啓動腳本通常是以K或S開頭的鏈接文件,以S開頭的啓動腳本將以start參數來運行。如果發現相應的腳本也存在K打頭的鏈接,而且已經處於運行狀態了(以/var/lock/subsys下的文件作爲標誌),則將首先以stop爲參數停止這些已經啓動了的守護進程,然後再重新運行。這樣做是爲了保證當init改變運行級別時,所有相關的守護進程都將重啓。

至於在每個運行級中將運行哪些守護進程,用戶可以通過chkconfig來自行設定。常見的守護進程如下。

amd:自動安裝NFS守護進程。
apmd:高級電源管理守護進程。
arpwatch:記錄日誌並構建一個在LAN接口上看到的以太網地址和IP地址對應的數據庫
outofs:自動安裝管理進程automount,與NFS相關,依賴於NIS。
crond:Linux系統下計劃任務的守護進程。
named:DNS服務器。
netfs:安裝NFS、Samba和Netware網絡文件系統。
network:激活已配置網絡接口的腳本程序。
nfs:打開NFS服務。
portmap:RPCportmap管理器,它管理基於RPC服務的連接。
sendmail:郵件服務器sendmail。
smb:Samba文件共享/打印服務。
syslog:一個讓系統引導時啓動syslog和klogd系統日誌守候進程的腳本。
xfs:X Window字型服務器,爲本地和遠程X服務器提供字型集。
Xinetd:支持多種網絡服務的核心守護進程,可以管理wuftp、sshd、telnet等服務。

這些守護進程啓動完畢,rc程序也就執行完了,然後又返回init繼續下一步。

 

3.執行/etc/ec.d/rc.local

RHEL 4中的運行模式2、3、5都把/etc/rc.d/rc.local做爲初始化腳本中的最後一個,所以用戶可以自己在這個文件中添加一些需要在其他初始化工作之後、登錄之前執行的命令。在維護Linux系統時一般會遇到需要系統管理員對開機或關機命令腳本進行修改的情況。如果所做的修改只在引導開機的時候起作用,並且改動不大的話,可以考慮簡單地編輯一下/etc/rc.d/rc.local腳本。這個命令腳本程序是在引導過程的最後一步被執行的。

 

六.執行/bin/login程序

login程序會提示使用者輸入賬號及密碼,接着編碼並確認密碼的正確性,如果賬號與密碼相符,則爲使用者初始化環境,並將控制權交給shell,即等待用戶登錄。

login會接收mingetty傳來的用戶名作爲用戶名參數,然後login會對用戶名進行分析。如果用戶名不是root,且存在/etc/nologin文件,login將輸出nologin文件的內容,然後退出。這通常用來在系統維護時防止非root用戶登錄。只有在/etc/securetty中登記了的終端才允許root用戶登錄,如果不存在這個文件,則root可以在任何終端上登錄。/etc/usertty文件用於對用戶作出附加訪問限制,如果不存在這個文件,則沒有其他限制。

在分析完用戶名後,login將搜索/etc/passwd以及/etc/shadow來驗證密碼以及設置賬戶的其他信息,比如:主目錄什麼、使用何種shell。如果沒有指定主目錄,則將主目錄默認設置爲根目錄;如果沒有指定shell,則將shell類型默認設置爲/bin/bash。

Login程序成功後,會向對應的終端再輸出最近一次登錄的信息(在/var/log/lostlog中有記錄),並檢查用戶是否有新郵件(在/usr/spool/mail的對應用戶名目錄下),然後開始設置各種環境變量。對於bash來說,系統首先尋找/etc/profile腳本文件並執行它;然後如果用戶的主目錄中存在.bash_profile文件,就執行它,在這些文件中又可能調用了其他配置文件,所有的配置文件執行後,各種環境變量也設好了,這時會出現大家熟悉的命令行提示符,至此整個啓動過程就結束了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四.執行init進程

 

 

init進程是系統所有進程的起點,內核在完成核內引導以後,即在本進程空間內加載init程序,它的進程呈是1。Init進程是所有進程的發起者和控制者。因爲在任何基於Linux的系統中,它都是第一個運行的進程,所以init進程的編號(PID)永遠是1。還有init進程永遠不會被終止。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章