操作系统复习之虚拟内存管理

目录

目录

1. 虚拟内存的概念

2. 请求分页管理

3. 页面置换算法

4. 页面分配策略

5. 抖动与工作集


1. 虚拟内存的概念

(1)常规存储管理方式的特征

①一次性:作业必须一次性全部装入内存后才能开始运行,当作业很大时,不能全部装入内存,导致大作业无法运行;当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度下降。

②驻留性:一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束。其实在一个时间段内,只需要访问作业的一小部分数据即可正常运行,而内存中驻留的那些暂时用不到的数据,就浪费了宝贵的内存资源。

(2) 局部性原理

 ①时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)

 ②空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的,并且程序的指令也是顺序地在内存中存放的)

综合以上特点,高速缓冲技术即利用时间局部性将近来使用的指令和数据保存到高速缓存存储器中解决CPU与内存速度不匹配的问题,提高计算机系统性能。虚拟内存技术根据空间局部建立了“内在一外存” 的两级存储器的结构,实现高速缓存及内存的逻辑上的扩存。

(3) 虚拟内存的定义和特征 

 基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统负贵将所需信息从外存调入内存,然后继续执行程序。

若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。在用户看来这就似乎有一个比实际内存大得多的内存,这就是虚拟内存。

虚拟存储器的大小由计算机的地址结构决定,并非是内存和外存的简单相加。虚拟存储器有以下四个主要特征:

①离散性。即非连续性,这是实现虚拟存储器管理技术的前提。

②多次性。一个作业被分成多次调人内存。

③对换性。允许在作业运行过程中换人、换出。

④虚拟性。能够从逻辑上扩充内存容量。

(4) 虚拟内存技术的实现

  ①请求分页存储管理

  ②请求分段存储管理

  ③请求段页式存储管理

2. 请求分页管理

请求分页是建立在分页存储管理的基础之上,允许部分作业调入内存,同时为支持虚拟存储器功能增加了请求调页功能(页面不存在内存,通过调页功能调入)页面置换功能(将暂时不用的页面换到外存)。目前请求分页系统是实现虚拟存储器最常用的一种方法。除了需要一定容量的内存及外存的计算机系统外,还需要有页表机制缺页中断机构地址变换机构

(1)页表机制

  与基本分页系统不同,请求分页系统不要求页面一次性调入内存,所以会出现要访问的页面不在内存的情况,为发现解决这种问题,在基本分页页表的基础上,增加了四个字段:

 (2) 缺页中断机构

  在请求分页系统中,缺页中断发生在当要访问的页面不在内存时,由操作系统的缺页中断处理程序处理中断。此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。

如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。

如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存。

【注】:一条指令期间可以产生多次缺页中断;缺页中断属于内部中断(注意一下内部中断与外部中断的区别)

(3) 地址变换机构

在基本分页管理的基础,请求分页的地址转换过程新增了三个步骤:

  ①请求调页( 查到页表项时进行判断)

 ②页面置换(需要调入页面,但没有空闲内存块时进行)

 ③需要修改请求页表中新增的表项

 3. 页面置换算法

    将内存中暂时用不到的信息换到外存时需要用页面置换算法决定该换出哪个页面

(1) 最佳置换OPT

       选择淘汰以后永不使用的页面,or在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但是操作系统无法预知接下来访问的是哪个页面,所以实际上OPT是无法实现的

【eg】:假设系统为某进程分配了三个内存块,并考虑到有一下页面号引用串(会依次访问这些页面) :7,0, 1,2,0,3,0,4,2,3,0,3,2, 1,2,0,1, 7,0,1,计算使用OPT算法访问过程中的缺页次数和缺页率

 (2) 先进先出页面置换FIFO

  每次淘汰最早进入内存的页面(or再内存停留最久的),根据调入内存的顺序将页面排序,置换时选择头页面即可

【eg】:假设系统为某进程分配了三个内存块,并考虑到有以下页面号引串:3,2,1,0,3,2,4,3,2,1,0,4,按FIFO算法计算缺页率

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

 每次淘汰最近最久未被使用的页面,可以用页表项中的访问字段记录该页面从上次访问以来所经历的时间,淘汰时选择现有页面中该值最大的

【eg】:假设系统为某进程分配了四个内存块,并考虑到有以下页面号引用串:1,8, 1, 7,8,2, 7,2, 1,8,3,8,2, 1,3,1, 7,1,3, 7,用LRU算法计算缺页率

(4) 时钟置换CLOCK

 ①简单的Clock

  为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置为1。当需要淘汰一个页面时,只需检查页的访问位。如果是0,就选择该页换出;如果是1,则将它置为0,暂不换出,继续检查下一个页面,若第一轮扫描中所有页面都是1,则将这些页面的访问位依次置为0后,再进行第二轮扫描(简单的CLOCK算法选择一个淘汰页面最多会经过两轮扫描)

 【eg】:假设系统为某进程分配了五个内存块,并考虑到有以下页面号引用串:1, 3, 4,2, 5, 6,3,4,7

 

 ②改进的Clock

