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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

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

打開A20地址線

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

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

對(duì)于只有20位地址線的cpu,不需要任何額外操作便能自動(dòng)實(shí)現(xiàn)地址回繞。

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

?

對(duì)于80286后續(xù)的CPU,通過A20GATE來控制A20地址線

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

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

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

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

說了半天,其實(shí)打開A20Gate的方式是極其簡(jiǎn)單的,將端口0x92的第1位置1就可以了,以下三個(gè)步驟就可以實(shí)現(xiàn)啦。

  • in al,0x92
  • or al,0000_0010B
  • out 0x92,al
  • 我們離保護(hù)模式越來越近了,為了給大家一個(gè)盼頭,劇透一下,其實(shí)我們距32位地址空間只差一步,下一節(jié)中我們將播出有關(guān)內(nèi)容,歡迎大家準(zhǔn)時(shí)收看^_^

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。