日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

一步步编写操作系统 26 打开A20地址线

發布時間:2023/12/10 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步步编写操作系统 26 打开A20地址线 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

打開A20地址線

還記得實模式下的wrap-around嗎?也就是地址回繞。咱們一起來復習一下。實模式下內存訪問是采取“段基址:段內偏移地址”的形式,段基址要乘以16后再加上段內偏移地址。實模式下寄存器都是16位的,如果段基址和段內偏移地址都為16位的最大值,即0xFFFF:0xFFFF,最大地址是0xFFFF0+0xFFFF,即0x10FFEF。由于實模式下的地址線是20位,最大尋址空間是1MB,即0x00000~0xFFFFF。超出1MB內存的部分在邏輯上也是正常的,但物理內存中卻沒有與之對應的部分。為了讓“段基址:段內偏移地址”策略繼續可用,cpu采取的做法是,將超過1MB的部分自動回繞到0地址,繼續從0地址開始映射。相當于把地址對1MB求模。超過1MB多余出來的內存被稱為高端內存區HMA。

這種地址回繞是如何做到的呢?要分兩種情況分別討論啦。

對于只有20位地址線的cpu,不需要任何額外操作便能自動實現地址回繞。

地址(Address)地址線是從0開始編號,在8086/8088中,只有20位地址線,即A0~A19。20位地址線表示的內存是2的20次方,即最大是1MB,即0x0~0xFFFFF。內存若超過1MB,是需要第21條地址線支持的。所以說,若地址進位到1MB以上,如0x100000,由于沒有第21位地址線,相當于丟掉了進位1,變成了0x00000。這一“缺陷”甚至成了當時很多程序員利用的技巧。如圖

?

對于80286后續的CPU,通過A20GATE來控制A20地址線

cpu發展到了 80286后,雖然地址總線從原來的20位發展到了24位,從而能夠訪問的內存范圍可達到2的24次方等于16MB。但任何時候,Intel都會把兼容放在第一位。80286是第一款具有保護模式的cpu,它在實模式下時,其表現也應該和8086/8088一模一樣。按照兼容的要求,這意味著80286以及后續cpu的實模式都應該與8086/8088完全一樣,即:仍然只使用20條地址線。但80286有24條地址線,即A0~A23,也就是說A20地址線是開啟的。如果訪問0x100000~0x10FFEF之間的內存,系統將直接訪問這塊物理內存,并不會象8086/8088那樣回繞到0。

為了解決此問題,IBM在鍵盤控制器上的一些輸出線來控制第21根地址線(A20)的有效性,故被稱為A20Gate:

  • λ如果A20Gate被打開,當訪問到0x100000~0x10FFEF之間的地址時,cpu將真正訪問這塊物理內存。
  • λ如果A20Gate被禁止,當訪問0x100000~0x10FFEF之間的地址時,cpu將采用8086/8088的地址回繞。

上面描述了地址回繞的原理,但地址回繞是為了兼容8086/8088的實模式。如今我們是在保護模式下,我們需要突破第20條地址線(A20)去訪問更大的內存空間。而這一切,只有關閉了地址回繞才能實現。而關閉地址回繞,就是上面所說的打開A20Gate。

說了半天,其實打開A20Gate的方式是極其簡單的,將端口0x92的第1位置1就可以了,以下三個步驟就可以實現啦。

  • in al,0x92
  • or al,0000_0010B
  • out 0x92,al
  • 我們離保護模式越來越近了,為了給大家一個盼頭,劇透一下,其實我們距32位地址空間只差一步,下一節中我們將播出有關內容,歡迎大家準時收看^_^

    總結

    以上是生活随笔為你收集整理的一步步编写操作系统 26 打开A20地址线的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。