传统存储的问题
一次性:一次性装入作业才能运行
驻留性:不是所有部分都需要长时间存放在内存中
定义和特征
将要用的部分载入内存,不用的部分调出外存,逻辑上扩大内存
虚拟内存的最大容量为计算机的寻址范围决定
实际容量则为内外存之和和寻址范围其中的最小值
多次性:无需在作业时一次性装入,而是多次调入内存
对换性:作业运行时无需常驻内存,允许换入换出
虚拟性:逻辑上扩充内存容量
需要的信息不在内存时,调入内存
内存不够时,将暂时不用的调出内存
实现
请求分页管理方式
程序执行过程中,当访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序,空间不够时就换出暂时用不到的信息,操作系统提供请求调页和页面置换的功能
页表机制
基本分页存储的页表 是隐含页号 页表项为内存块号
请求分页存储的页表 是隐含页号 页表项为内存块号、状态号、访问字段、修改位、外存地址
因为基本分页只需要记录对应的页面的内存块号,用于获取对应内存地址
而请求分页就需要状态号来记录页面是否被调入内存,访问字段用来记录最近被访问几次或者上次被访问时间(局限性原理)、修改位来记录是否被修改过(检查是否要重写回到外存)、外存地址则方便重写
缺页中断
当要访问的页面不在内存时,产生缺页中断,由缺页中断处理程序处理中断
缺页进程阻塞,进入阻塞队列,调页完成再唤醒,放回就绪队列
如果内存中有空闲块,就为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项
若内存中没有空闲块,则有页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存,否则不用
流程为:当缺0号页,通过页面置换算法来替换2号页,而2号页被替换过,就将其数据写回对应的外存地址,并空出内存块,更新页表项
缺页中断属于内中断中的故障,故障是错误条件引起的,可能会被修复
内中断还有陷阱和终止,分别是有意为之的,如系统调用和导致终止程序的错误
地址变换机构
流程:请求调页,查询快表,未命中则查慢表来看所需表项是否在内存,在则写入快表,更新访问位和修改位
若不在内存则引发缺页中断,在外存中查询缺页,将缺页放回内存
若此时内存满了,需要换页出去,此时检查此页是否被修改,若修改,还需要额外将其重写回外存
页面调入内存后,修改慢表,表项也更新到快表
页面置换算法
页面换入换出开销大,好的置换算法追求更少的缺页率
最佳置换OPT
每次选择淘汰的页面都是永不使用或者最长时间内不再被访问的页面
这样保证了最低的缺页率,但无法实现
先进先出置换FIFO
每次选择淘汰的页面是最早进入内存的页面,但会产生Belady异常,即分配的内存块增多,但缺页次数不减反增,不符合局部性原理,算法性能差
最近最久未使用置换LRU
每次淘汰都选择最近最久未使用的页面,前面请求分页表内就有访问字段,可用于记录上一次被访问的时间t,需要淘汰时选择t值最小的即可
性能好,但需要专门的硬件支持,实现困难,开销大
时钟置换CLOCK
将内存中的页面通过链接指针链接成一个循环队列,当页面被访问时,访问位设为1,当需要换出时,若页面的访问位为0,则换出,若为1则置为0,不换出
当一轮全为1,无法换出任一页面时,进行第二轮
改进型的时钟置换
和前面一样,构造循坏队列
但增加侧重点:优先未访问未修改的帧,其次就是未访问但修改过的,再者访问但未修改的,最后访问且修改过的
第一轮先不修改标志位,查找未访问且未修改的帧
第二轮则是查找未访问但修改过的帧,且将扫描过的帧的访问位置为0,
第三轮和第四轮则是对应重复第一轮和第二轮的操作,只是都不用修改任何标志位
当需要第三轮和第四轮时,说明内存中的帧都是已经被访问过的,就看是否被修改过
页面分配策略
驻留集
在请求分页存储管理中,给进程分配的物理块的集合
由虚拟存储可知,驻留集大小一般小于进程大小,因此缺页发生率与驻留集的大小相关,驻留集太小会导致频繁发生缺页
页面分配、置换策略
固定分配
操作系统为每个进程分配一组固定数目的物理块,运行期间不改变,即驻留集大小不变
可变分配
先为其分配一定数目的物理块,运行时适当增加或减少,驻留集大小可变
局部置换
发生缺页时只选择自己的物理块进行置换
全局置换
缺页进程可使用空闲物理块,或者将别的进程持有的物理块置换到外存,再得到分配
系统会锁定一些页面,这些不能被换出内存
固定布局局部置换
得到的物理块数量一定,缺页时只能换出自己的页面,初始分配的数量可以根据进程优先级、大小而定
可变分配全局置换
系统维护空闲物理块队列,只要发生缺页,就可得到新物理块,只要当空闲物理块用完时,才会选择未锁定的页面进行换出
可变分配局部置换
发生缺页时只能换出自己的页面,当缺页率增多时,分配多点物理块,缺页率减少时,分配少点物理块
调页时机
预调页策略
由局部性策略,一次调入若干个相邻页面比一次调入一个页面更高效,主要用于进程首次调入
请求调页策略
进程运行时发生缺页才调页,一次调一页
调页来源
对换区:高速,在进程运行前,从文件区复制数据到对换区,持有进程相关数据
对换区空间不足时:文件区中读取不用被修改的文件,可能被修改的则写入对换区
UNIX:未使用裹得页面放在文件去,使用过的放入对换区
抖动现象
刚被调出的页面,又要被调入内存,频繁切换,因为物理块太少
工作集
驻留集:请求分页存储管理中进程得到分配的内存块的集合
工作集:在某段时间间隔内,进程实际访问页面的集合
通过记录工作集变化来确定进程需要多少个物理块最适合,也可用于换出页面的选择