摘要:詳細研究了計算機的開機啟動及系統加載等內容,結合硬件和軟件之間的協同調用機制,給出了從計算機觸發開機按鈕到加載操作系統,最后出現開機界面整個過程的相對完善的論述。對于計算機初學者全面認識開機過程十分有幫助。
0引言
對于大多數非計算機類相關專業的人來說,對計算機的認識只停留在掌握其基本操作的層面上,并不十分了解其內部運行原理,探索開機過程可以幫助他們從更深層次認識計算機。計算機從接通電源到出現操作界面經歷了一系列非常復雜的過程。首先計算機要對所有關鍵的硬件設備按一定順序依次進行檢測和配置,然后根據引導扇區從存儲設備中加載操作系統,并進一步完成系統初始化工作。了解計算機開機啟動過程,幫助用戶加強對計算機的日常維護,通過升級硬件性能提高開機速度,使想要探究計算機科學技術的人對計算機的運行機制有一個初步認識。
1加電自檢
計算機的初始化啟動過程稱為自舉,也叫“Boot”(引導)。名詞來源于一個說法,計算機啟動的概念在剛開始確立的時候是矛盾的:計算機必須要先啟動程序,機器才能運行,然而計算機不運行,機器就無法啟動,究竟應該如何啟動計算機曾經使人們百思不得其解。在經歷了很長一段時間之后,最終工程師們想盡各種辦法克服了這個矛盾。將開機程序寫入內存,從而把計算機自檢與操作系統加載連接起來,終于使計算機能夠正常啟動運行。
1.1CPU準備工作
當人們按下開機按鈕時,電源開始向主板和其他設備供電。由于開始時電壓不太穩定,主板上的控制芯片組會向CPU發出并保持一個寬度大于2 ms的正脈沖信號即RESET(復位)信號。一般經過100~500 ms電源將產生電壓穩定的邏輯信號,當芯片組檢測到這個信號時便撤去RESET信號。電腦中央處理器(Central Processing Unit, CPU)開始從地址FFFF0000H處讀取指令,此時基本輸入輸出系統(Basic Input and Output System, BIOS)根據存放在這里的跳轉指令找到自己真正的啟動代碼線程,開始一系列的檢測和配置工作。
1.2系統BIOS的基本功能
在計算機系統中起著重要作用的BIOS是直接與硬件打交道的底層代碼,它保存著計算機最重要的基本輸入輸出程序、開機自檢程序和系統自啟動程序。它由一種特殊的電腦主板上的電池來供電,從隨機存取存儲器(Complementary Metal Oxide Semiconductor, CMOS)中讀寫系統設置的具體信息,為操作系統提供了控制硬件設備的基本功能。BIOS包括有系統BIOS(即主板BIOS),顯卡BIOS和其他設備(例如集成驅動器電子控制器、小型計算機系統接口卡或網卡等)的BIOS。BIOS一般存放在只讀存儲器(Read Only Memory, ROM),可以永久性地保存數據和程序信息,即使機器停電,這些數據也不會丟失。
1.3BIOS的檢測過程
系統BIOS的啟動代碼首先進行硬件自檢(PowerOn SelfTest, POST),主要檢測系統中一些關鍵設備是否存在和能否正常工作,如內存和顯卡等。由于此時顯卡還沒有初始化,如果在自檢過程中發現硬件有問題系統會發出蜂鳴,聲音的長短和次數代表了不同的錯誤類型。如果沒有錯誤發生,POST過程會很快結束,之后會調用其他代碼來進行更完整的硬件檢測。
接下來系統BIOS將查找顯卡的BIOS(在地址C0000H處),找到顯卡BIOS之后就調用它的初始化代碼來初始化顯卡,對于大多數顯卡來說都會將一些初始化信息顯示在屏幕上,例如生產廠商、型號等基本信息,但幾乎是一閃而過。系統BIOS接著會查找其他設備的BIOS程序,調用它們的初始化代碼來初始化相關設備。最后,系統BIOS將顯示出它自己的啟動畫面,列出系統BIOS的類型、序列號和版本號等內容。
下一步,系統BIOS將檢測和顯示CPU的類型和工作率,接著測試所有的隨機存取存儲器(Random Access Memory, RAM),同時在屏幕上顯示內存測試的進度,內存測試通過之后,系統BIOS將開始檢測系統中安裝的一些標準硬件設備,包括硬盤、CDROM等。接下來將要檢測和配置系統中安裝的即插即用設備,顯示出檢測到的設備名稱和型號信息,為這些設備分配可用資源[1]。
所有硬件設備都檢測完畢之后,屏幕上會顯示出各種標準硬件設備使用的資源和相關工作參數等信息。然后系統BIOS將更新擴展系統配置數據(Extended System Configuration Data, ESCD),系統BIOS通過它來與操作系統交換硬件配置信息,這些數據被存放在CMOS中,通常ESCD數據只在系統硬件配置發生變化時才會更新。
2主引導記錄
硬件自檢完成之后,系統BIOS的操作界面上會顯示出用戶指定的啟動設備順序,所列外部存儲設備可以是軟盤、硬盤或者是光盤等。排在前面的設備擁有優先轉交控制權,BIOS按照啟動順序讀取設備中的主引導記錄(Master Boot Record, MBR),放到7C0000H內存地址中,從MBR中查找接下來要讀取的信息。
2.1主引導記錄的結構
主引導記錄位于硬盤的零柱面零磁頭的第一個扇區上,共512 B。如果這512 B的最后兩個字節是55AAH,則表示這個設備是可以啟動的,如果不是則表示這個設備不能啟動,需要把控制權轉交給啟動順序表中的下一個設備。標準MBR的字節碼含義如表1所示。
2.2分區表
找到主引導記錄之后,系統開始讀取有效的分區表。分區表的長度為64 B,細分成四個主分區,每個主分區占用16 B。硬盤分區有很多好處,可以在不同的分區中分別裝入不同的操作系統,實現多系統共存。主引導記錄通過分區表的第一個字節判斷該主分區是否為激活分區,四個主分區中只有一個是激活的。分區表結構如表2所示。
從表2中可以看出,主分區的扇區個數共占4 B,故一個主分區的最大扇區總數為232個。如果每個扇區大小為512 B,則每個分區最大為2 TB(1 TB=240 B)。扇區的邏輯地址也占用32 bit,故硬盤最大可利用空間為2 TB。因此,如果要擴大硬盤空間有兩個辦法:一是提高每個扇區的字節數,二是增加扇區總數。目前硬盤存儲容量已經達到了3 TB的階段,相關技術還在持續發展中,存儲容量仍將有所提升[2]。
3硬盤啟動
3.1通過主分區啟動硬盤
計算機讀取激活分區的第一個扇區卷引導記錄(Volume Boot Record, VBR),也叫做卷引導扇區或分區引導記錄、分區引導扇區,通過主分區邏輯地址的起始地址找到相對應的VBR。如果存儲設備未被分區,如軟盤,則VBR位于該設備的第一個扇區。VBR中包含有很多信息,比如,每個扇區的字節數,每一簇包含的扇區數,保留區的扇區大小,文件分配表(File Allocation Table, FAT)中的文件數目,每一個FAT所占用的扇區大小,存放根信息的簇的位置等信息。通過VBR系統BIOS可以找到操作系統在這個分區中的具體位置,然后計算機將開始查找地址信息加載操作系統。從圖1可以看到整個硬盤的邏輯結構[3]。
3.2通過擴展分區啟動硬盤
四個主分區表中有且僅有一個區可以被定義成擴展分區(Extended Partition, EP),擴展分區中又有多個邏輯分區。計算機首先讀取擴展分區的第一個扇區即“擴展引導記錄”(Extended Boot Record, EBR),EBR中包含一張64 B的分區表,擴展分區可以包含無數個邏輯分區。但是,計算機很少選擇這種方式啟動操作系統。如果操作系統安裝在擴展分區,一般會選擇通過啟動管理器的辦法啟動操作系統。
3.3通過啟動管理器啟動硬盤
在這種情況下,計算機在讀取MBR時不會把控制權轉交給某一分區,而是運行事先安裝的啟動管理器,由用戶選擇要啟動的操作系統。在Linux系統下的啟動管理器(G Rand Unified Boot loader, Grub)以MBR的前446 B作為自己的開始執行程序,可以選擇操作系統分區上的不同內核,也可以向這些內核傳遞啟動參數。
3.4文件系統
在操作系統中,與文件和目錄相關的子系統稱為文件系統,用來組織和管理文件。它把存儲空間組織成物理位置,并提供一種可以對存放于其中的數據進行索引的機制。并且建立按層次安排的索引關系,將磁盤的物理分區轉換成邏輯分區,再把數據分配到邏輯分區的位置。微軟系統常用的文件系統主要有FAT16、FAT32和NTFS(New Technology File System)等。
FAT16即16位的文件分配表,使用最為廣泛,在微軟等的操作系統中,磁盤文件的分配以“簇”為單位,無論該文件占用整個容量的比例是多少,每個簇只對應一個文件使用,且它最大只能支持2 GB的分區,因此它存在硬盤實際空間利用率低的缺點。隨著電腦硬件性能的提高,微軟推出了增強的文件系統FAT32,它可以支持的最大磁盤大小為2 TB,采用更小的簇可以更有效地保存信息,FAT32文件系統可以重新定位根目錄和使用FAT的備份副本,此外,它的啟動記錄被包含在一個含有關鍵數據的結構中,減少了電腦系統崩潰的可能性。NTFS是隨著微軟NT操作系統而產生的,它的優點是安全性和穩定性較強,在使用中不易產生文件碎片。NTFS可以支持的文件大小達到64 GB,遠遠高于FAT32下的4 GB,而且它可以支持長文件名[4]。
4加載操作系統
操作系統確定之后,它的內核先被載入內存,進行系統初始化,加載設備驅動程序。在Linux系統下,首先載入/boot目錄下的操作系統kernel(內核),kernel是操作系統的核心部分,主要功能有控制和管理事件的調度和同步、進程間的消息傳遞、存儲器管理和進程管理等。磁盤文件系統掛載,內核加載成功后,首先運行磁盤文件系統下/sbin /init中的程序,它根據配置文件產生init進程。這是Linux啟動后的第一個進程,設置進程控制塊中的進程識別號PID(Process Identification,PID)編號為1,其他進程都在它之后產生,為其子進程。然后init線程開始加載系統的各個模塊,比如窗口程序和網絡程序,最后執行/bin/login程序,出現登錄界面,用戶輸入用戶名和密碼。成功登錄之后,系統啟動過程便順利完成,接下來用戶便可以進行正常的日常使用了。
5結論
計算機啟動過程涉及到計算機底層硬件和系統軟件等知識,了解整個過程之后,可以在此基礎上加強對計算機系統的認識和維護。如果在啟動計算機的過程中發生問題,用戶可以根據問題產生的不同階段進行分析,并找到解決辦法,使計算機成功運行起來。
參考文獻
[1] 孫維連,于莉莉,單琳娜. 硬盤維護與數據恢復[M]. 北京:中國水利水電出版社,2007.
[2] 趙乾偉. 電腦硬盤終極應用[M]. 北京:人民郵電出版社,2006.
[3] 阮一峰. 如何變得有思想[M]. 北京:人民郵電出版社,2014.
[4] 李換雙,潘平,羅輝,等.計算機安全漏洞及防范研究[J].微型機與應用,2013,32(7):64-65,68.