实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)
生活随笔
收集整理的這篇文章主要介紹了
实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【-1】寫在前面:
以下部分內容總結于 http://blog.csdn.net/ruyanhai/article/details/7181842
complementary: 兼容性是指運行在前期CPU,如8086/8088上的的程序,也可以運行在其以后的處理器,如80286上;
【0】看看intel處理器的發展歷程
【1】8086/8088的尋址和問題
1.1)尋址:在8086/8088中,只有20根地址總線,所以可以訪問的地址是2^20=1M,但由于8086/8088是16位地址模式,能夠表示的地址范圍是0-64K,所以為了在8086/8088下能夠訪問1M內存,Intel采取了分段的模式:16位段基地址:16位偏移。其絕對地址計算方法為:16位基地址左移4位+16位偏移=20位地址;(這個比較簡單)
1.2)問題: 但這種方式引起了新的問題,通過上述分段模式,能夠表示的最大內存為:FFFFh:FFFFh=FFFF0h+FFFFh=10FFEFh=1M+64K-16Bytes(1M多余出來的部分被稱做高端內存區HMA)。但8086/8088只有20位地址線,如果訪問100000h~10FFEFh之間的內存,則必須有第21根地址線。所以當程序員給出超過1M(100000H-10FFEFH)的地址時,系統并不認為其訪問越界而產生異常,而是自動從重新0開始計算,也就是說系統計算實際地址的時候是按照對1M求模的方式進行的,這種技術被稱為wrap-around。
【2】80286的尋址和問題
2.0)尋址: 到了80286,系統的地址總線發展為24根,這樣能夠訪問的內存可以達到2^24=16M。Intel在設計80286時提出的目標是,在實模式下,系統所表現的行為應該和8086/8088所表現的完全一樣,也就是說,在實模式下,80286以及后續系列,應該和8086/8088完全兼容;
2.1)問題:如果程序員訪問100000H-10FFEFH之間的內存,80286將實際訪問這塊內存,而不是像過去一樣重新從0開始,因為80286有這個尋址能力,但是這就不能滿足和8086/8088的系統兼容性,因為8086/8088不能訪問到100000H-10FFEFH之間的內存的真實地址而是按照對1M求模的內存尋址方式;
【3】再淺談80286 和 8086/8088 間的兼容性問題:(實模式下,80286的系統表現要同8086/8088的一致)
3.1)當A20被禁止時:程序員給出100000H~10FFEFH間的地址,80286和8086/8088 的系統表現是一致的,即按照對1M求模的方式進行尋址,滿足系統升級的兼容性問題;
3.2)當A20被開啟時:程序員給出的100000H~10FFEFH間的地址,80286是訪問的真實地址,而8086/8088是始終是按照對1M求模的方式進行的(這里注意,是始終);
【4】解決方法:
為了解決上述問題,IBM使用鍵盤控制器上剩余的一些輸出線來管理第21根地址線(從0開始數是第20根),被稱為A20Gate:如果A20 Gate被打開,則當程序員給出100000H-10FFEFH之間的地址的時候,系統將真正訪問這塊內存區域;如果A20Gate被禁止,則當程序員給出100000H-10FFEFH之間的地址的時候,系統仍然使用8086/8088的方式。
【5】有請實模式+保護模式閃亮登場(干貨)
5.1)實模式:實模式就是, 為了實現系統升級的兼容性,如80286的系統表現(包括80286以后的CPU)要與8086/8088 的系統表現一致,就需要80286 CPU訪問100000H-10FFEFH之間的地址的時候, 按照對1M求模的方式進行, 無論A20地址線開啟關閉與否, 這種內存訪問情況 稱為實模式;
5.2)保護模式:保護模式就是, 以A20地址線開啟為前提,80286 CPU訪問100000H-10FFEFH之間的地址的時候, 是訪問真實的內存地址,不是求模訪問,如訪問100001H,就是真真切切地 訪問 0x 100001H,而不是求模的 0x000001H 地址, 這種內存訪問情況稱為保護模式;
5.3)誕生日: 實模式是從8088/8086 就開始存在了, 而保護模式從 80286 才開始存在;
【6】為什么需要保護模式?(因為實模式與生俱來,是伴隨著8088/8086 從天而降的,它僅僅是訪問內存的一種方式而已; 還有對于8086/8088而言,它只有實模式這一種內存尋址方式,而對于80286包括其以后的CPU,有實模式和保護模式兩種尋址方式,因為要兼顧系統兼容性)
顯然隨著CPU的升級,8088/8086的內存尋址方式已經無法滿足需要,也可以說,為了能夠訪問10FFEFH以上的內存,則必須進入保護模式;
【7】A20被禁止+被開啟的不同結果
7.1)如果A20Gate被禁止:對于80286來說,其地址為24bit,其地址表示為EFFFFF;對于80386極其隨后的32-bit芯片來說,其地址表示為FFEFFFFF。這種表示的意思是如果A20Gate被禁止,則其第20-bit在CPU做地址訪問的時候是無效的,永遠只能被作為0;
7.2)如果A20 Gate被打開:則其第20-bit是有效的,其值既可以是0,又可以是1;
7.3)所以:在保護模式下,如果A20 Gate被打開,則可以訪問的內存則是連續的;如果A20Gate被禁止,則可以訪問的內存只能是偶數段,
因為是20位(從0始)總為零,所23~20位只能是0000、0010、0100、0110、1000、1010、1100、1110對應十六進制為0、2、4、6、8、A、C、E。對應的十六進制地址段是000000-0FFFFF,200000-2FFFFF,400000-4FFFFF…
總結
以上是生活随笔為你收集整理的实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是上市辅导备案登记(辅导备案登记受理
- 下一篇: java信息管理系统总结_java实现科