请求分页管理方式
虚拟内存
定义:具有请求调入和置换功能,从逻辑上对内存容量加以扩充的一种存储器系统
虚拟内存的实现
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
页表机制
- 状态位P
- 访问字段A
- 修改位M
- 外存地址
缺页中断机构
内中断(CPU内部)
故障中断:错误条件引起可以被修复,如缺页中断
陷入中断:有意为之,应用程序想调用内核功能。如系统调用
终止中断:致命错误
外中断(CPU外部)
- I/O中断请求
- 人工干预
地址变换机构
- 请求调页,判断是否在内存
- 可能需要页面置换
- 新增、修改页表项
- 热点表项同步到快表
页面置换算法
最佳置换算法OPT
保障对低缺页率:每次选择淘汰最不可能再次被使用的页面 (无法实现)
最近最少页面置换算法LRU
保障时间和距离上的公平:每次选择淘汰最久最近未使用的页面 (需要硬件支持,开销大)
先进先出置换算法FIFO
保障顺序上的公平:每次选择淘汰最早进入内存的页面(Belady异常,性能差)
时钟置换算法:
保障性能和开销均衡:为页面设置访问位(0/1),并链接形成循环队列,进程访问页面后置为1。发生缺页中断时,表针就扫描页面,位置为0就淘汰,位置为1就设置为0并向把表针向前移动一个位置。
最近未使用页面置换算法NRU:
额外考虑是否修改,保障最少I/O操作:设置访问位和修改位,访问位为优先原则。第一轮找(0,0) 第二轮找(0,1)并修改访问位为0,第三轮找(0,0),第四轮找(0,1)
页面分配策略
驻留集(驻留在主存中页面数)大小
分配空间小,进程数量多,CPU时间利用效率就高
进程在主存中页数少,错页率就高
进程在主存中页数多,错页率并无明显改善
全局页面置换算法:全局页面置换算法则是不考虑进程的个体情况,而是综合考虑整个系统内所有页面的情况。
局部页面置换算法:局部页面置换算法是基于进程本身的页面访问模式的算法
固定分配局部置换:这种策略指定了每个进程在内存中占用固定数量的页面帧。当进程被加载到内存时,它会被分配一定数量的页面帧,并且在其执行期间,这些页面帧不会被其他进程使用。如果进程需要更多的内存空间,它必须等待其他进程释放内存,或者操作系统必须将某个进程的页面替换出去来为其腾出空间。这种策略可以简化内存管理,但可能导致内存浪费或资源不足的问题。
可变分配全局置换:这种策略允许进程的内存分配在运行时动态变化,而不是固定分配一定数量的页面帧。当进程需要更多内存时,操作系统可以为其分配更多页面帧,反之亦然。全局页面置换意味着页面替换决策基于整个系统的页面使用情况,不仅仅限于某个进程。这种策略可以更好地利用内存资源,但需要更复杂的管理算法来进行页面替换决策,以最大程度地提高系统性能。
可变分配局部置换:这种策略结合了前两种策略的特点。进程可以在运行时动态分配或释放内存,但页面替换决策仍然是基于进程本身的页面访问模式。这意味着每个进程可以根据需要调整内存分配,但页面替换决策仍然以进程为单位进行,以优化局部性。这种策略在某些情况下可以平衡内存使用效率和性能。
调入页面的时机
预调页策略
- 一次性调入若干相邻页面
- 多用于进程首次调入
请求调页
- 运行时发现缺页时调入
- I/O开销较大
从何处调页
外存分对换区和文件区,对换区可以保证地址是连续的,因此访问更快
系统拥有足够对换空间:
核心的放内存,辅助的放对换区
系统缺少足够对换空间:
不需要修改的一些文件比如函数计算公式不含数据,放入文件区。从内存调出时,不需要重新写入,直接覆盖就行,减少I/O操作。
优先把经常需要修改的文件放对换区,调出时的回写效率更高。
UNIX方式:
所有跟进程有关的文件,都放入文件区。 要换出都放入对换区