天天看點

Windows AWE API 記憶體配置設定和普通記憶體配置設定的不同點

以下觀點可能和實際情況有點不符合,因為本人沒有閱讀過微軟的内部文檔,也找不到其他資料

隻能根據現有的資料,推測,希望懂的人或者牛人能夠指點。指出其中的問題,歡迎拍磚

Windows AWE API 記憶體配置設定和普通記憶體配置設定的不同點

普通記憶體配置設定方式:

  圖的左邊,是普通記憶體配置設定方式。

  當程式中的虛拟記憶體送出時,程式會向系統申請記憶體,系統會配置設定一個PFN,一個PFN包含了很多資訊,主要是代表記憶體頁,有時候也可以把它看成記憶體頁,這樣比較容易了解

  PTE是如果從VAS 也就是 虛拟記憶體,送出到實體記憶體時,PTE會記錄映射的資訊。

  普通配置設定的基本流程可能是這樣。申請到PFN 後,PTE 會映射到相應的PFN,并把VAS中的頁讀到PFN對應的實體記憶體頁中。

  這個感覺比較簡單

AWE記憶體配置設定:

  對SQL Server 了解比較深的朋友會知道,SQL Server 啟用了AWE之後,配置設定的記憶體将會被鎖住,也就是 locked page,在程式停止前是無法被釋放的。

  當程式想系統以AWE方式請求記憶體時,系統會從PFN Database 也就是一個管理 PFN 的地方,申請出一塊記憶體,并把 PFN 對應的實體記憶體映射到虛拟記憶體中。

     也就是虛拟記憶體通過指針指向了實體記憶體。請看圖:

            

Windows AWE API 記憶體配置設定和普通記憶體配置設定的不同點

    在PFN映射到虛拟記憶體的時候,PTE會被配置設定,與PFN綁定加鎖。但是PFN的記憶體已經映射到了虛拟記憶體中,PFN會把指向記憶體的指針指到PTE上。

    是以,PTE無法探測出有多少記憶體被AWE配置設定到了程式中。是以也無法對AWE配置設定的記憶體做頁換出,造成Locked Page。