Windows核心編程 - Windows內存體系結構(3)

1. 物理存儲器和頁交換文件

     如今的操作系統能讓磁盤空間看起來像內存一樣,磁盤上的文件一般被稱爲頁交換文件,其中包含虛擬內存,可供任何進程使用。頁交換文件以一種透明的方式增大了應用程序可用內存的總量。

     當一個線程試圖訪問所屬進程的地址空間中的一塊數據時,有可能會出現兩種情況:

    1)線程要訪問的數據就在內存中,這種情況下,CPU會先把數據的虛擬地址映射到物理地址,接着線程就可訪問內存中的數據了。

   2)線程要訪問的數據不在內存中,而是位於頁交換文件中的某處。這種情況下不成功的訪問稱爲頁面錯誤。發生頁面錯誤時,操作系統會在內存中找到一個閒置的頁面,如果找不到,操作系統必須先釋放一個已分配的頁面。

          A)如果待釋放的頁面沒有修改過,那麼操作系統可直接釋放該頁面;

          B) 如果待釋放的頁面被修改過,則操作系統必須先把頁面從內存複製到頁交換文件。

     接下來,系統 會在頁交換文件中對所需訪問的的數據塊進行定位,並把數據載入到內存中閒置的頁面。然後,將該塊數據的虛擬內存地址映射到內存中對應的物理內存地址,這時CPU會再次運行那條引發頁面錯誤的指令,但這一次能成功訪問到數據。

 

2.頁面保護屬性

    我們可以給每個已分配的物理存儲頁指定不同的頁面保護屬性,所有的頁面保護屬性包括如下:

  1)PAGE_NOACCESS

   2)PAGE_READONLY

   3) PAGE_READWRITE

   4)PAGE_EXECUTE

   5)PAGE_EXECUTE_READ

   6)PAGE_EXECUTE_READWRITE

   7)PAGE_WRITECOPY

   8)PAGE_EXECUTE_WRITECOPY

    一些惡意軟件將代碼寫入到用於數據 的內存區域(比如線程棧上), 通過種方式來讓應用程序 執行惡意代碼。 Windows的數據執行保護(DEP)特性提供了對此類惡意攻擊的防護。對於那些真正需要執行代碼的內存區域,操作系統纔會使用PAGE_EXECUTE_*保護屬性。 如果CPU試圖執行某個頁面的代碼,而該頁沒有PAGE_EXECUTE_*保護屬性,那麼CPU會拋出訪問違規異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章