物理内存空间不够用时,需要使用覆盖、交换等内存扩容技术。
覆盖(overlay):应用程序手动把需要的指令和数据保存在内存中
交换(swapping):操作系统自动把暂时不能执行的程序保存到外存中
覆盖:进程地址空间根据调用结构将进行分段;物理地址空间划分常驻区和若干个覆盖区。常用的必要部分代码和数据放在常驻区,其他的部分放在其他程序模块中,需要时装入内存。不存在调用关系的模块可共享内存并相互覆盖。
不足:增加编程困难增加编程困难,增加了编程的复杂度;增加执行时间,需要从外存装入覆盖模块
进程模块按照调用结构分为三组,A
单独为一组,B、C
为一组,D、E、F
为一组。物理地址空间按照各组最大值划分,常驻区为 20K
、覆盖区为 50K
、覆盖区为 40K
。进程开始运行,A
调入常驻区,B、D
分别调入覆盖区和覆盖区;B、D
运行完毕,调入C
到覆盖区,E
到覆盖区;最后调入F
到覆盖区输出结果。
交换:整个进程的逻辑地址空间为单位,将暂时不能运行的进程保存到外存,读入外存中需要运行的进程。
内存虚拟化是将部分需要执行的内存块装入内存,指令执行产生新的内存块需求时,CPU通知操作系统将暂时不用的内存块调到外存,并将需要的内存块调入内存。从而, 提供给用户的虚拟内存可大于实际的物理内存。
内存虚拟化的实质是交换技术,但交换是以整个进程的逻辑地址空间为单位,而内存虚拟化是以部分内存块为单位,实现的基础是局部性原理。
局部性原理使得装入内存的内存块可以得到充分运行,避免频繁地交换内存块,降低运行效率。局部性原理包括时间局部性和空间局部性:
- 时间局部性(temporal locality):当一个数据被访问后,它很有可能会在不久的将来被再次访问,比如循环代码中的数据或指令本身。
- 空间局部性(spatial locality):当程序访问地址为x的数据时,很有可能会紧接着访问x周围的数据,比如遍历数组或指令的顺序执行。
内存虚拟化方式根据逻辑地址空间管理方式可分为:虚拟页式存储、虚拟段式存储和虚拟段页式存储,此处仅以虚拟页式存储为例。页式存储管理的硬件支持包括内存、页表、缺页中断及地址转换机构,而虚拟页式存储管理的需要增加 请求调页机制 和 页面置换策略
请求调页机制需要参考页表控制位并使用缺页中断请求页面。
页表控制位:
页式存储管理只使用页表项的虚页号、物理帧号以及存在位( present,P ),页面的存在位为0时,返回缺页错误,进程运行结束;虚拟页式存储管理使用更多的控制位,检查页面状况,指导操作系统调入页面,从而进程能够继续执行。
缺页中断:
局部页面置换:置换页面的选择范围仅限于当前进程占用的物理页面内,分配的物理页面数量可以固定也可以变化。
例题:
在一个请求分页存储管理系统中,一个作业的页面走向为 4,3,2,1,4,3,5,4,3,2,1,5,当分配给进程的物理块是3时,试计算分别采用OPT、FIFO和LRU的缺页率(假设开始执行时主存中没有页面),并比较结果。
OPT:
访问 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
帧号1 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 2 | 2 | 2 |
帧号2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 1 | 1 | |
帧号3 | 2 | 1 | 1 | 1 | 5 | 5 | 5 | 5 | 5 | 5 | ||
缺页 | √ | √ | √ | √ | √ | √ | √ |
缺页率:7/12
FIFO :
访问 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
帧号1 | 4 | 4 | 4 | 1 | 1 | 1 | 5 | 5 | 5 | 5 | 5 | 5 |
帧号2 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 2 | 2 | 2 | |
帧号3 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 1 | 1 | ||
缺页 | √ | √ | √ | √ | √ | √ | √ | √ | √ |
缺页率:9/12
LRU:
访问 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
帧号1 | 4 | 4 | 4 | 1 | 1 | 1 | 5 | 5 | 5 | 2 | 2 | 2 |
帧号2 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 4 | 1 | 1 | |
帧号3 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 5 | ||
缺页 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
缺页率:10/12
Bleady现象
Bleady现象是指采用FIFO算法时,可能出现分配的物理页面数增加,缺页次数反而升高的异常现象。
访问 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
帧号1 | 4 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 | 5 | 1 | 1 |
帧号2 | 3 | 3 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 5 | |
帧号3 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | ||
帧号4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | ||
缺页 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
缺页率:10/12
改进型CLOCK算法利用页表项的访问位和修改位:
全局页面置换:置换页面的选择范围是所有可换出的物理页面,分配每个进程的物理页面数量是可变化的。
“抖动” 现象
局部置换算法只适用于单个进程,而系统只运行单个进程时,CPU利用率很低。提高并发进程数,可提高CPU利用率;但当进程对页面的需求超过物理页面数时,缺页率上升,系统需要频繁地置换页面,从而降低系统性能,该现象称为 抖动。
消除 “抖动” 现象可从进场的页面需求和物理页面数量两个角度考虑。从下图可见,随着物理页面数量的增加,缺页率降低,意味着“抖动” 现象减轻。
但系统不可能无限度地增加物理页面数量,且缺页率降低速率是下降的,所以需要平衡每个进场的页面需求和进场获得的物理页面数量,即为进场提供与活跃页面相等的物理页面数。
工作集
页面访问具有时间局部性,所以可以根据过去一段时间的页面访问情况推测未来需要访问的页面。以当前时间 为界,向前回溯一个定长的页面访问时间窗口 ,该段时间访问逻辑页面的集合称为 工作集,表示为二元函数 。
工作集大小和内容每时每刻在变动,但工作集的大小经过短暂快速扩张和收缩后会趋向于稳定。
本文地址:https://blog.csdn.net/K_Xin/article/details/107095217
如对本文有疑问, 点击进行留言回复!!
中国科大校友文库 机器学习理论及应用(当代科学技术基础理论与前
网友评论