[操作系统] 存储管理(2)

传统存储管理方式的特征

  • 一次性:作业必须一次性全部装入内存,方能开始执行。这会导致两种情况发生,当作业很大,不能全部被装入内存,该作业无法运行。当大量作业要求运行时,由于内存不足不足以容纳所有作业,只能少数作业执行,导致多道程序度下降。
  • 驻留性:作业背装入内存后,就会一直驻留在内存中,任何部分都不会被换出,直到作业执行结束。

为了解决上述的问题,主要是解决内存不够的问题,现代操作系统采用了虚拟内存的方式。

虚拟内存的原理-----局部性原理

  • 时间局部性:程序中的某条指令一旦执行,不久以后该指令可能再次执行。
  • 空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问。

啥叫虚拟内存

基于局部性原理,在程序装入阶段,可以将程序的一部分装入内存,其余部分留在外存,就可以让程序启动起来了。在程序执行过程中,当访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂不使用的内存换到外存上,从而腾出空间存放要调入内存的信息。

虚拟内存实现方式:请求分页存储管理

请求分页还是分页,为了支持虚拟存储器丰富了页表,增加了请求调页功能和页面置换功能。还需要提供硬件支持如页表机制、缺页中断机构和地址变换机构。

传统的页表只有两项,分别是页号和物理块号,支持虚拟存储器之后,页表变成下面的样子。

页号物理块号状态为P访问字段A修改位M外存地址
  • 状态位P:用于指示该页是否调入内存
  • 访问字段A:记录本页在一段时间内被访问的次数
  • 修改位M:标识该页调入内存后是否被修改过
  • 外存地址:用于指出该页在外存的地址

页面置换算法

进程运行时,若其访问的页面不在内存而需要从外存调入,但是内存已经没有空余空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区。选择调出页面的算法就称之为页面置换算法。常用的置换算法有以下几种:

  • 最佳置换算法:被淘汰页面是以后永不使用的,或者再最长时间内不再被访问的。(只能评估用,实际没法做到)
  • 先进先出算法:优先淘汰最早进入内存的页面。
  • 最近最久未使用算法:选择最近最长时间未访问过的页面。
  • Clock算法:最近未用算法。

注意:Belady异常是指所分配的物理块增大但是缺页故障树不减反增的现象。翻译成人话就是内存空间越大,缺页率竟然上去了。堆栈类算法不会出现这种异常,FIFO会出现,因为FIFO是基于队列的。

抖动

在页面置换过程中最糟糕的情况就是,刚刚换出的页面马上又要换到主存,刚刚换入的马上要换出来,这种就叫抖动

工作集原理

工作集(驻留集)是指在某段时间间隔内,进程要访问的页面集合。经常被使用的页面需要在工作集中,长期不被使用的页要冲工作集中舍去,为了防止系统出现抖动现象,需要选择合适的工作集大小。

工作集模型的原理:让操作系统跟踪每个进程的工作集,并为进程分配大于其工作集的物理块。如果还有空间物理块,则可以再调一个进程以增加多道程序数。如果所有的工作集之和增加以至于超过了可用物理块的总数,那么操作系统会暂停一个进程,将其页面调出并且将其物理块分配给其他进程,防止出现抖动现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值