前面介绍的存储管理方案要求作业全部装入内存才可运行。但这会出现两种情况:
定义:
局限性的表现:
时间局限性: 程序中的的某条指令一旦执行,不久后会再次执行。
空间局限性: 程序一旦访问某存储单元,不久后会访问其附近的存储单元。
所谓虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。
虚拟存储器的特征:
离散性:作业不装入连续的存储空间,内存分配采用离散分配方
多次性:一个作业被分割,被多次调入内存。
对换性:作业在运行过程中换进、换出内存。
虚拟性:从逻辑上扩充了内存的容量。虚拟存储器的特征

状态位P:记录该页是否在内存。P=1该页在内存;P=0该页不在内存。
访问字段A:记录该页在一段时间内被访问的次数。
修改位M:记录该页在内存期间是否被修改过。M=1该页调入内存后被修改过;M=0该页调入内存后未被修改过。
外存地址:该页在外存的地址
缺页中断: 在指令执行期间产生和处理中断信号(指令执行1次即缺页1次)。一条指令执行期间,可能产生多次缺页中断。

驻留集:
进程正常运行最少需要物理块数:
驻留集管理:
固定分配、局部置换
可变分配、全局置换
可变分配、局部置换
调入策略:
何时调入页面:预调,请调。
从何处调入:进程的所有页面都放在对换区。只将修改过的页面放在对换区,未改的放在文件区。
UNIX系统方式,首次从文件区调入,换出时放在对换区,以后从对换区调入

结论: 先置换最早不再使用或最长时间不使用的页面。理想性的置换算法,目前无法实现。

结论: 先置换最早进入的页面。

结论: 先置换最久未使用的页面。
LRU性能较好,但实现困难!因此可用CLOCK算法。为每页设一访问位,再将内存中的所有页面链接成一循环队列。
CLOCK页面置换算法:
除了考虑页面的使用情况外,还要考虑该页是否被修改过。
由访问位A和修改位M组合成下面四种情况的组合:
<1>A=0,M=0该页既未被访问过、又未被修改过,是最佳淘汰页。
<2>A=0,M=1该页最近未被访问、但已被修改,可以被淘汰。
<3>A=1,M=0最近已被访问,但未被修改,该页有可能再被访问。
<4>A=1,M=1最近已被访问且被修改,该页可能再被访问。
CLOCK算法执行过程:
1>从当前位置扫描循环队列,寻找〈1〉类页面。
2>若1>失败,开始第二轮扫描,寻找<2>类页面,并将所经过的页面的访问位置0。
3>若2>也失败,返回到开始位置,将所有的访问位复0,goto 1>。
即在某段时间间隔内,进程实际要访问的页面的集合。
正确选择驻留集窗口大小:
为进程分配的物理块数达到一定值图中拐点处,缺页率保持在上下限之间。

抖动的产生:
抖动预防方法:

除段号、段长和段始址这些段式系统已有的基本表项之外,增加了以下表项:
动态链接


上一篇:Docker学习
下一篇:【数据库】 数据库中表的基本操作