当前位置: 代码迷 >> 综合 >> 操作系统—虚拟内存
  详细解决方案

操作系统—虚拟内存

热度:59   发布时间:2023-11-29 16:42:28.0

高速缓冲技术的思想:把近期会频繁访问到的数据放在更高速的储存器当中,暂时用不到的数据放在更低速的存储器当中

虚拟技术中,访问的信息不存在内存时,由操作系统负责将所需信息从内存调入外存;若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出外存

计算机中储存器的结构层次:

外存(磁盘,磁带),内存,高速缓存,寄存器

————> 容量小,速度快,成本高

基于局部性原理,我们可以把程序中很快用到的部分装入内存;暂时用不到的部分留在外存,就可以开始让程序执行了,若空间不够,操作系统负责将暂时用不到的信息换出外存。

虚拟内存的最大容量:由计算机的地址机构(CPU的寻址范围)确定的

虚拟内存的实际容量 = min(内存与外存容量之和,CPU的寻址范围)

虚拟内存的主要特征:

多次性:无需在作业运行时一次性装入内存,而是运行被分为多次调入内存。对换性:在作业运行时无需一直常驻内存,而是允许在作业运行的过程中,将作业调入,换出虚拟性从逻辑上扩充了容量,使用户看到的内存容量,远大于实际容量

虚拟内存的实现组要建立在离散分配的存储管理

请求分页管理方式

请求分页存储管理与基本分页存储管理的主要区别:

在程序的执行过程中,当访问得到信息不在内存中时,由操作系统负责将所需信息从外存调入内存(请求调页功能),然后继续执行程序,若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出外存(页面置换功能)

页表机制

请求分页管理方式的(请求)页表中增加的四个字段:

1.状态位:记录是否已调入内存
2.访问字段:记录最近被访问过几次或者记录上次访问的时间
3.修改位:页面调入内存后是否被修改过
4.外存地址:页面在外存中存放的位置

缺页中断机构

在请求分页系统中,每当要访问的页面不在内存中时,就会产生一个缺页中断,然后由操作系统的缺页中断程序处理中断

此时缺页进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。

如果内存中由空闲块,则将进程分配给空闲块,将所缺页面装入该块,并修改相应页表项;如果内存中没有空闲,则由置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要写回外存,未修改过的页面不用写回外存

缺页中断属于内中断,一条指令执行期间可能产生多次缺页中断

地址变换机构

请求分页管理方式增加的地址变换步骤:

1.修改访问位和修改位(执行写指令才会修改修改位,读指令则不会修改)
2.产生缺页中断机制时保留CPU现场
3.检查内存是否已满并执行置换算法
4.检查页面是否被修改并决定是否写回外存(需要启动I/O硬件)

注意:如果一张页表被调出外存。那么快表中其对应的表项也会删除

发生缺页时地址变换的步骤:查快表(未命中)——查慢表(发现未调入内存)——调页(调入的页面对应的表项会直接加入快表)——查快表(命中)——访问目标单元内存

页面置换算法

页面置换算法应该追求更少的缺页率(换入换出会造成大量I/O开销);

缺页中断未必造成页面置换,只有缺页中断发生且内存块已满时才会发生页面置换

最佳置换算法

每次选择淘汰的页面是以后用不使用的,或者最长时间内不会被访问的页面,以保证最低的缺页率。

实际操作中,操作系统无法提前预判页面访问序列,因此,最佳置换算法是无法实现的

先进先出置换算法

每次选择淘汰的页面是最早进入内存的页面,调入内存的页面按先后顺序排成一个序列,需要换出页面时淘汰队头的页面即可。队列的最大长度取决于系统为进程分配了多少个内存块

Belady异常——当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。只有先进先出算法会产生这种异常,因为这种算法与进程实际运行时的规律不适应

最近最久未使用置换算法

每次淘汰的页面是最近最久未使用的页面

实现方法:用访问字段记录该页面自上次被访问以来所经历的时间t,当需要淘汰一个页面时,选择t值最大,即最久未使用的页面。这种算法需要硬件支持,虽然性能好,但实现困难,开销大。

时钟置换算法

性能和开销较为均衡的算法,又称clock算法或最近未用算法

简单时钟算法的实现:为每个页面设置一个访问位,将内存中的页面都通过链接指针链接成一个循环队列,当某页面被访问时,访问位置为1,需要淘汰页面时,只需要检查页的访问位,换出访问位位0的页面,如果是1则将它置为0暂不换出。如果第一次扫描所有页面都为1,则将它们都置为0重新扫描9

注意,指针的指向指向上次发生置换页面的后一位,不发生置换时顺序执行,只要发生置换就会从指针指向的位置开始指向

改进型的时钟置换算法

在简单时钟算法的基础上有限淘汰没有修改过的页面,避免I/O操作

会增加一个修改位
算法规则:用(访问位,修改位)表示状态

第一轮:尝试扫描到第一个(0,0)的帧用于替换
第二轮:若第一轮失败,查找第一个(0,1)的帧用于替换,扫描过的帧访问位全部归0
第三轮:若第二轮失败,尝试扫描到第一个(0,0)的帧用于替换
第四轮:若第三轮失败,查找第一个(0,1)的帧用于替换

最多进行四轮扫描必然可以找到

页面分配策略

驻留集:请求分页储存管理中给进程分配的物理块的集合;虚拟内存存储技术中,驻留集大小一般小于进程的总大小

驻留集太小会导致频繁缺页;驻留集太高,会导致并发度下降,资源利用率降低

固定分配:操作系统为每个进程分配一组固定数目的物理块,驻留集大小不变;

可变分配:先为每个进程分配一定数目的物理块,在运行期间,根据情况做适当的增加或减少,驻留集大小可变。

局部置换:缺页时只选择进程自己的物理块进行置换

全局置换,可以将操作系统保留的物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再把它分配给缺页进程

何时调入页面

1.预调页策略:主要用于进程的首次调入,一次根据局部性原理调入若干个页面。

2.请求调页策略:进程在运行期间发现缺页时才将所缺页面调入内存

何处调用页面

从对换区调入的读写速度更快,采用连续分配方式;从文件区调入读写速度更慢,采用连续分配方式

如果系统拥有足够的对换区,那么调入调出都是在内存与对换区之间进行来保证调入调出速度

如果系统缺少足够的对换区,那么凡是不会被修改的数据都从文件区中直接调入,对于可能修改的部分,换出时需写回磁盘对换区。

UNIX方式:运行之前(第一次调用)进程有关的数据放在文件区,若使用过的页面需被换出,则写回对换区,下次需从对换区调入

抖动(颠簸)现象:刚刚被换出的页面马上又要换入内存,刚刚换入的页面又马上换出外存,这种现象产生的主要原因是进程频繁访问页面数目高于可用的物理块数(分配给进程的物理块不足

工作集:指在某段时间间隔里,进程实际访问页面的集合,操作系统会根据窗口尺寸来算出工作集

一般来说,驻留集不能小于工作集,否则会造成频繁缺页(抖动)

  相关解决方案