操作系统学习--虚拟存储

虚拟存储

由于程序对于内存的需求越来越大,我们可以采用虚拟存储的方式来增加程序可用的内存量。

内存不够时有三种解决方法:

  1. 覆盖:在进程内部,互相没有调用关系的模块之间可以相互覆盖,只把正在运行的模块放入内存中。
    不足:1.模块间的逻辑关系需要知道 2.从外存读入会增加执行时间
  2. 交换:把正在等待的整个进程移到外存中去,把内存交给需要运行的程序。
    不足:需要有动态重定位的进程才可以使用这种方式
    3.虚拟存储:覆盖和交换发展而来的技术,主要思想是把暂时不用的内存块放到外存
    实现方式:虚拟页式存储,虚拟段式存储

进程运行时具有局部性

  1. 时间局部性:运行两条相同的指令的时间一般是相邻的
  2. 空间局部性:指令需要的数据和相邻指令要用到数据一般存放的空间是相近的
  3. 跳转局部性:例如在一个循环里,每条语句跳转的位置一般是固定的
    局部性原理为虚拟存储提供了理论支持。
    虚拟存储每一行的数据通常是在同一页内的,每一列的数据通常不是,所以按列访问通常比按行访问要更耗时。

虚拟页式存储:
以页为单位进行移出和存入内存,与之前的普通的页式非连续存储的区别就是,页表项多了几个标志位,其中一个标志位标志了该页表是否在内存中,如果不在,就是缺页异常,需要从外存往内存掉。
缺页异常的处理流程
缺页时,从外存中找到响应页,然后往内存中写,如果内存有地方,就可以直接写,没地方的话,需要把不常用的页从内存中移出去,才能把外存中的页写进来。写进移出都需要把驻留位改变掉。
虚拟页式存储的性能,用有效存储访问时间来表示:
有效存储访问时间=(1-缺页率)* 访问内存中的页的时间+缺页率 * 外存访问的时间

置换算法

当发生缺页异常需要把外存中的页调进内存中,但是内存里的空间不够时,需要把内存中不常用的页给置换出去,这就需要置换算法。
置换算法设计目标:尽量减少页面的调入调出次数。
页面锁定:有些页面不能调到外面,这是需要在页表的锁定位锁定它,比如操作系统的关键代码;对相应时间有要求的代码等。
页面置换算法分类:
1.局部页面置换算法:给进程分配的页数时固定的
又可以分为:最优算法,先进先出算法,最近最久未使用算法,时钟算法,最不常用算法。

最优算法:是理想化的一个算法,根据页面在未来的访问时间来选择最晚访问的一个页面。实际中不可能做到,只是作为衡量其他算法的对比的依据。
先进先出算法(FIFO):置换时把最先访问过的页面置换出去。有可能置换出去的是接下来要访问的,效果很不好。
最近最久未使用算法(LRU):置换时统计过去页面访问的情况,把最久没访问的置换出去。通常在每次访问时来做计算,维持一个栈,把刚访问过的放到栈顶,栈中重复的删除掉。置换时从栈底拿。计算量同样很大。对这种算法的简化(用访问次数代替访问时间):

  • 时钟算法:加入一个访问位,访问过的为1,没访问过的为0,缺页时把按时钟方式循环查找最近的未访问的页
  • 最不常用算法(LFU):加入一个计数位,每访问过一次就加一,缺页时找计数值最小的页置换出去
    Belady现象:即程序容易出现缺页,所以我们多给他分配了几页,但缺页的次数反而增加了。FIFO有Belady现象,而LRU没有。

2.全局页面置换算法:给进程分配的页数是可变的,包括
工作集算法,缺页率算法

工作集算法:维护一个一定时间内访问过的链表,叫做工作集,每次访存的时候都把不在这个链表中的页面给剔除出去,缺页时只要把页面加进来就行了。
缺页率算法:把两次访问时间的倒数作为缺页率,当缺页率大于某个值时,直接把缺的页加进来;当缺页率小于某个值时,删掉一定时间间隔外的页,因为这是性能过剩了。

抖动:当内存中的进程数过多,每个进程数分配的页数太少,小于进程需要的工作集,这时CPU就会频繁的产生缺页,性能很差。
所以系统需要在并发程度和缺页率之间做一个平衡,这时负载控制就有用了:
负载控制通过调整进程的数目来控制CPU总体性能,具体做法是,考察平均缺页时间/缺页处理时间,尽量保持这个值为1,这样就是差不多满负荷工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值