windows核心編程--記憶體結構

來源:互聯網
上載者:User
進程的虛擬位址空間

每個進程都被賦予它自己的虛擬位址空間。對於3 2位進程來說,這個地址空間是4 G B,因為3 2位指標可以擁有從0 x 0 0 0 0 0 0 0 0至0 x F F F F F F F F之間的任何一個值。這使得一個指標能夠擁有4 294 967 296個值中的一個值,它覆蓋了一個進程的4 G B虛擬空間的範圍。

由於每個進程可以接收它自己的私人的地址空間,因此當進程中的一個線程正在運行時,該線程可以訪問只屬於它的進程的記憶體。屬於所有其他進程的記憶體則隱藏著,並且不能被正在啟動並執行線程訪問。注意在Windows 2000中,屬於作業系統本身的記憶體也是隱藏的,正在啟動並執行線程無法訪問。這意味著線程常常不能訪問作業系統的資料。

每個進程的虛擬位址空間都要劃分成各個分區。地址空間的分區是根據作業系統的基本實現方法來進行的。不同的Wi n d o w s核心,其分區也略有不同。表1 3 - 1顯示了每種平台是如何對進程的地址空間進行分區的。

 

表13-1 進程的地址空間如何分區

分區 32位Windows 2000(x86和Alpha處理器) 32位Windows 2000(x86w/3GB使用者方式) 64位Windows 2000(Alpha和IA-64處理器) Windows 98
N U L L指標分配的分區 0 x 0 0 0 0 0 0 0 0 0 x 0 0 0 0 F F F F 0 x 0 0 0 0 0 0 0 0 0 x 0 0 0 0 F F F F 0x00000000 00000000 0x00000000 0000FFFF 0 x 0 0 0 0 0 0 0 0 0 x 0 0 0 0 0 F F F
DOS/16位Windows應用程式相容分區 0 x 0 0 0 0 0 1 0 0 0 0 x 0 0 3 F F F F F
使用者方式 0 x 0 0 0 1 0 0 0 0 0 x 7 F F E F F F F 0 x 0 0 0 1 0 0 0 0 0 x B F F E F F F F F 0x00000000 00010000 0x000003FF FFFEFFFF 0 x 0 0 4 0 0 0 0 0 0 x 7 F F F F F F F
64-KB 0 x 7 F F F 0 0 0 0 0 x B F F F 0 0 0 0 0 x 0 0 0 0 0 3 F F F F F F 0 0 0 0
禁止進入 0 x 7 F F F F F F F 0 x B F F F F F F F 0 x 0 0 0 0 0 3 F F F F F F F F F F
共用記憶體映射 0 x 8 0 0 0 0 0 0 0
檔案(MMF)核心方式 0 x 8 0 0 0 0 0 0 0 0 0 x F F F F F F F F 0 x C 0 0 0 0 0 0 0 0 x F F F F F F F F 0x00000400 00000000 0xFFFFFFFFF FFFFFFF 0 x B F F F F F F F 0 x C 0 0 0 0 0 0 0 0 x F F F F F F F F

NULL指標:就是程式中的NULL哦, 進程地址空間的這個分區的設定是為了協助程式員掌握N U L L指標的分配情況。
MS-DOS/16位Windows應用程式相容分區—僅適用於Windows 98:進程地址空間的這個4 M B分區是Windows 98需要的,目的是維護M S - D O S應用程式與1 6位應用程式之間的相容性。
使用者方式: 這個分區是進程的私人(非共用)地址空間所在的地方。一個進程不能讀取、寫入、或者以任何方式訪問駐留在該分區中的另一個進程的資料。對於所有應用程式來說,該分區是維護進程的大部分資料的地方。由於每個進程可以得到它自己的私人的、非共用分區,以便存放它的資料,因此,應用程式不太可能被其他應用程式所破壞,這使得整個系統更加健壯。系統還可以在這個分區中映射該進程可以訪問的所有記憶體對應檔。當我最初觀察3 2位進程的地址空間的時候,我驚奇地發現可以使用的地址空間還不到我的進程的全部地址空間的一半。難道核心方式分區真的需要上面的一半地址空間嗎?實際上回答是肯定的。系統需要這個地址空間,供核心代碼、裝置驅動程式代碼、裝置I / O快取、非頁面記憶體池的分配和進程頁面表等使用。實際上M i c r o s o f t將核心壓縮到這個2 G B空間之中。
64KB禁止進入的分區—僅適用於Windows 2000 : 這個位於使用者方式分區上面的64 KB分區是禁止進入的,訪問該分區中的記憶體的任何企圖均將導致訪問違規。M i c r o s o f t之所以保留該分區,是因為這樣做將使得M i c r o s o f t能夠更加容易地實現作業系統。當將記憶體塊的地址和它的長度傳遞給Wi n d o w s函數時,該函數將在執行它的操作之前使記憶體塊生效。
共用的MMF分區—僅適用於Windows 98 : 這個1 G B分區是系統用來存放所有3 2位進程共用資料的地方。例如,系統的動態連結程式庫K e r n e l 3 2 . d l l、A d v A P I 3 2 . d l l、U s e r 3 2 . d l l和G D I 3 2 . d l l等,全部存放在這個地址空間分區中,因此,所有3 2位進程都能很容易同時訪問它們。
核心方式分區—適用於Windows 2000和Windows 98 : 這個分區是存放作業系統代碼的地方。用於線程調度、記憶體管理、檔案系統支援、網路支援和所有裝置驅動程式的代碼全部在這個分區載入。駐留在這個分區中的一切均可被所有進程共用。在Windows 2000中,這些組件是完全受到保護的。
地址空間中的地區

