操作系统笔记二

虚拟内存

在这里插入图片描述
把不常用的数据放到硬盘上去,常用的代码或者数据才加载到内存,来实现虚拟的大内存的感觉
在这里插入图片描述

覆盖技术

目标:在较小内存运行较大程序。
原理:把程序按自身逻辑结构划分若干功能上相对独立的程序模块。不回同时执行的模块共享同一块内存区域,按时间先后运行。常用功能的代码和数据常驻内存(决定哪些模块导入导出内存)。不常用功能在其他程序模块实现,放在外存,使用时装入内存
在这里插入图片描述
缺点:
需要程序员把程序划分若干小功能模块,并确定模块间覆盖关系。增加编程复杂度。
从外存转入内存,实际上是时间换空间

交换技术

目标:多道程序在内存中,让正在运行的程序或需要运行的程序获取更大内存资源
方法:让OS管理正在运行的程序,将暂时不运行的程序送到外存。OS把一个进程的整个地址空间的内容保存到外存,将外存某个进程的地址空间读入内存。换入换出内容的大小为整个程序的地址空间

问题:
1.交换时机的确定:只有当内存不够或有不够的危险时换出。因为交换的开销很大
2.交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝。必须能对这些内存映像直接存取
3.程序换入时的重定位:换出后再换入内存位置不一定一样。最好采用动态地址映射的方式

覆盖是发生在一个程序里面,它通过那些没有调用关系的函数和模块共享一个内存区域。代价是程序员手动去指定他们之间什么关系
交换是发生在程序之间的,粒度是当个程序。是操作系统内部完成的,不需要程序员参与,但是开销大

虚存技术

目标:覆盖增加了程序员的负担,交换粒度太大增加了处理器的开销。希望可以像覆盖,不是把程序的所有内容都放在内存中,由OS自动完成,无须程序员干涉。可以像交换一样,实现进程在内存外存间交换,但只对进程的部分内容进行交换

要求:
程序的局部性原理,指程序在执行过程的一个较短时期,所执行指令地址和指令操作数地址,分别局限于一定区域
时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问集中在一个较短时期
空间局部性:当前指令和邻近的几条指令,当前访问数据和邻近的几个数据集中在一个较小区域内
在这里插入图片描述
在这里插入图片描述

在页式或段式内存管理基础上实现,只需将当前需要执行的部分页或段装入到内存,就可程序开始执行。
执行过程中,如执行指令或数据访问出现缺页或缺段,由处理器通知OS调入相应页或段到内存,继续执行。并且,OS将内存中暂时不用的页或段调出保存在外存。

特征
空间很大,把物理内存于外存相结合
部分交换:交换粒度更小,效率更高
不连续性:物理内存分配不连续,虚拟内存使用也是不连续的。使用的过程中可能出现缺页缺段,出现访问异常,但OS会自动帮助交换数据,处理异常

页式管理

在这里插入图片描述
页表项里除了有页帧外,还有几个bit,其中一个bit表示存在或不存在。不存在则出现访问异常

思路:当一个用户程序要调入内存运行,只装入部分页面,就可启动程序。在运行过程中,如果运行程序或访问数据不在内存,向OS发出缺页中断请求,OS处理中断时,将外存中相应页面调入内存
在这里插入图片描述
CPU执行一条指令,load一个内存地址,那如果这个内存地址没有映射关系,页表中驻留位为0,这时候就产生缺页异常
缺页中断的处理:

  1. 内存有空闲物理页,则分配一物理页帧,转4,否则转2
  2. 采用某种页面置换算法,选择一个将被替换的物理页帧f,对应的逻辑页q如果在内存期间被修改过,则写回外存
  3. 对q对应页表项进行修改,驻留位设0
  4. 将需访问的地址对应所在硬盘中的数据,以页为单位,从硬盘读到内存中转入物理页f
  5. 修改p对应的页表项内容,驻留位设1,把物理帧号设为f
  6. 重新运行被中断的指令

