http://blog.csdn.net/dog250/article/details/6246594
主板上電後整個主板和其上的晶片/匯流排控制器就構成了一幅地圖,該地圖表示某某裝置在哪個地方放著,然後BIOS自檢就開始了。需要注意的是,萬事開頭難,bios是怎麼開始啟動並執行呢?它的指令代碼如何開始執行的呢?這無須我們關心,是標準強制的,比如bios佔據地址匯流排上發出地址a到b這個區間,然後主板地圖建立好(電壓穩定)之後,cpu從地址a到b之中的某個特定的位置c開始執行,這個過程十分簡單,cpu將從c取指令,將地址c發到地址匯流排,北橋根據標準將之路由到bios晶片,然後bios晶片將指令通過資料匯流排發回cpu,cpu執行,這樣就開始了執行bios指令,bios基本就是自檢,然後跳轉到別的地方,至於跳到什麼地方,cpu和主板的設計者就不管了,全由bios決定,反正這時候整個板子已經開始工作了,你想跳轉到磁碟分割中的代碼,你就要先將磁碟中的代碼載入記憶體,這又是一個發送地址到地址匯流排,取指令執行的過程。
那麼bios自檢的原理是什麼呢?在主板上電且電壓穩定之後,其上所有的裝置晶片電壓都會穩定,並且每一種晶片都會處在reset狀態,也就是說這些晶片都遵循各自標準,電路處在一種穩定點,各個晶片的穩定電路都有自己的標準,比如晶片X的穩定標準為,給它的第1個和第3個引腳發射一個高電平,那麼如果從其第5個引腳能得到一個高電平,就說明該晶片正常,然後從其第10到20個引腳會得到一個10位的電平序列,比如是:高-高-低-高-低-高-低-低-高-低,二進位就是1101010010,該位元字就是此晶片X的相關資訊,再比如檢測ram容量,可能就是依次往ram的每一個儲存晶片某些引腳發送電平訊號序列,然後從其另一些引腳讀取該晶片的容量,這樣就會在螢幕上最終顯示出ram的總大小,正如我們看到的電腦開機時ram容量從0跳變到最大值一樣的效果。bios通過類似的方式探測到所有裝置的特性。那麼bios是如何找到特定裝置的呢?前面的文章說過,bios內部要麼儲存著一張拓撲圖要麼在開始運行時第一步先初始化一張該拓撲圖(具體如何進行初始化,不外乎根據標準針對特定的晶片引腳發送電平序列訊號,注意,還是根據標準),該拓撲圖記載了主板上各個晶片或者裝置匯流排的地址資訊和其它的元資訊,有了這個拓撲圖,主板地圖上的晶片/裝置/匯流排就有了各自的地址了,bios此時是總管,如果把主板當成一座城市的話,bios此時就是城市主管,記錄著每家每戶的地址資訊,然後挨家挨戶慰問現在一切安好!這就是自檢的過程。
注意,一般而言,主板晶片或者裝置匯流排的地址資訊是硬儲存在bios晶片內部的,然而大多數的晶片特性卻不儲存在bios晶片內部,而是在自檢的時候從對應地址動態讀取到的,讀取的方式無非就是根據地址資訊得到裝置標準,然後根據標準往裝置的某些引腳發送一些電平序列,然後得到裝置特性資訊,這些特性資訊被儲存在晶片或者裝置記憶體的小晶片中,或者叫裝置控制器或者叫裝置bios。
LinuxBIOS,現在的Coreboot,它實現了一個開源的bios,並且使用了大量的linux核心源碼,它相當於一個高度精簡的linux作業系統,除了自檢之外,它還能做很多事情,因為控制權在交給其它代碼之前一直在linuxbios手中,且它又是基於linux的,因此它完成的功能更多。bios我們平時接觸不多,然而卻能控制整個電腦,比如電腦有多少記憶體可用,作業系統是直接求於bios的,如果bios告訴作業系統只有30M的記憶體,那麼作業系統只能使用30M,如果bios告訴作業系統雖然有4G的ram,然後有2.7G都為裝置保留,那麼你除了抗議之外沒有任何辦法。如今所謂的IT從業者都關注於頂層的應用,而專註於底層機制的人都可以被視為機修工了,CIH那樣的病毒也越來越少了,然而一旦再次出現,我想很少有人能應付。
前面提到過BIOS裡面的地址拓撲圖,這幅圖可以儲存在cmos晶片裡面,也可以動態檢測,這也就構造了兩種bios自檢的辦法,第一種是cmos中已經儲存了地址拓撲圖,bios直接根據拓撲圖中的地址和屬性資訊來檢測裝置,比如cmos中有下面一個條目:位於地址A處的是PCI裝置,那麼bios就根據PCI裝置的標準像地址A處發送電平訊號,然後讀取回複;第二種方式就是探測法,bios從地址0開始,一直探測到最大的地址處,在每一個地址處,雖然bios不知道是什麼裝置,但是需要每一個裝置都要提供一個探測介面,比如這個介面是寫入10110,那麼bios往每一個地址都寫入10110,然後得到的回複即是裝置的類型,然後再根據第一種方式進行自檢。熟悉LinuxBIOS的可能對此比較熟悉,bios自檢完全是基於主板設計的,因此bios的開發技術一直都被主板廠商把持著,一種板子對應一個bios,這就是道理!bios還是把持著一切,主板和應用軟體之間有一個介面,那就是bios。