王士剛
長春大學,吉林長春 130022
Linux系統的啟動過程研究
王士剛
長春大學,吉林長春 130022
Linux操作系統是日益流行起來的具有多用戶、多任務、支持多線程和多CPU的操作系統。在linux操作系統的啟動過程中,經歷了BIOS自檢,GRUB引導,加載Linux 內核,執行/sbin/init,執行腳本等過程。本文主要研究Linux啟動過程中的每個步驟,揭示Linux的啟動過程。
GRUB;Linux;引導;操作系統
Linux操作系統是免費使用和自由傳播的操作系統,是具有多用戶、多任務、支持多線程和多CPU等特點的操作系統。在Linux操作系統啟動過程中,我們能看到大量的檢測語句和檢測結果。這些檢測過程使我們對Linux操作系統的啟動充滿了好奇。Linux操作系統的啟動經歷了BIOS自檢、GRUB引導、加載Linux內核、執行/sbin/init和執行腳本等一系列過程。在這個過程的第一個步驟BIOS自檢是任何一個操作系統啟動必須經歷的過程,也是機器啟動時必要的自我檢查的過程。下面我們來詳細研究一下每個步驟。
當啟動電源時,計算機會從CMOS(互補金屬氧化物半導體,保存了計算機運行最基本的程序和參數)加載BIOS(基本輸入輸出程序,完成機器自檢等步驟后將主控權交給引導程序),開始檢測基本的硬件信息。
BIOS首先要對系統進行全面檢查,確保每個核心組件,例如:cpu、內存等存在,并且正常運行。這一檢測經常被稱為post或power on selftest(加電自檢)。
系統的BIOS初始化串行端口、視頻設備、鍵盤等核心設備驅動程序,分配合適的系統資源,例如IRQ和I/O端口。目前的BIOS也執行即插即用協議(檢測并驅動即插即用設備的協議),此協議用來探測PCI設備所支持的設備資源設置,并且為每一個PCI設備分配一個不同與其他設備沖突的配置。
BIOS完成設備初始化工作之后,會搜索機器中合適的引導設備,這個過程可能因為機器本身的情況而有所不同,這些參數也可以在CMOS中修改。通常引導設備按以下選項選擇。
第一,軟盤驅動器;
第二,CD光驅;
第三,SCSI硬盤或IDE;
第四,PXE兼容網卡。
說明:預啟動執行環境PXE兼容網卡通常情況下執行DHCP IP配置協議和TFTP文件傳輸協議,允許網卡在網絡中發現和下載內核映像。
在選擇了合適的引導盤后,BIOS會把磁盤的第一個數據塊載入內存中,并把執行傳遞到這個區域。任何引導盤的第一個數據塊都含有一個小的可執行文件,即引導程序。引導程序會因為所使用操作系統的不同而不同,即使同一類操作系統,也會因為版本不同而不同。Linux的引導程序由最初的LILO發展到現在的GRUB,我們這篇文章主要介紹GRUB的相關內容。
GRUB是一個來自GNU項目的多操作系統啟動程序,是將引導裝載程序安裝到主引導記錄的一個程序,主引導記錄位于硬盤開始的扇區。是計算機在啟動過程中運行的第一個程序,一般情況下在計算機啟動時,通過BIOS自檢后讀取并且運行硬盤主引導扇區中的啟動引導器程序,啟動引導再負責加載啟動硬盤分區中的操作系統。
Linux系統中的引導程序有以下3個作用:
1)編寫合適的內核命令行;
2)裝載合適的初始虛擬磁盤(簡稱initrd);
3)裝載合適的linux內核并移交控制權給他。
BIOS通過裝載并執行磁盤的第一個數據塊的方式把控制權傳遞給引導程序。所以,引導程序在設計上通常執行兩個階段:
第一階段,第一階段的引導程序通常很小,適合主引導記錄。第一階段引導程序的任務是:定位、裝載并把控制權傳遞給第二個階段的引導程序,這個文件在文件系統中是看不到的;
第二階段,第二階段的引導程序通常就是引導程序自身,它在啟動時就運行了某種形式的應用程序,能夠讀取有關默認設置的配置信息。第二階段引導程序通常是文件系統中可以識別的二進制文件。
在GRUB引導階段,系統開始加載內核程序,可以說是此時以正式進入Linux 的控制階段。Linux首先會檢索系統上所有硬設備,并且驅動它們,同時,這些硬設備的信息也會在屏幕上顯示,用戶可以通過顯示信息了解硬設備是否成功驅動。也可以在開機后,打開/var/log/dmesg文件來檢查所有的開機信息。
在系統加載內核后,系統會調用/sbin/init程序,在init程序執行完畢后,init程序會成為所有啟動程序的父程序。
第一,系統執行/etc/rc.d/rc.sysint Script腳本,通過執行此腳本,完成以下功能:1)用來設置環境變量的內容;2)通過讀取/etc/sysconfig/network文件來設置網絡參數等內容;3)啟動Swapping,檢查root文件系統是否正,檢查系統參數及設置PNP、消除/etc/mtab;4)加載root及/proc文件系統,決定是否使用模塊并加載模塊;5)使用fsck檢查文件系統;6)加載其他文件系統;7)設置平臺字符;8)打開配置(quota),清除不必要的文件;9)使用/etc/sysconfig/clock文件以初始化clock;10)執行rc.serial以將串行端口進行初始化。將開機信息經由dmesg存入/var/log/dmesg中。第二,執行/etc/inittab Script。第三,執行/etc/rc.d/rc.local。第四、執行/bin/login程序,提示用戶輸入帳號和密碼,對帳號和密碼進行編碼,確認密碼的正確性,若正確,則開始為用戶進行環境的初始化,然后將控制權交給shell。至此系統啟動成功。
Linux操作系統與windows操作系統的啟動過程有相近之處。在操作系統獲得系統控制權之前都是由BIOS完成機器啟動、自檢等步驟,在此之后就有些不同,Linux引導程序是GRUB,而windows2003/xp使用的引導程序是NTLDR,windows vista/7使用的則是bootmgr,因此在啟動過程中有很大的區別,不過最終都完成了從BIOS到OS的啟動過程。
[1]奈米斯. Linux系統管理技術手冊[M].2版.北京:人民郵電出版社,2008:45-72.
[2]余柏山. Linux系統管理與網絡管理[M].北京.清華大學出版社,2010:55-84.
[3]新設計團隊.Linux內核設計的藝術:圖解Linux操作系統架構設計與實現原理[M].北京:機械工業出版社,2011:3-42.
TP39
A
1674-6708(2011)57-0184-02
王士剛,助教,工作單位:長春大學計算機科學技術學院,主要從事計算機操作系統等方面的研究工作