旅の途中
你知道阿基米德原理吗?

导航

 

页表

虚拟存储器系统需要某种方法来判定一个虚拟页是否在DRAM的某个地方。
这些功能由操作系统、存储器管理单元(MMU)中的地址翻译硬件和一个存放在物理存储器中的页表数据结构联合提供。

功能

将虚拟页映射到物理页。每次地址翻译硬件通过读取页表将一个虚拟地址转换为物理地址。

页表就是一个页表条目(PTE)的数组。虚拟地址空间中的每个页在页表的一个固定偏移量处都有一个PTE。
可以假设PTE由一个有效位和一个n位地址字段组成。有效位表明该虚拟页当前是否被缓存在DRAM中。如果设置了有效位,地址字段就表示DRAM中相应物理页的起始位置。

页命中

如图所示,当CPU读包含在VP2中的虚拟存储器的一个字时,地址翻译硬件将虚拟地址作为一个索引定位PTE2,并从存储器中读取它.因为有效位为1,所以地址翻译硬件就知道VP2是缓存在物理存储器中的了。所以,它可以直接使用PTE中的物理存储器地址,构造出这个字的物理地址。

缺页

DRAM缓存不命中称为缺页。当CPU引用虚拟存储器中的一个字,地址翻译硬件从存储器读取对应PTE发现其有效位为0时,触发缺页异常。

缺页异常处理程序

该程序会选择一个牺牲页,如果该牺牲页被修改,则先将其拷贝回磁盘。接下来,内核从磁盘拷贝所缺页到物理存储器,更新对应PTE,随后返回。当异常处理程序返回时,它会重新启动导致缺页的指令。因为之前所缺页已经被缓存进物理存储器,所以这次会页命中。

效率分析

因为不命中的处罚很大,所以可能会担心其效率很低。但归功于局部性,我们的程序反而可以以很高的效率执行。

尽管程序运行过程中引用的页面总数可能超出物理存储器的大小,但局部性原则保证任意时刻,程序往往在一个较小的活动页面集合上工作。这个集合叫做工作集。如果工作集的大小超出物理存储器的大小,那么程序将产生颠簸状态。这时页面不断地换进换出。

ps:可以使用Unix的getrusage函数监测缺页的数量。

posted on 2017-11-17 22:46  CknightX  阅读(2307)  评论(0编辑  收藏  举报