- 积分
- 60
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2007-7-5
- 精华
|
2#
发表于 2007-7-16 23:47:27
|
只看该作者
来自: 江苏苏州 来自 江苏苏州
由于太多,再接一楼!!!
三、BIOS程式
程式就是設備中負責讓系統執行各項基本作業的最重要軟體單位。要讓電腦系統發揮功用,就必須有些程式碼讓中央處理器執行,並藉此協調各項配備進行特定的工作。而在開機之時,由於各項硬體,例如硬碟等等,還沒有適當的啟動與初始化,這時還不可能由這些磁碟讀入任何的程式以供執行,而必須有另外的設備來幫助系統對這些硬體進行初始化動作,才能夠進行接下來的動作。而BIOS程式也就是負責提供這些初始化程式的單位。
在程式被中央處理器執行之前,這些程式碼的內容必須被載入到記憶體之中<一般為隨機存取記憶體>,但是在隨機存取記憶體中的資料,一但關機就會消失,因此我們必須把這些程料寫入某個固定的硬體裝置中,而且每次關機也不會消失,這也就是BIOS程式被紀錄在ROM<唯讀記憶體>中的原因,除此之外,開機程式通常也不會輕易變動,這樣我們更可以明白BIOS程式紀錄在ROM之中的原因。
而在設計中央處理器與BIOS的廠商之間則遵循相同的協定,這個協定的內容是,當開機程序進行時,中央處理器會到記憶體中的特定位置尋找開機初始化所需的程式,也就是BIOS程式。
在個人電腦系統中,BIOS程式在記憶體中的位置是固定的,通常系統中最基本的1 Mega Bytes的最後64KB的區域<由F000h到FFFFh>便用來放置BIOS程式。某些BIOS程式大於64KB,大部分不是我們這裡主要討論的系統BIOS,而是例如顯示卡,SCSI卡上的BIOS,這類程式則有其他的方法來載入記憶體。
當電腦從開機的一瞬間,硬體特性就是設計成CPU從主機板的BIOS晶片內取得程式碼,BIOS由內部的程式碼獲得控制權並且發揮作用,從CPU內外部的檢測設定、啟動DRAM、針對晶片組與周邊做初值化設定之後,最後驅動軟碟或硬碟機,把作業系統(如DOS、Win98/NT、Linux)載入之後,BIOS的開機引導工作就此告一段落,改為從事幕後的支援、協調工作,並幫助作業系統或應用程式,來處理周邊裝置溝通的細部執行動作。
事實上除了主機板上有BIOS之外,另外像是顯示卡、SCSI控制卡、磁碟附加卡或高階網路卡也都有自己的BIOS晶片。設計在主機板上、負責整個主機板運作的BIOS,一般我們以System BIOS或Mainboard BIOS稱呼之。
如果要更清晰的定義何謂BIOS,我們可以從某家BIOS研發廠商的技術訓練文件中,對於BIOS的敘述,他們是這麼說明的:
A Firmware program(一種屬於韌體的程式碼),儲存在ROM、EPROM或FlashROM記憶體內,提供最基本的硬體初始化(initialize)、周邊控制的必要程式碼。通常由組合語言(Assembly Language)所寫成。
BIOS平時是設定成唯讀的狀態,除了特殊工式或特殊方式之外,任何應用程式都沒辦法加以修改或抹除。以前的修改方式比較複雜,如果是Mask-ROM或PROM,幾乎得重新換一顆空白ROM的晶片,然後燒錄進去,到了EPROM時代,可以用紫外線照射其窗口一段時間,重新抹除其內部的所有資料之後,再以EPROM燒錄器將BIOS資料燒錄進去。
當Windows 95流行之後,由於Plug and Play(PnP)與ACPI、DMI協定的需要,主機板需要有一個可以記錄周邊裝置資源的異動情形,卻又不會被其他程式破壞的記憶體區域,FlashROM對於韌體程式碼的更新也比EPROM還要方便,所以到後來,主機板BIOS,以至於顯示卡、與各周邊界面卡儲存BIOS的記憶體晶片,幾乎都是Flash ROM的天下。
對主機板BIOS而言,它最重要的工作有下列幾點:
1. POST(Power On Self Test,開機自我測試)一開機時系統將控制權交給BIOS時,它會針對CPU各項暫存器、旗號等先檢查是否運作正常,接下來會檢查像是8254 timer(可程式化周邊計時晶片)、8259A(可程式化中斷器)、8237DMA controller(DMA控制器)的狀態。
2. Initial–針對動態記憶體(DRAM)、主機板晶片組、顯示卡以及相關周邊的暫存器(register)做初始化(Initialize)的動作,並檢測是否能夠正常工作。
所謂初始化的動作就是依照該晶片組的技術文件規定,作一些暫存器填值、改位元或旗號的動作,使得主機板/晶片組的記憶體、I/O功能得以正常運作。
3. 記錄系統的設定值,並且儲存在非揮發性記憶體(Non-Volatile RAM,像是CMOS或Flash Memory(的ESCD區域)。
4. 將常駐程式庫常駐於某一段記憶體,提供作業系統或應用程式呼叫。像是Int 10h、Int 13h,Int 15h之類的函式。 |
|