1. 程式人生 > >北航面試之計算機從按下電源鍵到出現桌面是怎樣的過程(windows)

北航面試之計算機從按下電源鍵到出現桌面是怎樣的過程(windows)

【1】計算機啟動過程詳解

對於使用電腦使用者來說,開啟電源啟動電腦幾乎是每天必做的事情,但計算機在顯示這些啟動畫面的時候都在做什麼呢?大多數使用者都未必清楚。

下面就向大家介紹一下從開啟電源到出現Windows桌面的藍天白雲,計算機到底都背後幹了哪些工作。 

電腦的啟動過程中有一個非常完善的硬體自檢機制。對於採用AWARD BIOS的電腦來說,它在上電自檢那短暫的幾秒鐘內,就可以完成100多個檢測步驟。

首先讓我們瞭解兩個基本概念:

第一個是BIOS (Basic Input Output System : 基本輸入輸出系統),BIOS實際上就是被"固化"在計算機硬體中、直接與硬體打交道的一組程式,它為計算機提供最低階、最直接的硬體控制。

計算機的很多硬體中都有BIOS,最常見的比如:主機板(也稱為系統BIOS)、顯示卡以及其它一些裝置(例如IDE控制器、SCSI卡或網絡卡等)中都存在BIOS,其中系統BIOS是我們要介紹的主角。

因為計算機的啟動過程是在它的控制下進行的。BIOS程式一般被存放在主機板ROM(只讀儲存晶片)之中,即使在關機或掉電以後,程式也不會丟失。

第二個基本概念是記憶體的地址,通常計算機中安裝有32MB、64MB或128MB的記憶體,為了便於CPU訪問,這些記憶體的每一個位元組都被賦予了一個地址。

32MB的地址範圍用十六進位制數表示就是0~1FFFFFFH,其中0~FFFFFH的低端1MB記憶體非常特殊,因為我們使用的32位處理器能夠直接訪問的記憶體最大隻有1MB,因此這1MB的低端640KB被稱為基本記憶體,

而A0000H~BFFFFH要保留給顯示卡的視訊記憶體使用的,C0000H~FFFFFH則被保留給BIOS使用,其中系統BIOS一般佔用最後的64KB或更多一點的空間,顯示卡BIOS一般在C0000H~C7FFFH處,

IDE控制器的BIOS在C8000H~CBFFFH處。   好了,瞭解了這些基本概念之後,下面我們就來仔細看看計算機的啟動過程。

第一步:當我們按下電源開關時,電源就開始向主機板和其它裝置供電,此時電壓還不穩定,主機板控制晶片組會向CPU發出並保持一個RESET(重置)訊號,讓CPU初始化。

當電源開始穩定供電後(當然從不穩定到穩定的過程也只是短暫的瞬間),晶片組便撤去RESET訊號(如果是手動按下計算機面板上的Reset按鈕來重啟機器,那麼鬆開該按鈕時晶片組就會撤去RESET訊號),

CPU馬上就從地址FFFF0H處開始執行指令,這個地址在系統BIOS的地址範圍內,無論是AWARD BIOS還是AMI BIOS,放在這裡的只是一條跳轉指令,跳到系統BIOS中真正的啟動程式碼處。

第二步:系統BIOS的啟動程式碼首先要做的事情就是進行POST(Power  On  Self  Test,加電自檢),POST的主要任務是檢測系統中的一些關鍵裝置是否存在和能否正常工作,如記憶體和顯示卡等。

由於POST的檢測過程在顯示卡初始化之前,因此如果在POST自檢的過程中發現了一些致命錯誤,如沒有找到記憶體或者記憶體有問題時(POST過程只檢查640K常規記憶體),是無法在螢幕上顯示出來的,

這時系統PIOS可通過喇叭發聲來報告錯誤情況,聲音的長短和次數代表了錯誤的型別。在正常情況下,POST過程進行得非常快,我們幾乎無法感覺到這個過程。

