第三節BIOS的定義與解釋(1)BIOSROM(2)BIOSCMOSMemory(3)BIOS程式(4)FirmwareHub訊號說明:FWH[3:0]FWH[4]第三節BIOS的定義與解釋大約二十年前(1981),當時在資訊界被稱為藍色巨人的IBM,在規劃第一部個人電腦-IBMPC時,他們的工程師把將一些開機時的硬體啟始/檢測碼(InitialCode),從軟碟或硬碟載入作業系統、完成開機程序的前導程式碼,以及一些最基本的周邊I/O處理的副程式碼(如螢幕顯示、磁碟機驅動、搖桿控制等等),通通擠入在一顆大約32KB大小的PROM(ProgrammableROM),可程式化唯讀記憶體)。這個程式碼就叫做BIOS(BasicInput/OutputSystem)。BIOS內部的幾個元件包括了兩大部分,首先是BIOS程式的所在部分-BIOSROM,接著就是紀錄BIOS設定資料的BIOSCMOS部分,最後則是BIOS功能的核心軟體-紀錄在ROM中的BIOS程式。一、BIOSROM所謂的ROM,全名是ReadOnlyMemory,也就是唯讀記憶體,正如其名字一般,一般來說ROM這種IC晶片中所儲孝的資料,基本上是不能隨便更動的,與我們相當熟知的系統記憶體(RAM,RandomAccessMemory-隨機存取記憶體)正好相反。ROM這種IC結構的特點,除了資料的不易變動性外,此外就是存取速度較慢。這是由於ROM的成本較低,而且大部分用途定位在穩定的資料儲存單位,因此在速度上的需求就不如一般供系統運算運作所使用的RAM來的快。而由於BIOS內部程式講究穩定、不常變動、低負載量的特性,因此在個人電腦的設計中,採用ROM唯讀記憶體作為儲存BIOS程式的媒介。也正因為BIOS程式儲存在這樣不易變動的媒介中,因此並不能明顯地定義BIOS程式是否屬於設備方面的硬體(Hardware),還是屬於資料方面的軟體(Software),這也就是為甚麼我們稱BIOS程式為韌體(Firmware)的原因。傳統的個人電腦中,由於大部分的設計都是由廠商將整套電腦系統組裝完畢,也因此系統的升級或更新不像目前模組化設計一般的方便,這同時也表示,傳統個人電腦BIOS程式的內容,基本上也不太可能由於升級等等原因而有所變動,也因此BIOS程式的內容可以儲存在最傳統的ROM晶片中,而永遠不需要更動。如果因為升級的需要等等因素,可再更換另一顆ROM晶片即可,這樣的設計在變動性不大的舊時就已經相當的足夠。但是隨著個人電腦系統的演進,系統所提供的功能也越來越為繁複,這同時也表示說,使用者對於許多的功能,必須要具備有讓使用者自行更動設定的機制,才能夠滿足現階段的需要。同時,由於BIOS程式必須負責的作業越來多、與模組化的電腦系統元件設計也使得BIOS程式必須面臨更多的挑戰,BIOS程式內容由於新功能或是舊的問題而產生了必須更新、更動的狀況。如果每次更新、更動BIOS程式的內容時,就必須更換新的BIOS晶片,勢必會造成很大的額外負擔。這也就表示說,我們需要更有彈性的BIOS程式儲存媒介,因應這樣的需求,BIOSROM的儲存媒介,開始採用PROM(可程式唯讀記憶體)以及其他延伸的ROM設備。1.PROM:PROM的全名是ProgrammableReadOnlyMemory,中文名稱為可程式唯讀記憶體,這是一種可以更改其內容的ROM設備。這類ROM在由工廠製作完畢時,其中還沒有任何的資料,一但我們決定了所要儲存的內容後,更可以利用特殊的儀器將所需要的內容寫入PROM之中。寫入資料後,由於其中的內容無法消去,這也就表示並無法更改其內容。使用這類產品作為BIOS程式的儲存媒介時,主要的優點在於可以很快的由店家燒錄一個新的BIOSROM以便安裝在系統中,而不需要送回工廠來處理。2.EPROM:比PROM稍微再有彈性一點的產品,也就是接下來介紹的EPROM。EPROM的全名是ErasableProgrammableReadOnlyMemory,中文名稱為可消去唯讀記憶體。這類記憶體可以將其中的資料利用儀器加以消除,再將新的資料寫入其中。使用這類產品的優點是,當使用者必須更新BIOS程式的內容時,只消將帶往店家利用儀器消除內容再重新寫入,而要額外再花費一個BIOS的成本。不過當然對地這類產品的成本稍微較PROM來的高。3.EEPROM:這是目前BIOS最常用的儲存媒介,而使用上的彈性也是這幾大類ROM設備中最為方便的。EEPROM的全名是ElectricallyErasableProgrammableReadOnlyMemory,這是一種可直接用電力消去內容資料的唯讀記憶體。當使用者必須更新其中的內容時,只需在電腦系統中執行某個更新程式,這時主機板便可以利用簡單的裝置將其中的內容消去,而再寫入新的程式內容。使用者甚至不需要到店家修理或進行此類動作,而要在網路上取得BIOS程式的新內容就可以自行更新。目前大部分的系統所用的BIOSROM,大多採用最後的EEPROM,雖然成本稍微昂貴,但由於提供了良好的彈性與升級性,對於主機板廠商而言確實也是提高服務品質、產品效能等等的優良設計。而BIOS程式儲存在這些ROM之中,所扮演的角色在於系統開機初期,維持整個電腦系統的基本運作,以便由作業系統接手進行更精密的工作。二、BIOSCMOSMemoryBIOS既然處理整個電腦系統在一開機時的初始狀態設定等等,那麼對於系統的一些基本組態,像是硬碟機種類,系統時間等等,都必須要能夠有所了解。但是不同的電腦系統在這些方面的設定可能有所不同,而BIOS卻又不可能針對不同的電腦系統就設計一套不同的晶片,否則本身的成因此過分提高。這也就是說,BIOS的內部設計必須預留一部份可供使用者調整的設定,這樣才能讓BIOS針對不同系統進行不同的開機初始化設定等等。如果每次開機時,都必須要求使用者先進行電腦狀態的設定,使用電腦將成為繁複且令人生厭的不快經驗。這表示我們要想辦法將設定的狀態儲存起來,使用者只在須要更改的狀況時,才重新輸入或更動設定的內容。可是我們先前曾經提過,BIOS程式本身儲存在不能任意更動的ROM之中,即使是目前最常用的EEPROM,也只能利用特定程式來將其中的內容覆寫成新版BIOS,而無法任意更改。那麼這些可隨時更改的BIOS設定內容,勢必無法儲存在BIOSROM資料區中。也就是說,BIOS必須設計另一個儲存區域,方能將這些設定資料放入並隨時更改。這也就是我們接下來要介紹的,BIOSCMOS區域。CMOS也就是ComplementaryMetalOxideSemiconductor,這種技術廣泛的使用在微處理器、晶片組、DRAM記憶體等等。這類線路的設計所消耗的電力相當小,而這裡所用的CMOSMemory就是利用此種技術完成。這樣一來我們只需要主機板上放置簡單的小型鋰電池,就可以將BIOS的設定資料儲存起來。在BIOS中的CMOS資料區域通常不大,這樣子主機板電池可以延續幾乎數年的時間。由於一般的印象中CMOS技術常用在BIOS設定資料的儲存,因此一般提到CMOS時大多表示BIOS中的CMOSMemory。一般CMOS的設計中,都會加入偵測錯誤用的error-detect-ing碼。每次更改設定時,就會重新計算checksum值,也就是將整個CMOS中其他Byte的值累加起來,並將checksum值寫入CMOS中。每次系統開機時,便會檢查目前CMOS中儲存的資料之checksum值是否與先前紀錄的相符。這樣一來便可確認系統的完整性,避免設定資料被不當的更動而造成系統的錯誤。一現不相符時,系統便發出CMOSChecksumError的錯誤訊息。除了我們這裡提到的CMOS記憶區域之外,目前較新的BIOS,皆支援新型的隨插即用PlugandPlay硬體,而這類的BIOS必須紀錄目前系統中的硬體組態,也就是ExtendSystemConfigurationDataESCD資料區。這是除了標準CMOS記憶區外的另一個重要紀錄區。IBM在主機板上使用一顆編號MC146818的CMOS參數記錄/計時晶片,能儲存的資料大小才64bytes,而且要扣掉一些固定來記錄系統日期/時間的欄位。當電腦電源關閉時,這顆IC會改由電池供電以維持電腦的設定記錄值。由於CMOS製作的記憶體耗電量很低,就算電腦一、兩年都不開電源,CMOS記憶體內的記錄值也一樣完整的保存。這種晶片起初被稱為RTC/CMOSRAM,後來被簡稱為CMOS晶片。隨著PC工業蓬勃發展,也有廠商規劃出不同類型的CMOS晶片。筆者記得早期主機板,CMOS晶片旁有像啤酒桶般的電池,而設計往往隨著時間一久,電池內部的電解質液體流出,造成主機板電路被腐蝕。隨也有廠商使用一種整合電池與CMOSRAM於一體的晶片,它被設計成IC插座的類型,而且體積(或者說厚度)比較大,這類整合電池的CMOS晶片也曾流行一時。隨後主機板的線路逐漸整合、簡化,這種RTC/CMOSRAM硬體架構被保留並整合到像是SuperI/O晶片甚至南橋晶片(SouthBridge)等,內容也不再只有64bytes(可能到128bytes,甚至更多),而供應電力的電路則拉到晶片外頭,另外搭配鋰電池來供電,旁邊僅保留CMOS放電的Jumper,供廠商或客戶可以清除CMOS記錄值。所以今日的主機板,除了電池與CMOS放電的Jumper以外,已經看不到所謂的CMOS晶片。對於BIOS而言,它依舊存在,但對於主機板或客戶而言,它已經成為南橋晶片的一部份。三、BIOS程式程式就是設備中負責讓系統執行各項基本作業的最重要軟體單位。要讓電腦系統發揮功用,就必須有些程式碼讓中央處理器執行,並藉此協調各項配備進行特定的工作。而在開機之時,由於各項硬體,例如硬碟等等,還沒有適當的啟動與初始化,這時還不可能由這些磁碟讀入任何的程式以供執行,而必須有另外的設備來幫助系統對這些硬體進行初始化動作,才能夠進行接下來的動作。而BIOS程式也就是負責提供這些初始化程式的單位。在程式被中央處理器執行之前,這些程式碼的內容必須被載入到記憶體之中一般為隨機存取記憶體,但是在隨機存取記憶體中的資料,一但關機就會消失,因此我們必須把這些程料寫入某個固定的硬體裝置中,而且每次關機也不會消失,這也就是BIOS程式被紀錄在ROM唯讀記憶體中的原因,除此之外,開機程式通常也不會輕易變動,這樣我們更可以明白BIOS程式紀錄在ROM之中的原因。而在設計中央處理器與BIOS的廠商之間則遵循相同的協定,這個協定的內容是,當開機程序進行時,中央處理器會到記憶體中的特定位置尋找開機初始化所需的程式,也就是BIOS程式。在個人電腦系統中,BIOS程式在記憶體中的位置是固定的,通常系統中最基本的1MegaBytes的最後64KB的區域由F000h到FFFFh便用來放置BIOS程式。某些BIOS程式大於64KB,大部分不是我們這裡主要討論的系統BIOS,而是例如顯示卡,SCSI卡上的BIOS,這類程式則有其他的方法來載入記憶體。當電腦從開機的一瞬間,硬體特性就是設計成CPU從主機板的BIOS晶片內取得程式碼,BIOS由內部的程式碼獲得控制權並且發揮作用,從CPU內外部的檢測設定、啟動DRAM、針對晶片組與周邊做初值化設定之後,最後驅動軟碟或硬碟機,把作業系統(如DOS、Win98/NT、Linux)載入之後,BIOS的開機引導工作就此告一段落,改為從事幕後的支援、協調工作,並幫助作業系統或應用程式,來處理周邊裝置溝通的細部執行動作。事實上除了主機板上有BIOS之外,另外像是顯示卡、SCSI控制卡、磁碟附加卡或高階網路卡也都有自己的BIOS晶片。設計在主機板上、負責整個主機板運作的BIOS,一般我們以SystemBIOS或MainboardBIOS稱呼之。如果要更清晰的定義何謂BIOS,我們可以從某家BIOS研發廠商的技術訓練文件中,對於BIOS的敘述,他們是這麼說明的:AFirmwareprogram(一種屬於韌體的程式碼),儲存在ROM、EPROM或Flas