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