简单的时钟置换算法仅考虑到一个页面最近是否被访问过。但只有被淘汰的页面被修改过时,才需要执行I/O写回外存。因此,除考虑一个页面最近有没有被访问过之外,还应考虑页面有没有被修改过。在其他条件都相同,应优先淘汰没有修改过的页面,避免I/O操作。修改位=0,表示页面没有被修改过:修改位=1,表示页面被修改过。可以用(访问位,修改位)的形式表示各页面状态。如(1, 1)表示一个页面近期被访问过,且被修改过。

将所有可能被置换的页面排成一个循环队列

   第一轮:从当前位置开始扫描到第一个(0,0)的帧(表示该页最近既未被访问,又未被修改,是最佳淘汰页)用于替换。本轮扫描不修改任何标志位

  第二轮:若第一轮扫描失败,则重新扫描,查找第一个(0,1)的帧(表示该页最近未被访问,但已被修改,并不是很好的淘汰员)用于替换。本轮将所有扫描过的帧访问位设为0

  第三轮:若第二轮扫描失败,则重新扫描,查找第一个(0, 0)的帧用于替换。本轮扫描不修改任何标志位

  第四轮:若第三轮扫描失败,则重新扫描,查找第一个(0,1) 的帧用于替换。

改进型CLOCK置换算法选择一个淘汰页面最多会进行四轮扫描

4. 页面分配策略

(1)页面分配置换策略

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

驻留集太小,会导致缺页频繁,系统性能收到影响;驻留集太大,导致多道程序并发度下降

固定分区局部置换:根据进程的类型或程序员、系统管理员的建议,为每个进程分配一固定页数的内存空间。且在整个运行期间保持不变。缺页时亦在本进程页面范国内实施置换。

可变分区全局置换:刚开始会为每个进程分配一定数量的物理块。操作系统会保持一个空闲物理块队列。当某进程发生缺页时,从空闲物理块中取出一块分配给该进程;若已无空闲物理块,则可选择一个未锁定的页面换出外存,再将该物理块分配给缺页的进程。被选择调出的页可能是系统中任何一个进程中的页,因此这个被选中的进程拥有的物理块会减少,缺页率会增加。

可变分区局部置换:刚开始会为每个进程分配一定数量的物理块。当某进程发生缺页时,只允许从该进程自己的物理块中选出一个进行换出外存。如果进程在运行中频繁地缺页,系统会为该进程多分配几个物理块,直至该进程缺页率趋势适当程度;反之,如果进程在运行中缺页率特别低,则可适当减少分配给该进程的物理块。

[注] :可变分配全局置换只要缺页就给分配新物理块;可变分配局部置换要根据发生缺页的频率来动态地增加或减少进程的物理块

(2) 调页策略

①何时调入

1)预调页策略:依据局部性原理,一次调人相邻的若于个页面要比一次只调入一页效率更高。但若一次调入页面过多, 也有可能引起CPU的利用率降低。因此,需要采用以预测为基础的预调页策略,将预计在不久之后便会被访问的页面预先调人内存。目前此种调页策略成功率仅有50%,故该策略主要用于进程的首次调入,由程序员指出应先调人哪些页。

2)请求调页策略:进程在运行期间发现缺页时才将所缺页面调入内存。由这种策略调入的页一定会被访问,且较易于实现,但是是每次只调入一页,调人/调出页面数多时会花费过多的I/0开销。

[注]:预调是在运行前的调,请求调页是在运行期间根据需要进行调入。通常情况下,两种调页策略会同时存在。

②何处调入

在请求分页系统中,通常将外存划分为对换区和文件区两部分,前者用于存放对换页面,后者用于存放文件:

于是该问题就包括以下三种方式:

1) 当系统有足够对换区时,可全部从对换区中调入页面(但进程运行前必须将其从文件区拷贝至对换区)

 2) 当系统缺少足够的对换区时,凡是没有被修改的文件从文件区调入,且换出时不必写回磁盘,下次需要再从文件去区调入;对于可能被修改的换出时写回对换区,下次再从对换区调入。

 3) NIX方式:凡是未运行过的页面,都从文件区调人:而对于曾经运行过但又被换出的页面,在下次调人时,应从对换区调入

5. 抖动与工作集

(1)抖动

 对于刚刚换出的页面马上又要换入内存刚刚换入的页面马上又要换出内存,这种频繁的页面对换行为称为抖动

 产生抖动的主要原因是分配给进程的物理块太少,进程频繁访问的页面数高于可用的物理块数,导致进程在对换花的时间超过执行时间,进程便处于抖动状态

(2) 工作集

工作集是指某段时间内进程实际访问页面的集合(注意区分驻留集,驻留集一般不小于工作集)。工作集由时间和窗口大小来确定,假定系统设定的工作集窗口大小为4,则下图两个时刻的工作集有:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值