在这里插入图片描述
四类:程序(指令),数据程序,库,动态产生的数据。形成了后备存储或者叫二级存储
在这里插入图片描述
上图公式,如果p足够下,就可以使得平均访问时间j接近于10ns,如果p非常大,会导致整个虚存管理效率会很差
保证程序具有局部性特点,意味着产生缺页次数会很少

页面置换算法

目标:尽量减少缺页中断次数
页面锁定:用于描述必须常驻内存的OS的关键部分或时间关键的应用进程。通过在页表中添加锁定标志位实现
在这里插入图片描述

最优页面置换算法

缺页中断时,遍历内存当中每个逻辑页面,计算其下次访问前,需等待多长时间。选择等待最久的页面进行置换
实际无法实现,OS无法知道每个页面等久才会被访问。可作为其他算法性能评价的依据
在这里插入图片描述

先进先出算法FIFO

选择内存中驻留时间最长的页面淘汰。OS维护一个链表,记录所有位于内存当中的逻辑页面,链表首页驻留时间最长,链尾最短
性能较差,调出的可能是常访问的页面,并且有belady现象(给它的物理页帧越多,反而产生的缺页次数越多)。很少单独使用
在这里插入图片描述

最近最久未使用算法LRU

选择最久未使用的页面淘汰
是对最优页面置换算法的一个近似。依据是程序的局部性原理。在一小段时间内如果某些页面被频繁访问,那么未来一小段时间,大概率会再次被频繁访问。
在这里插入图片描述
需要记录页面使用时间的顺序。开销较大。
方法1,维护一个页面链表,刚使用的过的页面作为首节点,最久未使用的作为尾节点。每次访问内存时,找到相应页,从链表摘出,移动到链表头部,缺页时,淘汰链表末尾页面
方法2,设置一个页面活动栈,访问某页时,将页号压入栈顶。考察栈内有无相同页号,有则抽出,需要淘汰页面时,选择栈底页面
在这里插入图片描述

时钟页面置换算法clock

LRU的近似,对FIFO的改进
需要用到页表项的访问位,当一个页面被装入内存时,把改为初始化为0,如果这个页面被访问(读/写),则位置设为1.
把页面组织成环形链表(钟表面),把指针指向最老的页面(最先进来)。
若缺页,判断指针所指最老页面,若访问位为0,直接淘汰;若为1,则设为0.指针下移一格。直到找到被淘汰的页面,指针移动到其下一格
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
增加脏位,记录写操作
在这里插入图片描述

最不常用算法LFU

缺页中断时,选择访问次数最少的页面淘汰
对每页设置一个访问计数器,每当一个页被访问时,访问计数器加1
增加计数器是成本,遍历访问也增加开销
和LRU的区别,LRU是访问时间,时间越短越好,LFU是访问次数,次数越

Belady现象:采用FIFO算法时,有时出现物理页数增加,缺页率反而提高的现象
原因:置换特征与进程访问内存的动态特征是矛盾的,与置换算法目标不一致(替换较少使用的页面)。替换出去的页面不一定是不会访问的

在这里插入图片描述
局部页面算法
假定物理页帧是固定的,如果只有一个程序,可以把所有物理页帧给它,但多个程序希望在程序运行的不同时期调整不同的物理页帧。因此需要全局页面算法

前面的页面置换算法的前提是程序具有局部性原理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
期望是工作集尽量属于常驻集

工作集页置换算法

工作集代表的是有一个工作集的窗口,窗口有一个时间,当前的时间以及有一个size, size代表过去一个时间的大小,形成工作集窗口,窗口里面的页呢,代表当前这段时间内被访问的页,如果某个页要替换的时候,替换那些不在工作集里面的页。
随着程序的执行,工作集窗口在挪动,平移过程中,如果某个页,不在这个时间出窗口之内,这个页也会被丢掉,并不是说等着缺页的时候才开始丢页
在这里插入图片描述
对每一访问的页计时大小为4个时间单位,随着时间的推移超过4个时间没被访问就被置换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一种方法是每次访问页时判断是否增减页,第二种方法是在每次缺页中断时判断
在这里插入图片描述
抖动问题可能会被本地的页面置换改善

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值