第三步:接下來系統BISO將查詢顯示卡的BIOS,存放顯示卡BIOS的ROM晶片的起始地址通常在C0000H處,系統BIOS找到顯示卡BIOS之後呼叫它的初始化程式碼,由顯示卡BIOS來完成顯示卡的初始化。

大多數顯示卡在這個過程通常會在螢幕上顯示出一些顯示卡的資訊,如生產廠商、圖形晶片型別、視訊記憶體容量等內容,這就是我們開機看到的第一個畫面,不過這個畫面幾乎是一閃而過的,

也有的顯示卡BIOS使用了延時功能,以便使用者可以看清顯示的資訊。接著系統BIOS會查詢其它裝置的BIOS程式,找到之後同樣要呼叫這些BIOS內部的初始化程式碼來初始化這些裝置。

第四步:查詢完所有其它裝置的BIOS之後,系統BIOS將顯示它自己的啟動畫面,其中包括有系統BIOS的型別、序列號和版本號等內容。

同時螢幕底端左下角會出現主機板資訊程式碼,包含BIOS的日期、主機板晶片組型號、主機板的識別編碼及廠商程式碼等。

第五步:接著系統BIOS將檢測CPU的型別和工作頻率,並將檢測結果顯示在螢幕上,這就是我們開機看到的CPU型別和主頻。

接下來系統BIOS開始測試主機所有的記憶體容量,並同時在螢幕上顯示記憶體測試的數值,就是大家所熟悉的螢幕上半部份那個飛速翻滾的記憶體計數器。

這個過程我們可以在BIOS設定中選擇耗時少的"快速檢測"或者耗時多的"全面檢測"方式。

第六步:記憶體測試通過之後,系統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不相同的資料格式,於是Windows在它自己的啟動過程中會把ESCD資料轉換成自己的格式,但在下一次啟動機器時,

即使硬體配置沒有發生改變,系統BIOS又會把ESCD的資料格式改回來,如此迴圈,將會導致在每次啟動機器時,系統BIOS都要更新一遍ESCD,

這就是為什麼有的計算機在每次啟動時都會顯示"Update  ESCD...  Success"資訊的原因。

第十步:ESCD資料更新完畢後,系統BIOS的啟動程式碼將進行它的最後一項工作,即根據使用者指定的啟動順序從軟盤、硬碟或光碟機啟動。

以從C盤啟動為例,系統BIOS將讀取並執行硬碟上的主引導記錄,主引導記錄接著從分割槽表中找到第一個活動分割槽,然後讀取並執行這個活動分割槽的分割槽引導記錄,而分割槽引導記錄將負責讀取並執行IO.SYS,

這是DOS和Windows最基本的系統檔案。

Windows的IO.SYS首先要初始化一些重要的系統資料,然後就顯示出我們熟悉的藍天白雲,在這幅畫面之下,Windows將繼續進行DOS部分和GUI(圖形使用者介面)部分的引導和初始化工作。

如果系統這中安裝有引導多種操件系統的工具軟體,通常主引導記錄將被替換成該軟體的引導程式碼,這些程式碼將允許使用者選擇一種作業系統,

然後讀取並執行該作業系統的基本引導程式碼(DOS和Windows的基本引導程式碼就是分割槽引導記錄)。

上面介紹的便是計算機在開啟電源開關(或按Reset鍵)進行冷啟動時所要完成的各種初始化工作,如果我們在DOS下按Ctrl+Alt+Del組合鍵(或從Windows中選擇重啟計算機)來進行熱啟動,

那麼POST過程將被跳過去,直接從第三步開始,另外第五步的檢測CPU和記憶體測試也不會再進行。無論是冷啟動還是熱啟動,系統BIOS都會重複上面的硬體檢測和引導過程,

正是這個不起眼的過程保證了我們可以正常的啟動和使用計算機。

【2】圖解流程

圖解流程如下: