標籤:grand 程式
系統啟動流程
系統的啟動時一項非常複雜的過程,核心需要檢測硬體並載入驅動程式,接著調用相關程式為系統運行準備好環境。下面以centos6為例,說明系統的啟動過程。
1 post
當我們按下開機的電源後,主板上的晶片集會首先向CPU發出一個指令,CPU就會跳轉到BIOS中的啟動代碼位置; BIOS首先要檢測關鍵裝置(如記憶體、顯卡等)是否正常,這個過程就稱為POST(加電後自檢)。
2 boot sequence(BIOS)
引導次序:按次序找引導裝置,第一個有引導程式的裝置,即為啟動所用到的裝置。
3 MBR(Bootloader)
MBR(Mater Boot Record),即主引導記錄,其位置在硬碟第一個扇區的前512位元組。。它由三個部分組成,主引導程式(Bootloader)、硬碟分區表DPT(Disk Partition table)和硬碟有效標誌(55AA),其結構圖如下所示:
現在常用的Bootloader程式為GRUB,GRUB(Grand Unified Bootloader)是由GNU組織所推行的;CentOS 5和CentOS 6上使用的版本為Grub 0.97。
GRUB是位於/boot下的一個目錄,其裡面的內容如:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/74/04/wKiom1YNIEDxl4dyAAFD74n6hcg187.jpg" title="圖片1.png" alt="wKiom1YNIEDxl4dyAAFD74n6hcg187.jpg" />
從中可以看到stage1、 *_stage1_5和stage2這三類檔案,它們分別表示GRUB引導時的三個階段。stage1執行Bootloader。grub目錄中存在許多以stage1_5結尾的檔案,這些檔案都是stage1_5階段功能的檔案,裡面存放著檔案系統的格式,其作用是串連stage1和stage2的一個通道。stage2階段會讀取grub.conf設定檔中設定資訊來完成系統的引導,載入核心
4 載入核心及initrd
當stage2被載入記憶體執行時,它首先會去解析grub的設定檔/boot/grub/grub.conf,然後載入核心鏡像到記憶體中,並將控制權轉交給核心,而核心會立即初始化系統中各裝置並做相關的配置工作。
關於Linux的裝置驅動程式的載入,有一部分驅動程式直接被編譯進核心鏡像中,另一部分驅動程式則是以模組的形式放在initrd(ramdisk)中。Initrd稱為虛擬檔案系統,它是啟用系統所必須載入的檔案系統。當kernel被載入到記憶體後,需要載入相應驅動程來識別檔案系統,這時initrd就充當了臨時的系統被掛載到rootfs上,其作用就是協助kernel來載入驅動程式。initrd載入各種儲存介質相關的裝置驅動程式。當所需的驅動程式載入完後,會建立一個根裝置,然後將根檔案系統rootfs以唯讀方式掛載。這一步結束後,釋放未使用的記憶體,轉換到真正的根檔案系統上面去,同時運行/sbin/init程式,執行系統的1號進程。此後系統的控制權就全權交給/sbin/init進程了。
5 init進程
/sbin/init進程是系統其他所有進程的父進程,當它接管了系統的控制權先之後,它首先會去讀取/etc/inittab檔案來執行相應的指令碼進行系統初始化, inittab內有個重要的選項就是運行層級runlevel,init進程會讀取/etc/inittab中定義的運行層級,做相應的配置。runlevel有0-6共7個層級,分別是:
0-halt關機
1-single user mode 單使用者維護模式
2-multi-user,without NFS 無網路功能的文字模式
3-full-muliti-user mode 完整的文字模式
4-unused 系統保留,未使用
5-X11 啟動圖形介面
6-reboot 重啟
裝有圖形介面時一般預設層級為5,未裝圖形介面預設為3
6 利用/etc/rc.d/rc.sysint初始化
1、設定主機名稱:讀取/etc/sysconfig/network檔案中的HOSTNAME參數,並以之設定主機名稱;
2、列印文本歡迎資訊;
3、啟用SElinux和udev;
4、掛載/etc/fstab檔案中定義的檔案系統;
5、啟用swap;
6、檢測根檔案系統,並以讀寫方式重新掛載;
7、設定系統時鐘;
8、根據/etc/sysctl.conf的檔案設定設定核心參數;
9、啟用LVM和RAID裝置;
10、載入額外裝置的驅動程式;
11、清理工作。
7 init執行選定的runlevel層級的相關服務的啟動
當/etc/rc.d/rc.sysinit執行完後,系統就可以順利工作了,只是還需要啟動系統所需要的各種服務,這樣主機才可以提供相關的網路和主機功能,完成了系統所有的啟動任務後,linux會啟動終端或X-Window來等待使用者登入,至此,系統就啟動完畢了。
本文出自 “linux” 部落格,請務必保留此出處http://yong1205.blog.51cto.com/10404369/1699803
centos6啟動流程