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

1. 進程的虛擬地址空間

        每個進程都會有自己的虛擬地址空間,對於一個32位的進程來說,它擁有4GB(2的32次方, 字節)大小的地址空間。對於一個64位的進程來說,它擁有16EB大小的地址空間。每個進程的地址空間是相互隔離的,當進程內的各個線程在執行時,只能訪問自己進程內的內存,無法訪問其它進程的內存。即進程A的線程無法訪問進程B的地址空間的數據結構,反之亦然。 但實際上,進程並沒有真正擁有這麼大的地址空間,這些空間只是虛擬的,並不是真正的物理空間。爲了進程能夠正常地讀/寫數據,實際上需要將物理存儲器分配或映射到虛擬的地址空間。

 

2.虛擬地址空間的分區

           每個進程的虛擬地址空間被劃分爲多個分區,包括如下:

   1)空指針賦值分區

          這一分區的是從0x00000000到0x0000FFFF的閉區間,該分區的目的是爲了幫助程序員捕獲空指針的賦值,如果進程中的線程試圖去讀取或寫入位於這一分區內的內存地址,就會引發違規訪問。

    2)用戶模式分區

          這一分區的地址空間因不同的CPU體系而有所區別。 進程無法通過指針來讀取、寫入或其它任何方式來訪問在這一分區中的其它進程的數據。對所有應用程序來說,進程的大部分數據都保存在這一分區。

   3)64KB禁入分區

   4)內核模式分區

         這一分區是操作系統使用的,與線程調度、內存管理、文件系統支持、網絡支持以及設備驅動程序相關的代碼都會載入到該分區,這一分區內的任何東西爲所有進程共有。如果一個應用程序試圖讀取或寫入位於該分區中的內存地址,將引發訪問違規。

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