虚拟内存技术背景下的分页技术

**

一、虚拟内存

**
随着软件的膨胀,需要运行的程序往往大到内存无法容纳,而且需要系统能够支持多个程序同时运行,为了解决这个问题,曾经出现过交换技术和覆盖技术,但都不是特别有吸引力的解决方案。交换技术换出效率太慢,而且程序一但程序大小超过内存,交换技术也无能为力;覆盖技术需要程序员把程序分割成片段,这对程序员的要求很严格,很少程序员擅长使用覆盖技术。
虚拟内存技术就是在这种情况下发展起来的,虚拟内存的基本思想是:每个程序都有自己的地址空间,这个空间能被操作系统分成多块,每一块称作一个页面,分页技术应运而生。

二、分页技术

1、概述
程序虚拟地址空间产生的地址叫做虚拟地址。这个虚拟地址经过页表的映射后得到程序在内存的真实物理地址。页表作为虚拟地址到页框的映射表,页框是内存的一段地址,是刚好容纳程序一个页面的地址段。当访问页表项的有效位(即在/不在位)为0时,即内存中不存在需要的页面时,就会发生缺页中断,就需要进行页面置换。
虚拟内存技术背景下的分页技术
2、分页技术下的程序执行过程
如今大多数计算机都支持虚拟内存技术,但是不支持虚拟内存的输入地址直接被当成真实物理内存地址,而支持虚拟内存的输入地址会经过MMU的转换后才形成真实物理地址。
虚拟内存技术背景下的分页技术
现在来讨论MMU中运行机制(右半部分),先解释TLB,TLB是分页技术中的高速缓存技术,缓存部分页表项,命中率高可以大大提高效率。虚拟地址一开始会被分成两部分,高位为虚拟页号,低位为偏移量。虚拟页号作为关键字在TLB中搜索是否有命中页号,如果存在此页号,则可以取出页框号和低位偏移量形成真实物理地址;否则,发生TLB访问失效,此时需要访问内存中的页表,如果页表中存在该页号,则取出页框号;若没有,则发生缺页中断,陷入内核,需要执行磁盘IO,在磁盘中寻找所需页面调入内存。新调入的页面会置换页表和TLB中的一个页面。
3、页面置换算法
当发生缺页中断时,就会新调入一个页面到内存,若页表已经满项,则需要选择淘汰一项,为新调入页面让出位置。这里介绍几种页面置换算法。

1.最优页面置换算法
计算在下一次访问之前,需要多长时间(用指令数表示),这种算法难以实现,作为算法性能参考标准。

2.最近未使用置换算法
定时执行R清零线程,当发生缺页中断时,在页表中寻找RM值最小的页面淘汰

虚拟内存技术背景下的分页技术

3.先进先出置换算法
寻找最早进入的页面淘汰

4.第二机会页面置换算法
选择驻留时间最长,且R=0的页面淘汰,当R=1,R清零,修改装入时间,当作新装入的页面
虚拟内存技术背景下的分页技术

5.时钟页面置换算法
虚拟内存技术背景下的分页技术
虚拟内存技术背景下的分页技术
6.最近最少使用页面置换算法
利用程序的局部访问性原理
在最近时间内访问频率最低的页面,选择淘汰。
实现最近访问记录
1、老化算法
2、计数器。但是,如果前面使用频数较高的页面,后面即使使用频数较低,但计数器值依然高。
这些算法我做了Demo运行测试过,github:https://github.com/delin10/frame