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 訊號線。
關於A20位址線
作業系統又實模式進入保護模式之前要開啟 a20位址線。那麼什麼是 a20 在8086 8088 中,有20 跟位址線。所以定址範圍是 2 20 1m 但8086 8088是16 位的位址模式,即只能表示 ffffh 64k 的範圍。為了能訪問 1m的記憶體採取了分段的模式。16 位段基址 16位偏移...
Linux 0 11 核心筆記
1 任務0的堆疊問題 一直不明白schedule.c裡的task union的stack和user stack是什麼關係,head.s裡就設定了esp指向user stack,卻一直沒有用到task union,直到看到init task才明白,從進入保護模式到跳轉進使用者態都是用的user sta...
Linux0 11核心筆記( )
c語言 彙編知識 嵌入式彙編 x86處理器和程式設計的相關知識和 unix作業系統設計 linus在最初開發linux作業系統時參考了minix作業系統 作業系統 設計與實現 一種基於訊息傳遞在核心各模組之間進行通訊 資訊交換 重要的五個支柱 unix作業系統 分時作業系統 minix作業系統 gn...