- 传统内存管理缺点:
- 一次性:一个进程运行需要将全部内存装入,当进程超过最大内存时无法运行,当多个进程同时运行时,并发度下降
- 驻留性:装入之后就不会移除,除非进程结束
- 时间局部性和空间局部性原理:
- 结论:程序暂时用不到的部分没必要移到内存,内存空间不够时可以把暂时用不到的移出内存
- 虚拟内存三个特征
- 多次性:允许程序多次调入内存
- 兑换性:允许交换暂时不使用和需要使用的部分
- 虚拟性:从外存对内存的扩充
- 虚拟内存的实现相比于传统内存管理最大的区别
- 在程序执行过程中,当访问的信息不在内存中时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序
- 当内存不够时,需要将内存暂时不使用的部分交换到外存
- 请求分页页表
- 请求页表除了要记录内存块号外,还需要添加其他标志位
-- 内存块号:null,或者实际内存块号
-- 状态位:是否已调入内存
-- 访问字段:记录最近被访问的次数,上次访问时间,可供置换算法参考
-- 修改位:页面调入到内存中后是否被修改过
-- 外存地址
- 缺页中断过程
- 当访问页面不在内存,产生缺页中断,操作系统处理中断(缺页的进程阻塞,放入阻塞队列,调页,唤醒进程,放回就绪队列)
- 当内存有空闲内存块,为进程分配内存块,修改请求页表
- 当内存没有空闲内存块,由页面置换算法选择一个页面淘汰,若页面在内存期间被修改过,则要写回外存。未修改的无须写入外存
- 页面置换算法
- 最佳置换算法:每次淘汰页面是后面不再使用的页面,或者长时间不再使用。实现困难
- FIFO置换算法:每次淘汰最早进入的页面,可能产生belady异常
- LRU置换算法:最近未使用过的,实现需要专用硬件支持,算法开销大,性能好
- 时钟置换算法(最近未用算法NRU):需要用到访问位和指针,最多扫描2轮
- 改进的时钟置换算法:还考虑修改位,优先淘汰最近未被修改的且未用到的页面,最多四轮