操作系统——虚拟内存

传统存储管理方式的特征及缺点:

1、一次性,作业必须一次性全部装入内存后才能开始运行,导致大作业无法运行,多道程序并发度下降。
2、驻留性,一旦作业装入内存,就会一直驻留在内存中

高速缓存技术:

将近期会频繁访问到的数据放到更告诉的存储器中,暂时不用的数据放在更低速存储器中。

虚拟内存

将程序按照使用频率进行分类,使用频率高的放在内存中,使用频率低的放在外存中,使用的时候再去调用。

虚拟内存的最大容量:由计算机的地址结构(CPU寻址范围)确定的。
虚拟内存的实际容量:min(CPU寻址范围,内存和外存容量之和)

例题——虚拟内存的最大容量和实际容量

在这里插入图片描述

虚拟内存的三个主要特征:

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

虚拟内存的实现:

1、请求分页存储管理
2、请求分段存储管理
3、请求段页式存储管理


请求分页存储管理

(请求)页表:
1、页号(透明的)
2、内存块号
3、状态位【新增】:是否已调入内存。
4、访问字段【新增】:记录最近被访问过几次,或记录上5、次访问的时间,供置换算法选择换出页面时参考。
6、修改位【新增】:页面调入内存后是否被修改过。
7、外存地址【新增】:页面在外存中的存放位置。
在这里插入图片描述
缺页中断属于内中断

在这里插入图片描述
①只有在读操作时才会修改访问位和修改位,否则不会。
②缺页中断也需要保存CPU现场
③页面置换算法
④换入换出都需要重新启动I/O操作,太频繁会有很大的开销
⑤修改完页表后,也需要将表项复制到快表中

页面置换算法

1、最佳置换算法(OPT)

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

例题

在这里插入图片描述
缺页次数:9次;
页面置换:6次;
缺页率=缺页次数/访问的页面数=9/20
在这里插入图片描述

无法实现,只存在于理论


2、先进先出置换算法(FIFO)

每次淘汰最早进入的页面

例题

在这里插入图片描述
缺页次数:9次;
置换次数:6次;
缺页率=9/12
在这里插入图片描述

Belady异常:当为进程分配的物理块数量增大时,缺页次数不减反增的异常现象。

只有先进先出算法会产生Belady异常,虽然实现简单,但是先进来的页面可能被经常访问,因此算法性能差


3、最近最久未使用置换算法(LRU)

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

例题

在这里插入图片描述
缺页次数:6次;
页面置换次数:2次;
缺页率=6/20
在这里插入图片描述

在实现过程中,需要专门的硬件支持,虽然算法性能好,但是实现困难,开销大


4、时钟置换算法(CLOCK)

又称最近未用算法(NRU),是一种性能和开销较为均衡的算法。
为每一个页面设置一个访问位,当需要页面置换时,需要扫描所有的页面,若扫描到为1,则置为0,若扫描到为0,则换出该页面。如果所有的页面都为1,则需要再次扫描,遇到0的,将其换出。因此,该算法最多需要扫描两次。

例题

在这里插入图片描述
解:
1:1(1)
13:1(1)-3(1)
134:1(1)-3(1)-4(1)
1342:1(1)-3(1)-4(1)-2(1)
13425:1(1)-3(1)-4(1)-2(1)-5(1)
134256:
从队首1开始扫描
1(0)-3(0)-4(0)-2(0)-5(0)【一轮扫描,没有找到可以替换的页面】
6(1)-3(0)-4(0)-2(0)-5(0)【二轮扫描,将1号页面替换出,此时扫描指针在3号所在的位置,下次扫描将此这里开始】
1342563:
6(1)-3(1)-4(0)-2(0)-5(0)【3号被访问,访问指针到3号所在的位置】
13425634:
6(1)-3(1)-4(1)-2(0)-5(0)【4号被访问,访问指针到4号所在的位置】
134256347:
6(1)-3(0)-4(0)-7(1)-5(0)【扫描指针在3号所在的位置,将3、4号的1都置成0,2号原先为0,因此被换出,此时扫描指针在5号所在的位置,下次扫描将从这里开始】


