解析Centos啓動過程

解析Centos啓動過程

第一步---加載BIOS

打開電源,系統會首先加載BIOS,BIOS運行上電自檢程序,對電腦的硬件設施進行完全徹底的檢驗和測試,檢測完成後通過BIOS獲取到與CPU、內存、硬盤、設備啓動順序等相關的信息。


第二步---讀取MBR記錄

硬盤上的0磁道的第一個扇區既是MBR,大小爲512字節,存放着預啓動信息、分區表信息,當系統讀取到MBR記錄,就會把MBR記錄複製到0x7c00地址所在的物理內存之中,成爲boot loader(在centos中就是grub)。


第三步---加載boot loader

在操作系統加載內核之前,會先加載boot loader,通過boot loader初始化硬件設備、建立內存映射圖,從而把系統的硬件和軟件環境調試到一個合適的狀態,爲系統加載內核做好準備。


第四步---加載內核

通過上一步,系統的硬件和軟件環境已經做好準備,可以加載內核。系統首先讀取內存映像,並解壓內存映像,把解壓之後的內核放置在內存之中,並調用start_kernel()函數來啓動一系列的初始化函數並初始化各種設備,完成linux內核的建立。


第五步---定義運行級別

內核加載成功之後,/sbin/init會首先運行,該程序會去讀取/etc/inittab文件,依據文件的配置進行初始化工作,設定系統的運行級別。


第六步---執行rc.sysinit
運行級別定義之後,系統會執行/etc/rc.d/rc.sysinit腳本,這個腳本會設定網絡配置、啓動swap分區、設定/proc等等內容,有關rc.sysinit腳本的具體功能,可以查看/etc/rc.d/rc.sysinit裏面的內容。


第七步---加載內核模塊
依據/etc/modules.conf文件或/etc/modules.d目錄下的文件來加載內核模塊,這個功能的實現與sys_init_module()函數和load_module()函數有關,但是我本人不是很瞭解這兩個函數,社區中對於linux開機如何加載內核模塊也沒有一個很明確規範的文章,如果有些朋友對這一方面有所興趣,可以私信我,互相學習討論。


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


第九步---執行/etc/rc.d/rc.local
在系統啓動的最後階段,系統會執行rc.local裏面的命令,這是自定義開機啓動程序,可以根據自己的需求把需要開機自動運行的程序寫在這個腳本里


第十步---執行/bin/login程序

login程序會提示用戶輸入賬號及密碼,如果用戶名與密碼輸入正確,則爲用戶初始化環境,並將控制權交給shell,login程序成功後,系統開始設置各種環境變量。對於bash來說,系統首先尋找/etc/profile腳本文件並執行它;然後如果用戶的主目錄中存在.bash_profile文件,就執行它,在這些文件中又可能調用了其他配置文件,所有的配置文件執行後,各種環境變量也就設好了,至此整個啓動過程就結束了。


   本文只是對Centos啓動過程做一次大概的解析,其中還有很多內容未涉及,深究起來,可以寫幾萬字呢,如果此文有勘誤,歡迎大家在下面留言。



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