物理内存的管理
文章目錄
- 簡介
- 1.最大物理內存
- 2.操作系統限制
- 3.實際物理內存:
- Windows采用什么方式管理物理內存:
- 1.全局數組:
- 2.數組成員:
- 3.物理頁狀態:
- 4.操作系統的6個鏈表
簡介
物理內存:
1.最大物理內存
10-10-12分頁,最多識別物理內存為4GB
2-9-9-12分頁,最多識別物理內存為GB
2.操作系統限制
為什么在xp中,明明是2-9-9-12分頁,仍然無法超越4GB呢?
因為操作系統(操作系統內核文件里面的幾個函數)的限制,和32位無關。
3.實際物理內存:
MmNumberOfPhysicalPages * 4=物理內存
查詢到數據為
0x7ff7c,這個數據是以物理頁(4KB)為單位,轉為KB為單位的話
需要乘以4即可
Windows采用什么方式管理物理內存:
1.全局數組:
數組指針:_MMPFN * MmPfnDatabase
使用一個結構體數組,這里面的每一個成員都是一個MMPFN(大小一般為0x1c),這個數組中包含了所有的物理頁(包含使用或者未使用或者壞的)
但是這個結構體里面并未存放成員所對應的物理頁地址,結構體中是通過 數組索引值+000去找到相應的物理頁所在的物理地址,
舉個例子:
結構體中通過數組索引為0的物理頁的物理地址為 0x0000
結構體中通過數組索引為1的物理頁的物理地址為 0x1000
結構體中通過數組索引為2的物理頁的物理地址為 0x2000
數組長度:MmNumberOfPhysicalPages
2.數組成員:
(也稱頁幀數據庫)_MMPFN(一個物理頁對應這樣一個結構體)
+0x000 u1 :__unnamed
+0x004 PteAddress : Ptr32 _MMPTE
+0x008 u2 :__unnamed
+0x00c u3 :__unnamed
+0x010 OriginalPte :__MMPTE
+0x018 u4:__unnamed
3.物理頁狀態:
通過PageLocation位來展示物理頁的狀態
(首先,此時是基于未用的前提才分為6種狀態,并非使用中:)
0:MmZeroedPageListHead 零化狀態
1:MmFreePageListHead 空閑狀態
2:MmStandbyPageListHead
3:MmModifiedPageListHead
4:MmModifiedNoWritePageListHead
5:MmBadPageListHead 壞頁狀態
4.操作系統的6個鏈表
MmBadPageListHead壞鏈
MmZeroedPageListHead零化鏈表(是系統在空閑的時候進行零化的,不是程序自己清零那種)
MmFreePageListHead空閑鏈表(物理頁周轉使用的,剛被釋放的物理頁是沒有清0,系統空閑的時候有專門的線程從這個隊列摘取物理頁,加以清0后再掛入MmZeroedPageListHead)
MmStandbyPageListHead備用鏈表(當系統內存不夠用時,操作系統會把物理內存中的數據交換到硬盤上,此時頁面不是直接掛到空閑鏈表上去,而是掛到備用鏈,雖然我釋放了,但是里面的內容還是有意義的)
MmModifiedPageListHead
總結
- 上一篇: 线性地址的管理
- 下一篇: 消息机制(GUI线程讲解)