Windows保护模式下的分页机制(PART2:PAE模式)

1. 概述

10-10-12分页方式最多可达4GB的物理地址,但是随着硬件的发展,4GB的物理地址无法满足要求,因此出现了2-9-9-12分页,这种分布方式又被称为PAE分页。

为什么会出现2-9-9-12分页?
我们知道10-10-12最后的12是物理页偏移,页的大小是4KB是不能变的,所以12是定下来了。
那么要想表示更多的物理内存就必须增大物理页范围,而物理页是由PTE保存的,原来的PTE是4字节,PAE中增加到8字节,物理页范围由原来的4GB,扩大到了一个大到非常离谱的值。因为PTT占用大小是固定的4KB,所以PTE的个数由原来的1024个减少到512个,也就是上面的9。
PDE是一种特殊的PTE,它是用来索引PTE的,所以也是9。
第1个2被用作PDPTE,也就是页目录指针表项,每项占8个字节,共有4个PDPTE,如下图所示:
在这里插入图片描述

2. PAE下的PDPTE、PDE、PTE结构体

PDPTE是一个占8个字节的结构体,它的结构如下:

在这里插入图片描述

0位:p位,永远是1
PWT:跟TLB表相关
PCD:跟TLB表相关
Avail:给系统使用的
12-35位:页目录表的基址

PDE变成8个字节以后结构也发生了变化:
在这里插入图片描述

PAT:Page Attribute Table,针对大页

PTE结构:
在这里插入图片描述

在PDE和PTE结构的最高位有一个XD硬件保护位(在AMD中称为NX位)
在这里插入图片描述

段的属性有可读、可写、可执行,页的属性有可读、可写,所有的漏洞利用都是把数据当代码来执行,因此Intel做了一个硬件保护位,也就是不可执行位XD。

3. TLB

3.1 TLB概述

通过一个线性地址访问一个物理页要通过PDE和PTE的转换才能读到,而在PAE模式下访问一个物理页要读至少24个字节,如果跨页会读更多,因此效率是一个问题。
CPU内部有一个表叫TLB(Translation Lookaside Buffer),TLB中保存了线性地址和它对应的物理地址,这样访问物理地址的效率就大大提高了。因为TLB是CPU内部的,因此一核一个TLB,多核就有多个TLB。

只要CR3改变了,TLB立刻会进行刷新。

不同的CPU,TLB表的大小是不一样的。

通过INVLPG指令可以删除TLB表中的某一条记录。

3.2 TLB结构

在这里插入图片描述
ATTR:如果是PAE模式,就是PDPE+PDE+PTE属性&之后的值,如果是10-10-12就是PDE&PTE
LRU:TLB的空间是有限的,这个字段用来记录已经使用的数量,如果空间已满,系统根据LRU,会将读写次数较少的不常用地址废弃。

3.3 TLB种类

TLB最早在Intel的486CPU开始使用,在x86体系的CPU里面,一般有4组TLB,分别是:

  • 缓存一般页表的指令页表缓存
  • 缓存一般页表的数据页表缓存
  • 缓存大尺寸页表的指令页表缓存
  • 缓存大尺寸页表的数据页表缓存
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值