計算機啟動過程內幕大揭密

本文內容已被 [ 豬頭山 ] 在 2005-02-14 03:25:56 編輯過。如有問題,請報告版主或論壇管理刪除.

計算機啟動過程內幕大揭密

[推薦]計算機啟動過程內幕大揭密

打開電源啟動機器幾乎是電腦愛好者每天必做的事情,麵對屏幕上出現的一幅幅啟動畫麵,我們一點兒也不會感到陌生,但是,計算機在顯示這些啟動畫麵時都做了些什麽工作呢?相信有的朋友還不是很清楚,本文就來介紹一下從打開電源到出現Windows的藍天白雲時,計算機到底都幹了些什麽事情。

  首先讓我們來了解一些基本概念。第一個是大家非常熟悉的BIOS(基本輸入輸出係統),BIOS是直接與硬件打交道的底層代碼,它為操作係統提供了控製硬件設備的基本功能。BIOS包括有係統BIOS(即常說的主板BIOS)、顯卡BIOS和其它設備(例如IDE控製器、SCSI卡或網卡等)的BIOS,其中係統BIOS是本文要討論的主角,因為計算機的啟動過程正是在它的控製下進行的。BIOS一般被存放在ROM(隻讀存儲芯片)之中,即使在關機或掉電以後,這些代碼也不會消失。

  第二個基本概念是內存的地址,我們的機器中一般安裝有32MB、64MB或128MB內存,這些內存的每一個字節都被賦予了一個地址,以便CPU訪問內存。32MB的地址範圍用十六進製數表示就是0~1FFFFFFH,其中0~FFFFFH的低端1MB內存非常特殊,因為最初的8086處理器能夠訪問的內存最大隻有1MB,這1MB的低端640KB被稱為基本內存,而A0000H~BFFFFH要保留給顯示卡的顯存使用,C0000H~FFFFFH則被保留給BIOS使用,其中係統BIOS一般占用了最後的64KB或更多一點的空間,顯卡BIOS一般在C0000H~C7FFFH處,IDE控製器的BIOS在C8000H~CBFFFH處。

  第一步: 當我們按下電源開關時,電源就開始向主板和其它設備供電,此時電壓還不太穩定,主板上的控製芯片組會向CPU發出並保持一個RESET(重置)信號,讓CPU內部自動恢複到初始狀態,但CPU在此刻不會馬上執行指令。當芯片組檢測到電源已經開始穩定供電了(當然從不穩定到穩定的過程隻是一瞬間的事情),它便撤去RESET信號(如果是手工按下撲慊?姘逕係腞eset按鈕來重啟機器,那麽鬆開該按鈕時芯片組就會撤去RESET信號),CPU馬上就從地址FFFF0H處開始執行指令,從前麵的介紹可知,這個地址實際上在係統BIOS的地址範圍內,無論是Award BIOS還是AMI BIOS,放在這裏的隻是一條跳轉指令,跳到係統BIOS中真正的啟動代碼處。

  第二步: 係統BIOS的啟動代碼首先要做的事情就是進行POST(Power-On Self Test,加電後自檢),POST的主要任務是檢測係統中一些關鍵設備是否存在和能否正常工作,例如內存和顯卡等設備。由於POST是最早進行的檢測過程,此時顯卡還沒有初始化,如果係統BIOS在進行POST的過程中發現了一些致命錯誤,例如沒有找到內存或者內存有問題(此時隻會檢查640K常規內存),那麽係統BIOS就會直接控製喇叭發聲來報告錯誤,聲音的長短和次數代表了錯誤的類型。在正常情況下,POST過程進行得非常快,我們幾乎無法感覺到它的存在,POST結束之後就會調用其它代碼來進行更完整的硬件檢測。

  第三步: 接下來係統BIOS將查找顯卡的BIOS,前麵說過,存放顯卡BIOS的ROM芯片的起始地址通常設在C0000H處,係統BIOS在這個地方找到顯卡BIOS之後就調用它的初始化代碼,由顯卡BIOS來初始化顯卡,此時多數顯卡都會在屏幕上顯示出一些初始化信息,介紹生產廠商、圖形芯片類型等內容,不過這個畫麵幾乎是一閃而過。係統BIOS接著會查找其它設備的BIOS程序,找到之後同樣要調用這些BIOS內部的初始化代碼來初始化相關的設備。

  第四步: 查找完所有其它設備的BIOS之後,係統BIOS將顯示出它自己的啟動畫麵,其中包括有係統BIOS的類型、序列號和版本號等內容。

  第五步: 接著係統BIOS將檢測和顯示CPU的類型和工作頻率,然後開始測試所有的RAM,並同時在屏幕上顯示內存測試的進度,我們可以在CMOS設置中自行決定使用簡單耗時少或者詳細耗時多的測試方式。

  第六步: 內存測試通過之後,係統BIOS將開始檢測係統中安裝的一些標準硬件設備,包括硬盤、CD-ROM、串口、並口、軟驅等設備,另外絕大多數較新版本的係統BIOS在這一過程中還要自動檢測和設置內存的定時參數、硬盤參數和訪問模式等。

  第七步: 標準設備檢測完畢後,係統BIOS內部的支持即插即用的代碼將開始檢測和配置係統中安裝的即插即用設備,每找到一個設備之後,係統BIOS都會在屏幕上顯示出設備的名稱和型號等信息,同時為該設備分配中斷、DMA通道和I/O端口等資源。

  第八步: 到這一步為止,所有硬件都已經檢測配置完畢了,多數係統BIOS會重新清屏並在屏幕上方顯示出一個表格,其中概略地列出了係統中安裝的各種標準硬件設備,以及它們使用的資源和一些相關工作參數。

  第九步: 接下來係統BIOS將更新ESCD(Extended System Configuration Data,擴展係統配置數據)。ESCD是係統BIOS用來與操作係統交換硬件配置信息的一種手段,這些數據被存放在CMOS(一小塊特殊的RAM,由主板上的電池來供電)之中。通常ESCD數據隻在係統硬件配置發生改變後才會更新,所以不是每次啟動機器時我們都能夠看到“Update ESCD… Success”這樣的信息,不過,某些主板的係統BIOS在保存ESCD數據時使用了與Windows 9x不相同的數據格式,於是Windows 9x在它自己的啟動過程中會把ESCD數據修改成自己的格式,但在下一次啟動機器時,即使硬件配置沒有發生改變,係統BIOS也會把ESCD的數據格式改回來,如此循環,將會導致在每次啟動機器時,係統BIOS都要更新一遍ESCD,這就是為什麽有些機器在每次啟動時都會顯示出相關信息的原因。

  第十步: ESCD更新完畢後,係統BIOS的啟動代碼將進行它的最後一項工作,即根據用戶指定的啟動順序從軟盤、硬盤或光驅啟動。以從C盤啟動為例,係統BIOS將讀取並執行硬盤上的主引導記錄,主引導記錄接著從分區表中找到第一個活動分區,然後讀取並執行這個活動分區的分區引導記錄,而分區引導記錄將負責讀取並執行IO.SYS,這是DOS和Windows 9x最基本的係統文件。Windows 9x的IO.SYS首先要初始化一些重要的係統數據,然後就顯示出我們熟悉的藍天白雲,在這幅畫麵之下,Windows將繼續進行DOS部分和GUI(圖形用戶界麵)部分的引導和初始化工作。

  如果係統之中安裝有引導多種操作係統的工具軟件,通常主引導記錄將被替換成該軟件的引導代碼,這些代碼將允許用戶選擇一種操作係統,然後讀取並執行該操作係統的基本引導代碼(DOS和Windows的基本引導代碼就是分區引導記錄)。

  上麵介紹的便是計算機在打開電源開關(或按Reset鍵)進行冷啟動時所要完成的各種初始化工作,如果我們在DOS下按Ctrl+Alt+Del組合鍵(或從Windows中選擇重新啟動計算機)來進行熱啟動,那麽POST過程將被跳過去,直接從第三步開始,另外第五步的檢測CPU和內存測試也不會再進行。我們可以看到,無論是冷啟動還是熱啟動,係統BIOS都一次又一次地重複進行著這些我們平時並不太注意的事情,然而正是這些單調的硬件檢測步驟為我們能夠正常使用電腦提供了基礎

所有跟帖: 

原來如彼!謝謝掃盲:) -菜鳥一個- 給 菜鳥一個 發送悄悄話 (0 bytes) () 02/09/2005 postreply 08:32:13

謝謝! 但我不知道依然感到很幸福. -悟空2- 給 悟空2 發送悄悄話 (327 bytes) () 02/10/2005 postreply 18:55:38

謝謝! 我不懂這些但依然感到很幸福. -悟空2- 給 悟空2 發送悄悄話 (327 bytes) () 02/10/2005 postreply 19:00:57

回複:計算機啟動過程內幕大揭密 -billy21cn- 給 billy21cn 發送悄悄話 (18 bytes) () 02/13/2005 postreply 21:45:25

請您先登陸,再發跟帖!