保護模式的 A20位址線問題

2021-05-21 19:42:04 字數 919 閱讀 4506

a20位址線問題

2023年8月,ibm公司最初推出的個人計算機ibm pc使用的cpu是intel 8088。在該微機中位址線只有20根(a0 – a19)。在當時記憶體ram只有幾百kb或不到1mb時,20根位址線已足夠用來定址這些記憶體。其所能定址的最高位址是0xffff:0xffff,也即0x10ffef。對於超出0x100000(1mb)的定址位址將預設地環繞到0x0ffef。當ibm公司於2023年引入at機時,使用的是intel 80286 cpu,具有24根位址線,最高可定址16mb,並且有乙個與8088完全相容的實模式執行方式。然而,在定址值超過1mb時它卻不能象8088那樣實現位址定址的環繞。但是當時已經有一些程式是利用這種位址環繞機制進行工作的。為了實現完全的相容性,ibm公司發明了使用乙個開關來開啟或禁止0x100000位址位元位。由於在當時的8042鍵盤控制器上恰好有空閒的埠引腳(輸出埠p2,引腳p21),於是便使用了該引腳來作為與門控制這個位址位元位。該訊號即被稱為a20。如果它為零,則位元20及以上位址都被清除。從而實現了相容性。 由於在機器啟動時,預設條件下,a20位址線是禁止的,所以作業系統必須使用適當的方法來開啟它。但是由於各種相容機所使用的晶元集不同,要做到這一點卻是非常的麻煩。因此通常要在幾種控制方法中選擇。

對a20訊號線進行控制的常用方法是通過設定鍵盤控制器的埠值。 有些作業系統將a20的開啟和禁止作為實模式與保護執行模式之間進行轉換的標準過程中的一部分。由於鍵盤的控制器速度很慢,因此就不能使用鍵盤控制器對a20線來進行操作。為此引進了乙個a20快速門選項(fast gate a20),它使用i/o埠0x92來處理a20訊號線,避免了使用慢速的鍵盤控制器操作方式。對於不含鍵盤控制器的系統就只能使用0x92埠來控制,但是該埠也有可能被其它相容微機上的裝置(如顯示晶元)所使用,從而造成系統錯誤的操作。 還有一種方式是通過讀0xee埠來開啟a20訊號線,寫該埠則會禁止a20訊號線。

關於A20位址線

作業系統又實模式進入保護模式之前要開啟 a20位址線。那麼什麼是 a20 在8086 8088 中,有20 跟位址線。所以定址範圍是 2 20 1m 但8086 8088是16 位的位址模式,即只能表示 ffffh 64k 的範圍。為了能訪問 1m的記憶體採取了分段的模式。16 位段基址 16位偏移...

Linux0 11核心 A20位址線

1981 年 8 月,ibm 公司最初推出的個人計算機 ibm pc 使用的 cpu 是 intel 8088。在該微機中位址 線只有 20 根 a0 a19 在當時記憶體 ram 只有幾百 kb 或不到 1mb 時,20 根位址線已足夠用來定址 這些記憶體。其所能定址的最高位址是 0xffff 0...

PC定址方式遺留問題 A20位址線

在8086 8088cpu上,總共有20根位址線,可以定址1m記憶體空間。但是8086的定址方式卻事實上可以訪問到1m 64k的位址空間。想象一下,當段暫存器的值為fff0h,而斷內偏移為1000h的時候,通過段位址 16 偏移位址計算出來的實體地址是100f00h,而這已經超過了1m的位址範圍!但...