CPU Study-Virtual Memory Part2

参考来源:《超标量处理器设计》—— 姚永斌

多级页表

仍然以为是4MB的单级页表size为例,多级页表会将其划分为若干个更小的页表。
执行进程时,不需要将整个单级页表放入物理内存。
而是根据需求逐步放入这些子页表,并且也不会占用连续的物理空间(需要通过一个表格记录不同子页表的物理位置)。
获取虚拟地址对应的数据则需要通过对页表的多级访问实现。
两级页表
仍然以32位虚拟寻址空间、4KB Page Size系统为例:
将原来的单级页表的2 ^ 20个Entry 页表项分为1024 (2 ^ 10)等份,每个都是二级页表。
每个一级页表需要10位地址才能寻址到二级页表,二级页表也有1024个Entry 表项寻址下一级地址。
此时对于每个进程而言,一开始只占用连续的4KB(4B*(2 ^ 10))空间,存放一级页表,并且把页表在物理内存的位置信息存放在PTR。
之后随着进程执行,会逐渐创建二级页表并写入一级页表目录,创建映射关系。
二级页表访问用例
在上图系统中,由于虚拟地址VA部分的p1, p2宽度均为10。
每次VA发生类似0x003F_FFFF到0x0040_0000的变换(bit 22从0变为1导致p1变化),操作系统就要在物理内存中创建新的二级页表并将页表起始位置写到一级页表对应的PTE中。
如果p1不发生变化,只有p2变化,则不产生新的二级页表,但是需要通知操作系统更新new page信息。
操作系统将new page从下级存储器中取出放入物理内存,将对应的起始地址填充到二级页表PTE。
关系表格
采用分层次的多级页表后,对于一个32位虚拟地址、页大小为4KB的系统,有一个4MB程序运行,考虑两种极端情况的空间占用:

  1. 虚拟地址连续,范围为0x0000_0000~0x003F_FFFF,共有4MB,由于高10位地址不变,因此一级页表不变,只占用PTE0。一个二级页表PTE全部被占用。
    总占用:1个一级页表+1个二级页表=8KB
  2. 虚拟地址不连续,每个4KB信息分布在4MB边界,需要一个填满的一级页表加上1024个二级页表。
    总占用:1个满目录的一级页表+1024个二级页表=4MB

基于多级页表的理解,这边额外提一下操作系统中的MMU

  1. 每个程序都有独立的完整的虚拟地址空间。
  2. 引入虚拟地址到物理地址的映射,便于管理物理内存,灵活分配资源和释放资源;一段连续的虚拟内存可以存在不连续的物理内存上,减少物理内存碎片。
  3. 当多个程序运行时,占用物理空间大于真实物理空间,可以通过swap交换实现Page In(一个页从硬盘swap空间放回物理内存)& Page Out(一个页从物理内存写到硬盘空间)增加可以使用的空间资源。
  4. 通过管理每个页的访问权限(例如text段不可写,data段可读可写,用户空间不可以访问内核空间)实现程序的权限管理。
  5. 多级页表结构中,每一级页表都需要存储在物理内存,增加了访问物理内存次数。

Page Fault

进程通过虚拟地址访问页表时,发现对应的PTE有效位为0,说明此虚拟地址页表信息还没有放进物理内存。
因此虚拟地址到物理地址的映射关系也没有建立,操作系统产生Page Fault,跳转到异常程序处理入口。
需要从下级存储器提取此页放入物理内存,并将此页在物理内存中的起始位置放入页表。
PS. 无法通过虚拟地址本身识别相关信息在硬盘哪一页,需要通过额外机制记录一个进程产生的页在硬盘的位置(位于SWAP空间的一个表)。
写回 Write Back
物理内存相当于硬盘的Cache,也需要维护一致性。但是因为硬盘访问时间太长,所以对脏数据一般采用写回的方法。
当发生Page Fault并且因为物理内存空间不足需要进行页替换时,需要区分替换页是否被修改过,因此会在PTE增加一个dirty状态位。
如果dirty位为1,说明被修改过,需要写回硬盘,维持一致性,否则直接覆盖写入。
替换算法
与Cache常用的LRU方法不同,由于物理内存空间远大于Cache,记录所有的data使用记录会产生很大的代价。
所以在PTE增加了“使用位 use“,当一个Page 页被访问时置1,周期性清空此bit,从而确认此页近期是否被使用过。
页表内容

小结

以单级页表为例,分析虚拟地址转换过程:
Non Page Fault

  1. CPU送出VA到MMU。
  2. MMU使用页表基址寄存器PTR和VA[31:12]组成页表访问地址,送到物理内存。
  3. 将页表寻址到的PTE返回MMU。
  4. MMU检查PTE valid bit为1,使用PTE中的PFN和VA[11:0]组成物理地址{PFN, VA[11:]}。
  5. 访问物理内存获取数据。
    Non Page Fault访问
    Page Fault
    1~3步骤和Non Page Fault访问流程一样。从第4步开始发生变化:
  • MMU检查PTE valid bit是否为0,如果是0,触发Page Fault异常到CPU,跳转到异常处理程序。保存VA信息到专用寄存器,供异常处理程序使用。
  • 假设此时物理内存空间已满,进行Page页替换。如果替换Page页为脏,就需要先写回硬盘,否则直接下一步。
  • 异常处理程序使用MMU保存的VA寻址硬盘,并将找到的Page页写到刚刚替换的Page页空间,建立新的映射关系(由于需要访问硬盘,这个步骤比较耗时)。
  • Page Fault异常返回,引起的Page Fault指令重新回到流水线执行,并重新发出VA到MMU,执行Non Page Fault的step 4~5。
    Page Fault 访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值