CentOS系統啟動流程

來源:互聯網
上載者:User

標籤:centos啟動流程


CentOS系統的啟動流程:

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/78/CA/wKioL1aDemOhEXseAABYNcSDDKg204.png" title="系統啟動.png" alt="wKioL1aDemOhEXseAABYNcSDDKg204.png" />

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" title="系統啟動.png" alt="spacer.gif" />


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


1、POST加電自檢


    當電腦的硬體加電後,會進行自檢,這個過程通常稱為POST(Power On Self Test),加電的過程會檢查電腦各組件是否存在以及是否能夠正常工作。




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




2、載入bootloader


    自檢完成後,主板上的BIOS程式通常是轉向第一塊硬碟的第一個扇區即主引導記錄(MBR)來裝載bootloader。

    主引導記錄MBR(Master Boot Record)在磁碟的第一個扇區中,大小為512位元組:前446位元組

是bootloader,中間64個位元組為DPT即磁碟分割表,最後兩個位元組為MBR的有效標識,55AA表示MBR有效。


    bootloader的作用是允許使用者選擇要啟動的系統或不同的核心版本;把使用者選定的核心裝載到RAM的特定空間中,解壓、展開,而後把系統控制權移交給核心;但由於bootloader的大小隻有446位元組,意味著其能夠實現的代碼和任務有限,所以centos使用grub的機制來啟動系統的引導過程。

     grub將引導的過程分成了1,2兩個階段,第一個階段載入bootloader,此時bootloader不載入核心,而是用來載入grub的第二階段至記憶體中,其後可以在記憶體中不受MBR的限制可以實現很多複雜的功能以及載入使用者選擇的核心,並能夠傳遞參數至核心。




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



3、核心的初始化


核心(kernel)的初始化分為四個步驟:


    1、探測可識別到的所有硬體裝置;

    2、載入硬體驅動程式(有可能會藉助於ramdisk載入驅動);由於核心不可能將所有硬體裝置的驅動直接編譯進核心中,所以當核心無法載入根檔案系統所在裝置的驅動程式時,便會由特定的工具程式來建立產生ramdisk檔案,ramdisk是運行於記憶體中的一個簡裝版的根檔案系統,其作用在於:

    ramdisk會在記憶體中載入一個虛擬根檔案系統去識別真正的根檔案系統所需的驅動程式並載入,載入完成後,核心便可識別真正的根檔案系統並將其掛載,此時ramdisk再將根切換給真正的根檔案系統,自己退出記憶體

    3、以唯讀方式掛載根檔案系統;防止核心有bug導致根檔案系統上的資料丟失,在系統初始化時核心會以讀寫方式重新掛載根檔案系統

    4、最後將任務轉交給init程式來載入運行使用者空間的第一個應用程式:/sbin/init


核心層級的系統初始化流程總結:

POST加電自檢 --> BootSequence(BIOS) --> Bootloader(MBR) --> Kernel(ramdisk) --> rootfs(readonly) --> /sbin/init()




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




4、運行init程式,接管使用者空間


以CentOS 5為例,init程式會首先通過讀取其設定檔/etc/inittab設定系統的運行層級以及在各層級下要啟動的任務


init設定檔:/etc/inittab 決定了系統初始化中啟動哪些服務,其每行定義一種action以及與之對應的process

    id:runlevels:action:process

    id:一個任務的唯一識別碼;

    runlevel:在哪些層級啟動此任務;#,###,也可以為空白,表示所有層級

    action:在什麼條件下啟動此任務;

    process:具體的任務;

action:啟動時的情境

    wait:等待切換至此任務所在的層級時執行一次;

    respawn:一旦此任務終止,就自動重新啟動之;

    initdefault:設定預設運行層級;此時,process省略;

    sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit系統初始化指令碼



運行層級:是為了系統的運行或維護等目的而設定的機制,預設啟動並執行是3,5層級

    0-6:7個層級;

    0:關機,shutdown

    1:單一使用者模式(single user),root使用者,無需認證;維護模式

    2:多使用者模式(multi user),會啟動網路功能,但不會啟動NFS;維護模式

    3:多使用者模式(multi user),完全功能的模式,文本介面

    4:預留層級:目前無特別使用目的,但習慣以同3層級功能使用

    5:多使用者模式(multi user),完全功能模式,圖形介面

    6:重啟模式,reboot


1、指定運行層級

例如id:3:initdefault: 表示預設運行3層級


2、運行系統初始化指令碼

例如si::sysinit:/etc/rc.d/rc.sysinit

表示在所有層級下都會運行/etc/rc.d/rc.sysinit指令碼完成系統初始化


系統初始化完成後,init程式會運行/etc/init.d/*(/etc/rc.d/init.d/*)下的指令碼決定系統啟動時要開啟或關閉哪些服務。

/etc/init.d/*(/etc/rc.d/init.d/*)指令碼可以接受一個運行層級數字為參數設定對應層級下需要開啟或停止的服務

/etc/rc.d/rc#.d/中的S*:表示要啟動的服務;K*:表示要停止的服務


3、定義啟動終端,

例如:

tty1:2345:respawn:/usr/sbin/mingetty tty1

... ...

tty6:2345:respawn:/usr/sbin/mingetty tty6

     表示當系統運行層級為2345中任何一種時,會自動運行/usr/sbin/mingetty程式啟動tty1-6的虛擬終端,/usr/sbin/mingetty檔案會調用login程式讓使用者登入



總結(使用者空間的啟動流程):

讀取/sbin/init(/etc/inittab)設定預設運行層級 --> 運行系統初始化指令碼,完成系統初始化 --> 關閉對應層級下需要停止的服務(K*),啟動對應層級下需要開啟的服務(S*) --> 設定登入終端 [--> 啟動圖形終端] 


當啟動登入終端完成後,系統即啟動完成


CentOS系統啟動流程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.