分页及其管理、页面置换算法

1.分页

大部分虚拟内存系统中都使用一种称为分页的技术。

在任何一台计算机上,程序引用了一组内存地址,由程序产生的这些地址称为虚拟地址,他们构成了一个虚拟地址空间

  • 在没有虚拟内存的计算机上,系统直接将虚拟地址送到内存总线上,读写操作使用具有同样地址的物理内存字;
  • 在使用虚拟内存的情况下,虚拟地址不是直接被送到内存总线上,而是被送到内存管理单元(Memeory Management Unit,MMU)MMU把虚拟地址映射为物理内存地址

虚拟地址空间按照固定大小划分成称为页面的若干单元。在物理内存中对应的单元称为页框。页面和页框大小是一样的,这里假设都为4KB。他们之间的映射关系如下图:

这里写图片描述

注:在上图中,我们假设有一台可以产生16位地址的计算机,地址范围从0到64K,且这些地址是虚拟地址

然而,这台计算机只有32K的物理内存,因此,虽然可以编写64KB的程序,但它们却不能被完全调入内存运行。

在磁盘上必须有一个可以大到64KB的程序核心映像的完整副本,以保证程序片段在需要时能被调入内存。 内存和磁盘之间的交换总是以整个页面为单元进行的。

在图中,对应于64KB虚拟地址空间和32KB的物理内存,我们得到16个虚拟页面和8个页框。

图中的标记符号如下:标记0-4K的范围表示该页的虚拟地址或物理地址是0-4095;4K-8K的范围表示地址4096-8191,等等,每一页包含了4096个地址。 当程序试图访问地址8203时,例如执行下面这条指令 

  MOV REG 8203

通过恰当地设置MMU,可以把16个页面映射到8个页框中的任何一个

但是这样并没有解决虚拟地址空间比物理内存大的问题。在上图中只有8个物理页框,于是只有8个虚拟页面被映射到了物理内存中(图中的×表示页面没有被映射。)在实际的硬件中,用一个“在/不在”位来记录页面是否在内存中。

当程序访问一个未映射的页面时,例如执行如下指令

MOV REG 32780

虚拟地址32870送到MMU,MMU看到虚拟地址落在页面8(32768-36863),但是该页面并没有被映射到内存中,于是发生缺页中断,操作系统调用适当的页面置换算法找到某个页框将它的内容写入磁盘(如果它不在磁盘),随后把页面8读到刚才回收的页框修改映射关系,然后重新启动引起陷阱的指令。

2.分页管理

2.1.页表

分页系统中,允许将进程的每一页离散地存储在内存的任一物理块中

为了能在内存中找到每个页面对应的物理块,系统为每个进程建立一张页表,用于记录进程逻辑页面与内存物理页面之间的对应关系。页表的作用是实现从页号到物理块号的地址映射地址空间有多少页,该页表里就登记多少行,且按逻辑页的顺序排列,形如:

虚拟地址到物理地址的映射可以概括如下:

  • 虚拟地址被分成虚拟页号(高位部分)和偏移量(低位部分)
    • 例如,对于16位地址和4KB的页面大小,高4位可以指定16个虚拟页面,而低12位接着确定了页内偏移量。
  • 虚拟页号可用作页表的索引,以找到该虚拟页面所对应的页表项。由页表项可以找到页框号(如果有的话)。
  • 然后把页框号拼接到偏移量的高位端,以替换掉虚拟页号,形成送往内存的物理地址。
  •  

2.2 页表项

一个典型的页表项如下:
这里写图片描述
页表项的结构是与机器密切相关的,但不同机器的页表项存储的信息都大致相同。

  • 页表项中最重要的域是 页框号。
  • 其次是 “在/不在”位,
    • 这一位为1时表示该表项是有效的,可以使用;
    • 如果是0,则表示该表项对应的虚拟页现在不在内存中,访问该页面会引起缺页中断。
  • “保护”位指出一个页面允许什么类型的访问。
    • 最简单的形式是这个域只有一位
      • 0表示读/写
      • 1表示只读。
    • 一个更先进的方法是使用三位
      • 各位分别对应是否启用读、写、执行该页面。
  • “修改”位和“访问”位用于记录页面的使用情况。
    • 这两位在操作系统重新分配页框和发生缺页中断选择淘汰的页时非常有用。
  • ““高速缓存禁止”位用于禁止该页面被高速缓存。

2.3.加速分页过程

在任何分页式系统中,都需要考虑两个主要问题

  1. 虚拟地址到物理地址的映射必须非常快——使用“
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值