A20 地址线问题
A20?地址線問題
1981 年8 月,IBM 公司最初推出的個人計算機IBM PC 使用的CPU 是Intel 8088。在該微機中地址線只有20 根(A0 – A19)。在當(dāng)時內(nèi)存RAM 只有幾百KB 或不到1MB 時,20 根地址線已足夠用來尋址這些內(nèi)存。其所能尋址的最高地址是0xffff:0xffff,也即0x10ffef。對于超出0x100000(1MB)的尋址地址將默認地環(huán)繞到0x0ffef。當(dāng)IBM 公司于1985 年引入AT 機時,使用的是Intel 80286 CPU,具有24 根地址線,最高可尋址16MB,并且有一個與8088 完全兼容的實模式運行方式。然而,在尋址值超過1MB 時它卻不能象8088 那樣實現(xiàn)地址尋址的環(huán)繞。但是當(dāng)時已經(jīng)有一些程序是利用這種地址環(huán)繞機制進行工作的。為了實現(xiàn)完全的兼容性,IBM 公司發(fā)明了使用一個開關(guān)來開啟或禁止0x100000 地址比特位。由于在當(dāng)時的8042鍵盤控制器上恰好有空閑的端口引腳(輸出端口P2,引腳P21),于是便使用了該引腳來作為與門控制這個地址比特位。該信號即被稱為A20。如果它為零,則比特20 及以上地址都被清除。從而實現(xiàn)了兼容性。
由于在機器啟動時,默認條件下,A20 地址線是禁止的,所以操作系統(tǒng)必須使用適當(dāng)?shù)姆椒▉黹_啟它。但是由于各種兼容機所使用的芯片集不同,要做到這一點卻是非常的麻煩。因此通常要在幾種控制方法中選擇。
對A20 信號線進行控制的常用方法是通過設(shè)置鍵盤控制器的端口值。這里的setup.s 程序(138-144行)即使用了這種典型的控制方式。對于其它一些兼容微機還可以使用其它方式來做到對A20 線的控制。有些操作系統(tǒng)將A20 的開啟和禁止作為實模式與保護運行模式之間進行轉(zhuǎn)換的標(biāo)準(zhǔn)過程中的一部分。由于鍵盤的控制器速度很慢,因此就不能使用鍵盤控制器對A20 線來進行操作。為此引進了一個A20 快速門選項(Fast Gate A20),它使用I/O 端口0x92 來處理A20 信號線,避免了使用慢速的鍵盤控制器操作方式。對于不含鍵盤控制器的系統(tǒng)就只能使用0x92 端口來控制,但是該端口也有可能被其它兼容微機上的設(shè)備(如顯示芯片)所使用,從而造成系統(tǒng)錯誤的操作。還有一種方式是通過讀0xee 端口來開啟A20 信號線,寫該端口則會禁止A20 信號線。
Intel CPU 32?位保護運行模式
Intel CPU 一般可以在兩種模式下運行,即實地址模式和保護模式。早期的Intel CPU(8088/8086)只能工作在實模式下,某一時刻只能運行單個任務(wù)。對于Intel 80386 以上的芯片則還可以運行在32 位保護模式下。在保護模式下運行可以支持多任務(wù);支持4G 的物理內(nèi)存;支持虛擬內(nèi)存;支持內(nèi)存的頁式管理和段式管理;支持特權(quán)級。雖然對保護模式下的運行機制是理解Linux 內(nèi)核的重要基礎(chǔ),但由于篇幅所限,對其的簡單介紹可以參考書后的附錄。但仍然建議初學(xué)者能夠使用書后列出相關(guān)書籍,首先作一番仔細研究。為真正理解setup.s 程序和下面head.s 程序的作用,起碼要先明白段選擇符、段描述符和80x86 的頁表尋址機制。段選擇符邏輯地址,線性地址,物理地址段選擇符的格式
總結(jié)
- 上一篇: 很好的linux启动说明( bootse
- 下一篇: GDT(全局描述符表)和LDT(局部描述