當進程被建立並被賦予它的地址空間時,該可用地址空間的主體是閒置,即未分配的。若要使用該地址空間的各個部分,必須通過調用Vi r t u a l A l l o c函數(第1 5章介紹)來分配它裡邊的各個地區。對一個地址空間的地區進行分配的操作稱為保留( r e s e r v i n g )。

每當你保留地址空間的一個地區時,系統要確保該地區從一個分配粒度的邊界開始。對於不同的C P U平台來說,分配粒度是各不相同的。
提交地址空間地區中的實體儲存體器

若要使用已保留的地址空間地區,必須分配實體儲存體器,然後將該實體儲存體器映射到已保留的地址空間地區。這個過程稱為提交實體儲存體器。實體儲存體器總是以頁面的形式來提交的。若要將實體儲存體器提交給一個已保留的地址空間地區,也要調用Vi r t u a l A l l o c函數。
實體儲存體器與頁檔案

在較老的作業系統中,實體儲存體器被視為電腦擁有的R A M的容量。換句話說,如果電腦擁有1 6 M B的R A M,那麼載入和啟動並執行應用程式最多可以使用1 6 M B的R A M。今天的作業系統能夠使得磁碟空間看上去就像記憶體一樣。磁碟上的檔案通常稱為頁檔案,它包含了可供所有進程使用的虛擬記憶體。

當然,若要使虛擬記憶體能夠運行,需要得到C P U本身的大量協助。當一個線程試圖訪問一個位元組的記憶體時, C P U必須知道這個位元組是在R A M中還是在磁碟上。

從應用程式的角度來看,頁檔案透明地增加了應用程式能夠使用的R A M(即記憶體)的數量。如果電腦擁有6 4 M B的R A M,同時在硬碟上有一個100 MB的頁檔案,那麼啟動並執行應用程式就認為電腦總共擁有1 6 4 M B的R A M。
當然,實際上並不擁有1 6 4 M B的R A M。相反,作業系統與C P U相協調,共同將R A M的各個部分儲存到頁檔案中,當啟動並執行應用程式需要時,再將頁檔案的各個部分重新載入到R A M。由於頁檔案增加了應用程式可以使用的R A M的容量,因此頁檔案的使用是視情況而定的。如果沒有頁檔案,那麼系統就認為只有較少的R A M可供應用程式使用。但是,我們鼓勵使用者使用頁檔案,這樣他們就能夠運行更多的應用程式,並且這些應用程式能夠對更大的資料集進行操作。最好將實體儲存體器視為儲存在磁碟機(通常是硬碟)上的頁檔案中的資料。這樣,當一個應用程式通過調用Vi r t u a l A l l o c函數,將實體儲存體器提交給地址空間的一個地區時,地址空間實際上是從硬碟上的一個檔案中進行分配的。系統的頁檔案的大小是確定有多少實體儲存體器可供應用程式使用時應該考慮的最重要的因素, R A M的容量則影響非常小。

資料對齊的重要性

當C P U訪問正確對齊的資料時,它的運行效率最高。當資料大小的資料模數的記憶體位址是0時,資料是對齊的。例如, W O R D值應該總是從被2除盡的地址開始,而D W O R D值應該總是從被4除盡的地址開始,如此等等。當C P U試圖讀取的資料值沒有正確對齊時, C P U可以執行兩種操作之一。即它可以產生一個異常條件,也可以執行多次對齊的記憶體訪問,以便讀取完整的未對齊資料值。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.