思维导图
目录
一、虚拟内存的基本概念
1、传统存储管理方式的特征
上一节的各种内存管理策略都是为了同时将多个进程保存在内存中以便运行多道程序设计。他们都具有以下两个共同特征:
- 一次性:作业必须一次性全部装入内存后才能开始运行。这会造成两个问题:①作业很大时,不能全部装入内存,导致大作业无法运行;②当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度降低
- 驻留性:一旦作业被装入内存,就会一直驻留在内存中,直到作业运行结束。事实上,在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源。
2、局部性原理
要真正理解虚拟内存多道思想,首先必须了解计算机中著名的局部性原理
- 时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量循环)
- 空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问(因为很多数据在内存都是连续存放的)
3、虚拟内存的定义与特征
虚拟内存有以下三个特征:
- 多次性:无需在作业运行时一次性全部装入内存,而是运行被分成多次调入内存
- 对换性:在作业运行时无需一直常驻内存,而是运行在作业运行过程中,将作业换入、换出
- 虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量
4、虚拟内存技术的实现
二、请求分页管理方式
请求分页存储管理与基本分页存储管理的主要区别:
- 在程序执行过程中,当所访问的信息不在内存中,由操作系统复杂将所需信息从外存调入内存,然后继续执行程序(操作系统提供请求调页功能,将缺失的页面从外存调入内存)
- 若内存空间不足,由操作系统负责将内存中暂时用不到的信息换出外存(操作系统要提高页面置换功能,将暂时用不到的页面换出外存)
1、页表机制
2、缺页中断机构
缺页中断:是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断
一条指令在执行期间,可能会产生多次缺页中断(如:copy A to B,A、B属于不同页面)
3、地址变换机构
新增步骤:
1、请求调页(查到页表项时进行判断)
2、页面置换(需要调入内面,但是没有空闲内存块时进行)
3、需要修改请求页表中新增的表项
三、页面置换算法
1、最佳置换算法(OPT、Optimal [adj. 最佳的,最优的] )
每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再访问的页面,这样可以保证最低的缺页率。
实际上,只有在进程执行中才能知道接下来会访问道是哪个页面,操作系统是无法提前预判页面访问序列。因此,最佳置换算法是无法实现的
2、先进先出置换算法(FIFO)
每次选择淘汰的页面是最早进入内存的页面
Belady异常——当为进程分配的物流快增大时,缺页次数不减反增的异常现象
只有FIFO算法会产生Belady异常。另外,FIFO算法虽然实现简单,但时该算法与进程实际运行时的规律不适应,因为先进入的页面也有可能最经常被访问,因此,算法性能差
3、最近最久未使用置换算法(LRU)
每次淘汰的页面是最近最久未使用的页面。该算法的实现需要专门的硬件支持,虽然算法性能好,但是实现困难,开销大。
4 、时钟置换算法(CLOCK)
最佳置换算法性能最好,但无法实现;先进先出置换算法实现简单,但算法性能差;最近最少使用置换算法性能好,是最解决OPT算法性能的,但实现起来需要专门硬件支持,算法开销大。
时钟置换算法是一种性能和开销较均衡的算法,又称CLOCK算法,或最近使用算法(NRU,not Recently Used)