5、改进型的时钟置换算法

在其他条件相同的情况下,优先淘汰没有修改过的页面。就是有多个为0的页面时,先淘汰没有被修改过的页面。
增加一个修改位,0表示没有被修改,1表示被修改过。用(访问位,修改位)的形式表示,(1,1)表示一个页面近期被访问过,修改过。
第一轮:从当前位置开始扫描到第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
第二轮:若第一轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于替换。本轮将所有扫描过的帧访问位设为0
第三轮:若第二轮扫描失败,则重新扫描,查找第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
第四轮:若第三轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于替换。
由于第二轮已将所有帧的访问位设为0,因此经过第三轮、第四轮扫描一定会有一个帧被选中,因此改进型CLOCK置换算法选择一个淘汰页面最多会进行四轮扫描


在这里插入图片描述


驻留集:

请求分页存储管理中给进程分配的物理块的集合。
在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。
若驻留集太小,会导致缺页频繁,系统要花大量的时间来处理缺页,实际用于进程推进的时间很少;
驻留集太大,又会导致多道程序并发度下降,资源利用率降低。所以应该选择一个合适的驻留集大小。

固定分配: 操作系统为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。即,驻留集大小不变
可变分配: 先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少。即,驻留集大小可变
局部置换: 发生缺页时只能选进程自己的物理块进行置换。
全局置换: 可以将操作系统保留的空闲物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再分配给缺页进程。

固定分配局部置换: 系统为每个进程分配一定数量的物理块,在整个运行期间都不改变。若进程在运行中发生缺页,则只能从该进程在内存中的页面中选出一页换出,然后再调入需要的页面。
缺点是:很难在刚开始就确定应为每个进程分配多少个物理块才算合理。(采用这种策略的系统可
以根据进程大小、优先级、或是根据程序员给出的参数来确定为一个进程分配的内存块数)

可变分配全局置换: 刚开始会为每个进程分配一定数量的物理块。操作系统会保持一个空闲物理块队列。当某进程发生缺页时,从空闲物理块中取出一块分配给该进程;若已无空闲物理块,则可选择一个未锁定的页面换出外存,再将该物理块分配给缺页的进程。
缺点:采用这种策略时,只要某进程发生缺页,都将获得新的物理块,仅当空闲物理块用完时,系统才选择一个未锁定的页面调出。被选择调出的页可能是系统中任何一个进程中的页,因此这个被选中的进程拥有的物理块会减少,缺页率会增加。
可变分配局部置换: 刚开始会为每个进程分配一定数量的物理块。当某进程发生缺页时,只允许从该进程自己的物理块中选出一个进行换出外存。如果进程在运行中频繁地缺页,系统会为该进程多分配几个物理块,直至该进程缺页率趋势适当程度;反之,如果进程在运行中缺页率特别低,则可适当减少分配给该进程的物理块。

预调页策略: 根据局部性原理,一次调入若干个相邻的页面可能比一次调入一个页面更高效。但如果提前调入的页面中大多数都没被访问过,则又是低效的。因此可以预测不久之后可能访问到的页面,将它们预先调入内存,但目前预测成功率只有50%左右。故这种策略主要用于进程的首次调入(在运行前调入),由程序员指出应该先调入哪些部分。

请求调页策略: 进程在运行期间发现缺页时才将所缺页面调入内存。由这种策略调入的页面一定会被访问到,但由于每次只能调入一页,而每次调页都要磁盘I/O操作,因此I/O开销较大。

抖动(颠簸)现象

刚刚换出的页面马上又要换入内存,刚刚换入内存的页面,马上又要换出内存。
产生原因是:进程频繁访问的页面数目高于可用的物理块数(分配给进程的物理块不够)

工作集

在某段时间间隔内,进程实际访问页面的集合

例题

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值