Windows 内核原理:分页机制详解

文章目录

    • 分页
      • 检查分页情况
        • 查看是否开启了分页
        • 查看是否开启64位分页
        • 查看开启了那种分页模式
      • 分页情况手动分析
        • 线性地址拆分
        • 页目录基址算法
        • 找到 PML4 的指针

分页

  • Offset:页内偏移,表示在一个物理也内的实际起始地址

  • PT(Page Table),页表,内部的每一项叫做页表项(PTE

    页表中每一项指向最终的页框(物理页),相当于一个指针的值,由于每个页框的大小为4K,所以这个指针的最后12位不是地址,而是当前物理页的属性。最终的页内偏移,是通过线性地址中最后的12位来表示的。

  • PD(Page Directory),页目录表,内部的每一项叫做页目录项(PDE

    页目录中,存储的是下一级页目录或者页表的地址,相当于指针的形式,所以页目录中的每一项的长度,和当前架构下指针的长度相同(32位系统为4Byte,64位为 8Byte)。

  • PDPT(Page Directory Pointer Table),页目录指针表,其中每一项叫做PDPTE

  • PML4(Page Map Level 4),四级页表,其中每一项叫做 PML4E

Windows 内核原理:分页机制详解_第1张图片

检查分页情况

查看是否开启了分页
# cr0.PG 是第31位,设置为1表示已经开启分页
3: kd> r cr0
cr0=0000000080050033
3: kd> .formats  0000000080050033
Evaluate expression:
  Hex:     00000000`80050033
  Decimal: 2147811379
  Octal:   0000000000020001200063
  Binary:  00000000 00000000 00000000 00000000 10000000 00000101 00000000 00110011
  Chars:   .......3
  Time:    ***** Invalid
  Float:   low -4.59249e-040 high 0
  Double:  1.06116e-314
查看是否开启64位分页
# 查看是否开启了64位
3: kd> rdmsr c0000080
msr[c0000080] = 00000000`00000d01
3: kd

你可能感兴趣的:(Windows内核原理,windows)