12、Windows API 記憶體管理(2)

來源:互聯網
上載者:User

4、進程的記憶體空間

1)進程虛擬位址空間的實現

    Windows系統中每個進程都有一個私人的虛擬位址空間,系統需要將每個進程的虛擬位址都映射到實體記憶體地址上。為了實現系統中每個進程都有一個私人的虛擬位址空間,系統為每一個進程都建立一個頁目錄( Directory)和一組頁表。每個進程的頁表是獨立的,而核心空間的頁表是所有進程共用的。

   在x86平台上,CR3寄存器標識了頁目錄所在的物理地址。Windows系統上的第一個進程都有獨立的頁目錄,因此系統運行時,CR3寄存器中儲存的頁目錄位址是會變化的,其值為當前啟動並執行進程的頁目錄位址。當系統要進行進程切換時,會將CR3寄存器中儲存的頁目錄位址設定為將要切換過去並開始啟動並執行進程的頁目錄位址。Windows平台的每一個進程都有一個KPROCESS結構的資料區塊,其中包括了其進程頁目錄的地址。

2)資料共用與保護

    有一些進程間共用的資料、系統的可執行代碼(系統DLL)等,在各個進程間都是一致的,因此沒有必要在實體記憶體中為這些資料儲存多份,不同進程的虛擬記憶體分頁可以映射為同樣的實體記憶體分頁,這樣可以節省實體記憶體的使用。

    同時,為了保證這種在映射到相同實體記憶體頁上的記憶體分頁在進程上仍然是私人的,系統還提供了一些保護機制。如果某個進程將某個系統DLL載入入進程記憶體空間以後,對該DLL中的資料進行了寫操作,系統就會監視到該操作,並在資料寫入之前,將要寫入的進程虛擬記憶體分頁映射到另一個新的物理分頁,並將原分頁中系統DLL的內容複寫到這個分頁中,進程間不共用這個新實體記憶體分頁,最後進程完成寫操作,將資料寫入這個新分頁中。這種對記憶體中系統DLL資料的寫入操作不會影響到其他進程,因此保護了各個進程中資料的獨立性,這種機制叫Copy-On-Write。如果系統確實需要在進程間共用資料,也可以對特定的頁面不使用Copy-On-Write。

3)注意點

    開發人員只需要瞭解以下內容。

(1)虛擬位址空間中的資料是分頁管理的。

(2)應用程式不用考慮系統中其他應用程式的記憶體使用量情況,如佔用了多少記憶體、佔用了哪些記憶體等。

(3)虛擬位址並不是物理地址空間中的地址,不是資料在記憶體中真實存在的地址,作業系統會將進程的虛擬位址映射到真實的實體記憶體的地址。

(4)進程也不用考慮真實的實體記憶體有多大,只需要瞭解可以使用2GB(一般情況下)的記憶體,作業系統負責轉換。

(5)如果系統中沒有足夠的實體記憶體供使用,那麼作業系統會將當前沒有使用的記憶體分頁“調度”到硬碟上儲存起來。頁面調度不會造成記憶體中的資料在虛擬位址空間中地址的改變,所以進程不需要知道記憶體分頁是如何調度的,不需要知道記憶體中儲存的資料是在記憶體中還是在硬碟上,只需要知道其虛擬位址就可以了。

5、虛擬記憶體布局、記憶體的分工

    進程的虛擬記憶體空間分為兩個部分,低2GB(或3GB)由應用程式使用,高2GB(或1GB)由系統核心程式使用。

    系統核心的記憶體空間中包括驅動程式,系統核心可執行程式、用於記憶體管理的資料結構(頁目錄、頁表等),用於進程管理、線程調度的資料結構、各種中斷處理常式,系統緩衝等。

    應用程式可使用的低地址空間中包括了應用程式的代碼、資料(全域變數等)、系統和使用者DLL的代碼、各線程的棧、堆等。

    棧和堆是兩種重要的內在管理形式。

    進程的每個線程都有自己的棧,棧與函數的調用、執行和返回及局部變數的儲存相關,一般情況下,棧中儲存著函數的參數、返回地址和局部變數,調用函數將參數入棧,調用指令將函數返回地址入棧,被調用函數負責儲存調用函數的相關棧指標,為局部變數分配空間等,而堆是一種可以動態分配和釋放的記憶體,由堆管理器進行管理,使用者在程式中使用的記憶體配置函數都是通過堆進行分配的。

6、記憶體的保護屬性和存取許可權

系統為每個記憶體分頁提供保護屬性和存取許可權,記憶體的保護屬性和存取許可權的最小單位是分頁,同一個分頁中的記憶體具有相同的保護屬性和存取許可權。使用者地址空間中記憶體分頁有多種保護屬性和存取許可權,如PAGE_EXECUTE等。

http://msdn.microsoft.com/en-us/library/aa366786%28VS.85%29.aspx

7、相關API

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.