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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(24)2-9-9-12分页(上)

發(fā)布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (24)2-9-9-12分页(上) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、10-10-12 分頁的尋址范圍

在之前的學習中,有一個課后思考題:10-10-12分頁模式物理內(nèi)存能夠識別的最多范圍是多少?
我們當時是怎么算的呢?很簡單嘛,有1024個頁表,每個頁表有1024個物理頁,每個物理頁有4KB,那不就是 1024 * 1024 * 4KB = 4GB 嗎?!
答案確實是4GB,但很遺憾,如果你是這樣算的,那你對 10-10-12 分頁就還沒有理解到位。
更有甚者可能會說,32位系統(tǒng),2^32=4GB,所以尋址范圍是4GB,這就更加錯的離譜。

實際上,決定物理內(nèi)存尋址范圍的是頁表項PTE。

PTE 的低12位是屬性;高20位是基址,低12位補零后構(gòu)成了物理頁基址。所以,物理地址的尋址范圍是由PTE構(gòu)成的這32位物理頁基址決定的,4GB是從這里來的。

注意,線程的4GB和物理地址尋址范圍的4GB不是一個東西。 物理地址尋址的4GB我們剛才已經(jīng)解釋過,是由PTE決定的。而線程的4GB其實指的是32位線性地址確定的,這個才是和32位系統(tǒng)相關(guān)的,和分頁模式無關(guān),32位系統(tǒng)的線性地址就是32位。

二、10-10-12 分頁的缺點

缺點就是物理地址尋址范圍太小了,只有4GB。隨著硬件的發(fā)展,物理內(nèi)存已經(jīng)超過4GB了,所以我們需要一種新的分頁模式來映射更多的物理內(nèi)存,2-9-9-12 分頁就應(yīng)運而生了。

三、2-9-9-12 分頁

先放一張 2-9-9-12分頁的結(jié)構(gòu)圖,有個印象:

2-9-9-12 分頁將物理地址尋址范圍擴大到 2^36=64GB。實現(xiàn)方式就是將物理頁基址由原來的32位擴大到36位,同時為了內(nèi)存對齊,PTE整體由原來的4字節(jié)擴大到了8字節(jié),下面是PTE結(jié)構(gòu)圖:

關(guān)于PTE屬性,暫時不表,先解釋一下 2-9-9-12 這幾個數(shù)字的含義。

  • 頁的大小還是4KB,因此物理頁內(nèi)偏移仍然需要12位,12就是這么來的,和10-10-12的12是一樣的意思;
  • 由于PTE變成了8字節(jié),因此一個頁表只能存 4KB / 8 = 512 個PTE了,512 = 2 ^ 9,第二個9是這么來的;
  • 因為物理地址范圍已經(jīng)擴大到64G,所以頁表的物理地址可能大于4GB,因此PDE的頁表基址也要擴大到36位了,所以頁目錄表也只能有 512 個PDE了,第一個9是這么來的;
  • 32位線性地址,已經(jīng)用掉了 9+9+12=30位,還剩2位,這兩位叫做PDPI(Page-Directory-Point-Index),是PDPT表的下標,2是這么來的。
  • 有人可能疑惑說為什么需要PDPT這個表呢?剩下的2位不用不行嗎?答:如果不用,那么線性地址就只有30位了,一個進程最多就只能映射1GB的內(nèi)存了。
    如果上面這段解釋還有疑問,那你就還沒理解進程4GB和物理地址的區(qū)別,請從頭開始閱讀這篇博客,這里確實容易產(chǎn)生混淆,要多花時間理解。

    本節(jié)課只需要理解到這里就夠了,關(guān)于PTE的屬性,以及PDE和PDPTE,將在下一節(jié)課學習。

    四、實驗:線性地址轉(zhuǎn)換成物理地址

    本文演示XP系統(tǒng)2-9-9-12分頁如何將線性地址轉(zhuǎn)換成物理地址。
    XP默認分頁模式就是 2-9-9-12,如果之前改成了10-10-12,就要先改回來。

    [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional[DEBUG]" /noexecute=optin /fastdetect /debug /debugport=com_2 /baudrate=115200 multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=op

    首先,編寫一個程序,定義一個變量,然后打印它的線性地址。

    按2-9-9-12分頁拆分線性地址

    00 PDPI=0 00?0000?000 PDI=0 100101111 PTI=12F 111101100000? 物理頁偏移:F60

    查CR3
    !process 0 0
    CR3=134c03e0

    查PDPTE
    !dq 134c03e0+0
    PDPTE=00000000`0e662001
    PDT=00e662000

    查PDE
    !dq 00e662000+0
    PDE=00000000`0e099067
    PTT=00e099000

    查PTE
    !dq 00e099000+12F*8
    PTE=80000000`0de5d067
    物理頁基址=00de5d000

    查物理地址
    !dd 00de5d000+F60
    查到數(shù)據(jù)是0x12345678,證明成功找到物理地址。

    用 !vtop 指令驗證:

    實驗成功。

    總結(jié)

    以上是生活随笔為你收集整理的(24)2-9-9-12分页(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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