内存空间的扩充
在传统存储管理方式的基础上引入了交换技术、覆盖技术,使得内存利用率有所提升,并且能从逻辑上扩充内存容量
覆盖技术
早期的计算机内存很小,比如IBM推出的第一台PC机最大只支持1MB大小的内存。因此经常会出现内存大小不够的情况
后来人们引入了覆盖技术,用来解决“程序大小超过物理内存总和”的问题
覆盖技术的思想:将程序分为多个段(多个模块),常用的段常驻内存,不常用的段在需要时调入内存
内存中分为一个“固定区”和若干个“覆盖区”
需要常驻内存的段放在“固定区”中,调入后就不再调出(除非运行结束)
不常用的段放在“覆盖区”,需要用到时调入内存,用不到时调出内存
交换技术
交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
虽然不常用的进程被调出内存了,但是该进程的PCB还在内存中保存着:
- 应该在外存(磁盘)的什么位置保存被换出的进程?
- 什么时候应该交换?
- 应该换出哪些进程?
覆盖与交换的区别:
- 覆盖是在同一程序或进程中的
- 交换是在不同进程(或作业)之间的
虚拟存储技术
传统存储管理方式的特征、缺点
局部性原理
时间局部性:现在访问的指令、数据在不久后很可能会被再次访问
空间局部性:现在访问的内存单元周围的内存空间,很可能在不久后会被访问
高速缓存技术:使用频繁的数据放到更高速的存储器中
虚拟内存的定义和特征
虚拟内存的三个主要特征:
- 多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存
- 对换性:在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将作业换入、换出
- 虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量
如何实现虚拟内存技术
虚拟内存技术,允许一个作业分多次调入内存,如果采用连续分配方式,会不方便实现。因此虚拟内存的实现需要建立在离散分配的内存管理方式基础上
请求分页管理方式
页表机制
缺页中断机构
如果内存中有空闲块:修改内存号为a,状态位为1
如果内存中没有空闲块:将c换出内存,将x号块放进c号块
缺页中断是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断
一条指令在执行期间,可能产生多次缺页中断:将逻辑地址A中的数据复制到逻辑地址B,而A、B属于不同的页面,则有可能产生两次中断
地址变换机构
在具有快表机构的请求分页系统中,访问一个逻辑地址时,若发生缺页,则地址变换步骤是
- 查快表(未命中)
- 查慢表(发现未调入内存)
- 调页(调入的页面对应的表项不仅会加入慢表,也会加入快表中)
- 查快表(命中)
- 访问目标内存单元
页面置换算法
页面的换入、换出需要磁盘I/O,会有较大的开销,因此好的页面置换算法应该追求更少的缺页率
最佳置换算法OPT(性能最好)
每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率
最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的
先进先出置换算法FIFO
每次选择淘汰的页面是最早进入内存的页面
最近最久未使用置换算法LRU
该算法性能最接近最佳置换算法:
时钟置换算法CLOCK(NRU)
实现简单,算法开销小,但未考虑页面是否被修改过
改进型的时钟置换算法NRU
第一优先级:最近没访问,且没修改的页面
第二优先级:最近没访问,但修改过的页面
第三优先级:最近访问过,但没修改的页面
第四优先级:最近访问过,且修改过的页面
算法开销较小,性能也不错