日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows内存管理学习笔记(二)—— 物理内存的管理

發(fā)布時間:2025/3/21 windows 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows内存管理学习笔记(二)—— 物理内存的管理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Windows內(nèi)存管理學(xué)習(xí)筆記(二)—— 物理內(nèi)存的管理

    • 物理內(nèi)存
      • 實驗一:理解MmNumberOfPhysicalPages
    • MmPfnDatabase
      • _MMPFN
        • 物理頁狀態(tài)
        • 六個鏈表
      • 實驗二:理解零化鏈表
      • 實驗三:查看進程占用的所有物理頁

物理內(nèi)存

最大物理內(nèi)存

  • 10-10-12分頁:最多識別4GB物理內(nèi)存
  • 2-9-9-12分頁:最多識別64GB物理內(nèi)存
  • 操作系統(tǒng)限制

  • 在xp系統(tǒng)中,即使采用2-9-9-12分頁,仍然無法使用超過4GB的物理內(nèi)存(可理解為 4GB以上的內(nèi)存條)
  • 而在windows 2003windows 2008系統(tǒng)中,即使為32位系統(tǒng),但若采用2-9-9-12分頁,就可以識別4GB以上的物理內(nèi)存
  • 思考:為什么?
    答案:由內(nèi)核文件中的幾個函數(shù)限制

    實際物理內(nèi)存
    物理內(nèi)存總數(shù) = MmNumberOfPhysicalPages * 4

    實驗一:理解MmNumberOfPhysicalPages

    1)打開任務(wù)管理器,查看物理內(nèi)存

    2)查看MmNumberOfPhysicalPages(單位:物理頁)

    命令:dd MmNumberOfPhysicalPages


    3)計算物理內(nèi)存

    結(jié)論:物理內(nèi)存總數(shù) = MmNumberOfPhysicalPages * 4

    思考:這么多物理內(nèi)存,操作系統(tǒng)如何進行管理
    答案:通過全局?jǐn)?shù)組MmPfnDatabase

    MmPfnDatabase

    描述

  • 全局結(jié)構(gòu)體數(shù)組,稱為“頁幀數(shù)據(jù)庫”,包含了當(dāng)前操作系統(tǒng)中所有的物理頁
  • 每一個物理頁都有一個對應(yīng)的MMPFN結(jié)構(gòu)體
  • 通過全局變量MmPfnDatabase可以找到這個結(jié)構(gòu)體的起始位置(在WinDbg中使用命令dd MmPfnDatabase進行查看)
  • 每一個MMPFN結(jié)構(gòu)體之間在內(nèi)存中是緊挨著的
  • 定義:_MMPFN *MmPfnDatabase
    長度:MmNumberOfPhysicalPages

    _MMPFN

    //FROM WinDbg nt!_MMPFN+0x000 u1 : __unnamed+0x004 PteAddress : Ptr32 _MMPTE+0x008 u2 : __unnamed+0x00c u3 : __unnamed+0x010 OriginalPte : _MMPTE+0x018 u4 : __unnamed //FROM WRK v1.2 typedef struct _MMPFN {union {PFN_NUMBER Flink;WSLE_NUMBER WsIndex;PKEVENT Event;NTSTATUS ReadStatus;//// Note: NextStackPfn is actually used as SLIST_ENTRY, however// because of its alignment characteristics, using that type would// unnecessarily add padding to this structure.//SINGLE_LIST_ENTRY NextStackPfn;} u1;PMMPTE PteAddress;union {PFN_NUMBER Blink;//// ShareCount transitions are protected by the PFN lock.//ULONG_PTR ShareCount;} u2;union {//// ReferenceCount transitions are generally done with InterlockedXxxPfn// sequences, and only the 0->1 and 1->0 transitions are protected// by the PFN lock. Note that a *VERY* intricate synchronization// scheme is being used to maximize scalability.//struct {USHORT ReferenceCount;MMPFNENTRY e1;};struct {USHORT ReferenceCount;USHORT ShortFlags;} e2;} u3; #if defined (_WIN64)ULONG UsedPageTableEntries; #endifunion {MMPTE OriginalPte;LONG AweReferenceCount;};union {ULONG_PTR EntireFrame;struct { #if defined (_WIN64)ULONG_PTR PteFrame: 57; #elseULONG_PTR PteFrame: 25; #endifULONG_PTR InPageError : 1;ULONG_PTR VerifierAllocation : 1;ULONG_PTR AweAllocation : 1;ULONG_PTR Priority : MI_PFN_PRIORITY_BITS;ULONG_PTR MustBeCached : 1;};} u4;} MMPFN, *PMMPFN;

    MMPFN與物理頁的對應(yīng)關(guān)系

  • 通過當(dāng)前MMPFN結(jié)構(gòu)體找到對應(yīng)的物理頁
    物理頁 = 當(dāng)前_MMPFN索引值*0x1000

  • 通過當(dāng)前物理頁找到對應(yīng)的MMPFN結(jié)構(gòu)體
    _MMPFN = *MmPfnDatabase + 0x1c*(物理頁/0x1000)

  • 物理頁狀態(tài)

    MMFPN->u3.e1定義:

    //FROM WRK v1.2 typedef struct _MMPFNENTRY {USHORT Modified : 1;USHORT ReadInProgress : 1;USHORT WriteInProgress : 1;USHORT PrototypePte: 1;USHORT PageColor : 4;USHORT PageLocation : 3; //決定了當(dāng)前頁的狀態(tài),空閑情況下分為六種狀態(tài)//0:MmZeroedPageListHead//1:MmFreePageListHead//2:MmStandbyPageListHead//3:MmModifiedPageListHead//4:MmModifiedNoWritePageListHead//5:MmBadPageListHeadUSHORT RemovalRequested : 1;USHORT CacheAttribute : 2;USHORT Rom : 1;USHORT ParityError : 1; } MMPFNENTRY;

    六個鏈表

    描述:windows通過六個鏈表,將所有相同類型的物理頁串到一起

  • MmZeroedPageListHead
    零化鏈表(是系統(tǒng)在空閑的時候進行零化的,不是程序自己清零的那種)
  • MmFreePageListHead
    空閑鏈表(物理頁是周轉(zhuǎn)使用的,剛被釋放的物理頁是沒有清0,系統(tǒng)空閑的時候有專門的線程從這個隊列摘取物理頁,加以清0后再掛入MmZeroedPageListHead)MMPFNLIST MmZeroedPageListHead = {0, // TotalZeroedPageList, // ListNameMM_EMPTY_LIST, //FlinkMM_EMPTY_LIST // Blink }; 此時,MMPFN對應(yīng)結(jié)構(gòu)體如下typedef struct _MMPFN {PFN_NUMBER Flink;PMMPTE PteAddress;PFN_NUMBER Blink;u3;MMPTE OriginalPte;u4; } MMPFN, *PMMPFN;
  • MmStandbyPageListHead
    備用鏈表(當(dāng)系統(tǒng)內(nèi)存不夠的時候,操作系統(tǒng)會把物理內(nèi)存中的數(shù)據(jù)交換到硬盤上,此時頁面不是直接掛到空閑鏈表上去,而是掛到備用鏈表上,雖然我釋放了,但里邊的內(nèi)容還是有意義的)
  • MmModifiedPageListHead
  • MmModifiedNoWritePageListHead
  • MmBadPageListHead
    壞鏈
  • 實驗二:理解零化鏈表

    1)在WinDbg中查看全局變量MmPfnDatabase的值

    2)查看全局變量MmZeroedPageListHead的值

    3)定位第一個零化鏈表
    公式:MmZeroedPageList[0] = MmPfnDatabase + MmZeroedPageListHead[3]*0x1c

    4)查看后四項(紅色代表Flink,藍色代表Blink)

    總結(jié):零化鏈表結(jié)構(gòu)如下圖所示

    實驗三:查看進程占用的所有物理頁

    1)在WinDbg中定位目標(biāo)進程

    2)查看該進程的EPROCESS結(jié)構(gòu)體,定位偏移為0x1f8的成員

    命令:kd> dt _EPROCESS 866bf7e8

    kd> dt _EPROCESS 866bf7e8 ntdll!_EPROCESS......+0x1f8 Vm : _MMSUPPORT......

    3)查看_MMSUPPORT結(jié)構(gòu)體

    命令:dt _MMSUPPORT 866bf7e8+0x1f8

    ntdll!_MMSUPPORT+0x000 LastTrimTime : _LARGE_INTEGER 0x01d6e998`ed894368+0x008 Flags : _MMSUPPORT_FLAGS+0x00c PageFaultCount : 0xb7+0x010 PeakWorkingSetSize : 0xbd+0x014 WorkingSetSize : 0xbd+0x018 MinimumWorkingSetSize : 0x32+0x01c MaximumWorkingSetSize : 0x159+0x020 VmWorkingSetList : 0xc0883000 _MMWSL+0x024 WorkingSetExpansionLinks : _LIST_ENTRY [ 0x864b2a9c - 0x8649323c ]+0x02c Claim : 0+0x030 NextEstimationSlot : 0+0x034 NextAgingSlot : 0+0x038 EstimatedAvailable : 0+0x03c GrowthSinceLastEstimate : 0xb7

    4)查看VmWorkingSetList

    命令:dt _MMWSL 0xc0883000

    nt!_MMWSL+0x000 Quota : 0+0x004 FirstFree : 0x1e+0x008 FirstDynamic : 0xa+0x00c LastEntry : 0x217+0x010 NextSlot : 7+0x014 Wsle : 0xc0883cfc _MMWSLE //物理頁起始地址+0x018 LastInitializedWsle : 0x4c0 //物理頁個數(shù)+0x01c NonDirectCount : 0x33+0x020 HashTable : 0xc0a84000 _MMWSLE_HASH+0x024 HashTableSize : 0x200+0x028 NumberOfCommittedPageTables : 2+0x02c HashTableStart : 0xc0a84000 Void+0x030 HighestPermittedHashAddress : 0xc0e00000 Void+0x034 NumberOfImageWaiters : 0+0x038 VadBitMapHint : 0x16+0x03c UsedPageTableEntries : [1536] 0x34+0xc3c CommittedPageTables : [48] 1

    5)查看最后一個成員

    命令:dd 0xc0883cfc L4c2

    總結(jié)

    以上是生活随笔為你收集整理的Windows内存管理学习笔记(二)—— 物理内存的管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 色婷婷av国产精品 | 秋霞视频在线观看 | 精品美女在线观看 | 韩国毛片一区二区三区 | 色av色| 一本之道高清无码视频 | 欧美日韩在线中文字幕 | 超碰在线观看97 | 骚虎av | 51啪影院 | 成人在线综合 | 欧美a∨亚洲欧美亚洲 | 视频一区二区三区在线 | 一区二区视频在线播放 | 日韩在线一区二区三区四区 | a级成人毛片 | 欧美三日本三级少妇三 | 国产愉拍 | 欧美无马 | av不卡在线看 | 国产新婚疯狂做爰视频 | 亚洲欧美在线视频观看 | 欧美性一区二区 | 国产成人在线免费 | 五月婷婷六月激情 | 天天干人人 | 久热这里| 少妇又紧又色又爽又刺激视频 | 香蕉网伊 | 777av | 依依成人综合 | 日日干影院| 免费av软件 | 国产精品免费一区 | 少妇吹潮| 中国超碰| 91蝌蚪视频在线观看 | 欧美成在线 | 91av影视| 精品国产日本 | 打屁股无遮挡网站 | 黄色小毛片 | 成人福利一区二区 | 99热国产精品 | 特级西西444www大精品视频免费看 | 朝桐光av在线一区二区三区 | 放荡闺蜜高h苏桃情事h | 免费的黄色的网站 | 国产亚洲天堂 | 日韩一区二区三免费高清在线观看 | 欧美香蕉视频 | 337p日本大胆噜噜噜噜 | 国产午夜成人久久无码一区二区 | 久久精品久久精品久久 | jvid乐乐 | 激情综合五月网 | 色热热 | 九九久久国产精品 | 日韩精品一二三 | 狠狠摸狠狠操 | 色多多在线观看 | brazzers欧美一区二区 | 李丽珍裸体午夜理伦片 | 久久女同互慰一区二区三区 | 欧美激情 国产精品 | 欧美在线 | 免费成人美女女 | 欧美人妻日韩精品 | 一卡二卡在线视频 | 中文字幕 国产精品 | 欧美一级大黄 | 手机成人在线 | www.199麻豆 | 欧美日本韩国一区 | 欧美成人精品在线视频 | 国产乱淫片视频 | 姑娘第5集在线观看免费 | 青青草视频偷拍 | 精品午夜视频 | 欧美第一网站 | 免费观看污| 久久成人乱码欧美精品一区二区 | 午夜精品久久久久久毛片 | 人妻av一区二区 | 91综合在线| 国产一区亚洲二区三区 | 久久婷婷国产麻豆91天堂 | 日韩欧美激情在线 | 日本公妇乱淫免费视频一区三区 | 色欧美日韩| 久一在线视频 | 91精品国产综合久久久蜜臀 | 国产一区网站 | 免费国产黄色 | 可以直接观看的av | 另类亚洲激情 | 三级五月天| 黄色一极视频 | 国产男男网站 |