驱动-分页机制

一、地址的划分

  • 逻辑地址: 通过段寄存器+偏移的形式表示的地址
  • 虚拟地址: 通过分段机制将逻辑地址转换成位于虚拟空间中的虚拟地址
  • 物理地址: 通过分页机制将虚拟地址转换成物理地址

二、虚拟地址转物理地址(禁用 PAE 的情况)

win7 默认开启 PAE,需要通过下面的指令关闭
BCDEdit /set PAE ForceDisable
BCDEdit /set NX AlwaysOff
  • x86 环境下每一个进程都拥有自己的 4GB 虚拟地址空间
  • 并且每个进程都拥有自己的页目录表,通过 cr3 可以找到
  • 页目录表拥有 1024 个元素的表,每个元素都是 4 字节,保存了页目录项
    • 页目录表(PDT) 配合 页目录索引(第一个10) 可以找到页目录项[PDE]
    • 页目录项的低 12 位保存的是属性位,去除低 12 位,每一个页目录项可以找到一个页表
    • 通过0XC0300000线性地址可以找到PDT
  • 页表拥有 1024 个元素的表,每个元素都是 4 字节,保存了页
    • 页表(PTT) 配合 页表索引(第二个10) 可以找到 页表项[PTE]
    • 页表项的低 12 位保存的是属性位,去除低 12 位,每一个页表项都是一个页基址
    • 通过0XC0000000线性地址可以找到PTT
  • 通过页基址+偏移(低12位)可以找到对应的物理地址
  • 能够保存的最多页数 : 1024 * 1024 -> 0x100000 (0~0xfffff)

三、虚拟地址转物理地址(开启 PAE 的情况(默认))

  • 2: 页目录表指针表 -> 4,9: 页目录表 -> 512,9: 页表 -> 512,12: 页基址
  • 开启了 PAE 以后,多出了一个页目录表指针表 PDPT -> PDPE
  • 即使开启了 PAE,每一个进程的虚拟地址最大仍然是 4 GB,但是在进行页转化的时候,其中的页表项变成了 64位,也就意味着能够映射到的物理地址最大就是 64 位。

物理页属性

P:当前页是否有效,内存紧张挪作他用的时候P位置为0,再次访问会走缺页异常,E号中断
RW:是否可读写
U/S:1为用户,0为系统
A:是否被访问过,访问过为1
D:有没有被写过,被写过为1
PS:1为大页,为大页,PTE没有意义
10-11位:根据这两位判断缺页异常是分配还是被转移

  • 1-4位和12-32位有值,10-11位都为0表示被转移到文件中1-4位+12-32位的位置
  • 5-9位有值,其他都为0,表示页没分配
  • 0-32为全是0,表示分配了没挂或者地址无效,检测EPROCESS结构体中的VADROOT结构体是否有记录
  • 5-9位有值。10位为0,11位为1表示当前物理页内容正在转移至文件
    在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值