驻留集管理

驻留集大小
对于分页式的虚拟内存,在准备执行时,不需要也不可能把一个进程的所有页都读取到内存。因此,操作系统必须决定读取多少页,也就是说,给特定的进程分配多大的内存空间。这需要考虑以下几个因素:
1、分配给一个进程的存储量越小,在任何时候驻留在内存中的进程数就越多。这就增加了操作系统至少找到一个就绪进程的可能性,从而减少了由于交换而消耗的处理器时间。
2、如果一个进程在内存中的页数比较少,尽管有局部性原理,缺页率仍然相对比较高。
3、给特定的进程分配的内存空间超过一定的大小后,由于局部性原理,该进程的缺页率没有明显的变化。

基于这些因素,当代操作系统通常采用两种策略。固定分配策略为一个进程在内存中分配固定数目的页框用于执行时使用。这个数目是在最初加载时(进程创建时)决定的,可以根据进程的类型(交互,批处理,应用类)或者基于程序员或系统管理员的需要来确定。对于固定分配策略,一旦在进程的执行过程中发生缺页中断,该进程的一页必须被它所需要的页面置换。
可变分配策略允许分配给一个进程的页框在该进程的生命周期中不断地发生变化。理论上,如果一个进程的缺页率一直比较高,表明在该进程中局部性原理表现得比较弱,应该给它多分配一些页框以减小缺页率;而如果一个进程的缺页率特别低,则表明从局部性的角度看该进程的表现非常好,可以在不会明显增加缺页率的前提下减少分配给它的页框。可变分配策略的使用和置换范围的概念紧密相关。
可变分配策略看起来性能更优。但是,使用这种方法的难点在于它要求操作系统评估活动进程的行为,这必然需要操作系统的软件开销,并且还依赖于处理器平台所提供的硬件机制。
置换范围
置换策略的作用范围可以分为全局和局部两类。这两种类型的策略都是在没有空闲页框时由一个缺页中断激活的。在选择置换页时,局部置换策略仅仅在产生这次缺页的进程的驻留页中选择。而全局置换策略把内存中所有未被锁定的页都作为置换的候选页,而不管它们属于哪一个进程。尽管局部性策略更易于分析,但是没有证据表明它一定优于全局策略,全局策略的优点在于其实现简单、开销较小。
置换范围和驻留集的大小之间有一定的联系。固定驻留集意味着使用局部置换策略:为保持驻留集的大小固定,从内存中移出的一页必须由同一个进程的另一页面置换。可变分配策略显然可以采用全局置换策略:内存中一个进程的某一页面置换了另一个进程的某一页,将导致该进程的分配增加一页,而被置换的另一个进程的分配则减少一页。此外,可变分配和局部置换也是一种有效的组合,下面将分析这三种组合。

固定分配、局部范围
在这种情况下,分配给在内存中运行的进程的页框数固定。当发生一次缺页中断时,操作系统必须从该进程的当前驻留页中选择一页用于置换,置换算法可以使用前面所述的那些算法。
对于固定分配策略,需要事先确定分配给该进程的总页框数。这将根据应用程序的类型和程序的请求总量来确定。这种方法有两方面的缺点:如果总页面数分配得过少,则会产生很高的缺页率,导致整个多道程序设计系统运行缓慢;如果分配得过大,则内存中只能有很少的几个程序,处理器会有很多空闲时间,并且把大量的时间花费在交换上。
可变分配、全局范围
这种组织可能是最易于实现的,并且被许多操作系统采用。在任何给定的时间,内存中都有许多进程,每个进程都分配到了一定数目的页框。在典型情况下,操作系统还维护着一个空闲页框列表。当发生一次缺页中断时,一个空闲页框被添加到进程的驻留集中,并且该页被读取。因此,发生缺页中断的进程的大小会逐渐增大,这将有助于减少系统中的缺页中断总量。
这种方法的难点在于置换页的选择。当没有空闲页框可用时,操作系统必须选择一个当前位于内存中的页框(除了那些被锁定的页框,如内核占据的页框)进行置换。使用上一次所讲述的任何一种策略,选择的置换页可以属于任何一个驻留进程,而没有任何原则用于确定哪一个进程应该从它的驻留集中失去一页。因此,驻留集大小被减少的那个进程可能并不是最适合被置换的。
解决可变分配、全局范围策略潜在性能问题的一种方法是使用页缓冲。按照这种方法,选择置换哪一页变得不太重要,因为如果在下一次重写这些页之前访问到了这一页,则这一页还是可以被回收的。
可变分配、局部范围
可变分配、局部范围策略试图克服全局范围策略中的问题,可以总结如下:
1、当一个新进程被装入内存时,根据应用类型、程序要求或其他原则,给它分配一定数目的页框作为其驻留集。使用预先分页或请求分页填满这些页框。
2、当发生一次缺页中断时,从产生缺页中断的进程的驻留集中选择一页用于置换。
3、不时地重新评估进程的页框分配情况,增加或减少分配给它的页框,以提高整体性能。

在这个策略中,关于增加或减少驻留集大小的决定必须经过仔细衡量,并且要基于对活动进程将来可能的请求的评估。由于这个评估有一定的开销,这种策略比简单的全局置换策略要复杂得多,但它会产生更好的性能。
可变分配、局部范围策略的关键要素是用于确定驻留集大小的原则和变化的时间安排。在各种文献中,比较常见的是工作集策略。尽管真正的工作集策略很难实现,但是它可作为比较各种策略的一个基准。
工作集的概念是由Denning提出并加以推广的,它对于虚拟内存的设计有着深远的影响。一个进程在虚拟时间t、参数为△的工作集合W(t,△),表示该进程在过去的△个虚拟时间单位中被访问到的页的集合。
虚拟时间按如下方式定义。考虑一系列存储器访问r(1),r(2),…,其中r(i)表示包含某个进程第i次产生的虚拟地址的页。时间通过存储器访问来衡量,因此t=1,2,3,…表示进程的内部虚拟时间。
现在分别考虑W的两个变量。变量 △ 是观察该进程的虚拟时间窗口。工作集合的大小是关于窗口大小的一个非减函数
下图8.19中给出来了访问一个进程的页访问序列,圆点表示工作集合未发生变化的时间单位。注意,虚拟时间窗口越大,工作集就越大,这可以用下面的关系表示:

工作集同时还是一个关于时间的函数。如果一个进程执行了△个时间单位,并且仅仅使用一个页,则有|W(t,△)|=1。如果许多不同的页可以快速定位,并且如果窗口大小允许,工作集可以增长到和该进程的页数N一样大。因此,我们有如下关系:
1<=|W(t,△)|<=min(△,N)
下图8.20表明了对于固定的△值,工作集的大小可以随时间变化的一种方法。对于许多程序,工作集相对比较稳定的阶段和快速变化的阶段是交替出现的。当一个进程开始执行时,它访问新页的同时也逐渐建立起一个工作集。最终,根据局部性原理,该进程将相对稳定在由某些页构成的工作集上。接下来的瞬间阶段反映了该进程转移到一个新的局部性阶段。在瞬变阶段,来自原局部性阶段中的某些页仍然保留在窗口△中,导致访问新页时工作集的大小剧增。当窗口滑过这些页访问后,工作集的大小降低,直到它仅包含那些满足新的局部性的页。
工作集的概念可以用于有关驻留集大小的策略:
1、监视每个进程的工作集
2、周期性地从一个进程的驻留集中移去那些不在它的工作集中的页。这可以使用一个LRU策略
3、只有当一个进程的工作集在内存中时,才可以执行该进程(也就是说,如果它的驻留集包括了它的工作集)

这个策略是非常具有吸引力的,因为它采取了一个公认的原理-局部性原理,并利用该原理设计了一个可以减少缺页中断的内存管理策略。遗憾的是,工作集策略存在许多问题:
1、根据过去并不总能预测将来。工作集的大小和成员都会随着时间而变化(如上图8.20)
2、为每个进程真实地测量工作集是不实际的,它需要为每个进程的每次页访问使用该进程的虚拟时间作时间标记,然后为每个进程维护一个基于时间顺序的页队列
3、△的最优值是未知的,并且它在任何情况下都会变化。

然而,这个策略的思想是有效的,许多操作系统都试图采用近似工作集策略。其中的一种方法是并不集中在精确的页访问上,而是在进程的缺页率上。如图8.11b所示

当增大一个进程的驻留集时,缺页率会下降。工作集的大小会降到图中W点所标记的位置。因此,不必直接监视工作集的大小,而是可以通过监视缺页率达到类似的结果
推断方法如下:如果一个进程的缺页率低于某个最小阈值,则可以通过给该进程分配一个较小的驻留集但并不损失该进程的性能(导致缺页增加),使得整个系统都从中受益(其他进程可以得到更多的页框)。如果一个进程的缺页率超过某个最大阈值,则可以在不降低整个系统的性能的前提下,增大该进程的驻留集,使得该进程从中受益(导致缺页中断减少)。
遵循该策略的一种算法是缺页中断频率(PFF)算法。该算法要求内存中的每一页都有一个使用位与之关联。当一个页被访问时,相应的使用位被置为1,当发生一次缺页中断时,操作系统记录该进程从上一次缺页中断到现在的虚拟时间,这可以通过维护一个页访问计数器来实现。定义一个阈值F,如果从上一次缺页中断到这一次的时间小于F,则这一页被加入到该进程的驻留集中;否则淘汰所有使用位为0的页,缩减驻留集大小。同时,把其余页的使用位重新置为0。可以通过使用两个阈值对该算法进行改进:一个是用于引发驻留集大小增加的最高阈值,一个是用于引发驻留集大小缩小的最低阈值。
缺页中断发生的时间间隔和缺页率呈倒数关系。尽管最好能维持一个运行时的平均缺页率,但是要允许根据缺页率决定驻留集的大小,使用时间间隔来度量是一种比较合理的折中。如果使用页缓冲对该策略进行补充,则会达到一个相对好的性能。
PFF方法的一个主要缺点是,如果要转移到新的局部性阶段,则在过渡过程中它的执行效果不太好。对于PFF,只有从上一次访问开始经过F单位时间还没有再被访问的页才会淘汰出驻留集。而在局部性之间的过渡期间,快速而连续的缺页中断导致该进程的驻留集在旧局部性中的页被逐出之前快速膨胀。在内存突发请求高峰时,可能会产生不必要的进程去活和再激活,以及相应的切换和交换开销。
试图解决这种局部性过渡问题且开销低于PFF的一种方法是可变变样间隔的工作集(VSWS)策略。VSWS策略根据经过的虚拟时间在采样实例中评估一个进程的工作集。在采样区间的开始处,该进程的所有驻留页的使用位被重置;在末尾处,只有在这个区间中被访问过的页才设置它们的使用位,这些页在下一个区间期间仍将保留在驻留集中,而其他页则被淘汰出驻留集。因此驻留集的大小只能在一个区间的末尾处减小。在每个区间中,任何缺页中断都导致该页被添加到驻留集中;因此,在该区间中驻留集保持固定或增长。
VSWS策略由三个参数驱动:
M表示采样区间的最大宽度
L表示采样区间的最小宽度
Q表示采样实例间允许发生的缺页中断数目
VSWS策略如下:
1、如果自从上一次采样实例到现在的单位时间达到L,则挂起该进程并扫描使用位
2、如果在这个长度为L的虚拟时间区间中,发生了Q次缺页中断,
A.如果自从上一次采样实例到现在的时间小于M,则一直等待直到经过的虚拟时间到达M时,挂起该进程并扫描使用位。
B.如果自从上一次采样实例到现在的时间大于或等于M,则挂起该进程并扫描使用位。

选择参数值,使得在上一次扫描后发生第Q次缺页中断时能正常地激活采样(情况2B),另外两个参数(M和L)为异常条件提供边界保护。VSWS策略试图通过增加采样频率,减少由于突然的局部性间过渡而引发的内存请求高峰,从而使得当缺页中断速度增加时,能减少未使用页被淘汰出驻留集的速度。该技术在BULL主机操作系统GCOS 8中的使用经验表明,这种方法和PFF一样实现简单,并且更有效。

清除策略

清除策略和读取策略相反,它用于确定在何时将一个被修改过的页写回辅存。通常有两种选择:请求式清除和预约式清除。对于请求式清除,只有当一页被选择用于置换时才被写回辅存;而预约式清除策略将这些被修改的多个页在需要用到它们所占据的页框之前成批地写回辅存。
完全使用任何一种策略都存在危险。对于预约式清除,一个被写回辅存的页仍然可能留在内存中,直到页面置换算法指示它被移出。预约式清除允许成批地写页,但这并没有太大的意义,因为这些页中的大部分常常会在被置换之前又被修改,辅存的传送能力是有限的,不应该浪费在实际上不太需要的清除操作上。
另一方面,对于请求式清除,写出一个被修改的页和读入一个新页是成对出现的,并且写出在读入之前。这种技术可以减少写页,但它意味着发生缺页中断的进程在解除阻塞之前必须等待两次页传送,这可能降低处理器的利用率。
一种比较好的方法是结合页缓冲技术,该技术允许采用下面的策略:只清除可以用于置换的页,但去除了清除和置换操作之间的成对关系。通过页缓冲,被置换页可以放置在两个表中:修改和未修改。修改表中的页可以周期性地成批写出,并移到未修改表中。未修改表中的一页或者因为访问到而被收回,或者当它的页框分配给另一页时被淘汰。

加载控制

加载控制会影响到驻留在内存中的进程数目,这称做系统并发度。加载控制策略在有效的内存管理中是非常重要的。如果某一时刻驻留的进程太少,所有进程都同时处于被阻塞状态的概率可能比较大,因而会有许多时间花费在交换上。另一方面,如果驻留的进程太多,平均每个进程的驻留集合大小将会不够用,就会频繁发生缺页中断,从而导致抖动。
系统并发度
下图8.21说明了抖动的情况。当系统并发度从一个较小的值开始增加时,由于很少会出现所有驻留进程都被阻塞的情况,因此会看到处理器的利用率增长。但是,当到某一点时,平均驻留集不够用了,此时缺页中断数目迅速增加,从而处理器的利用率下降。

解决这个问题可以有多种途径。工作集或缺页中断频率算法都隐含了加载控制。只有那些驻留集足够大的进程才允许执行。在为每个活动进程提供需要的驻留集大小时,该策略自动并且动态地确定活动程序的数目。
Denning等人提出的另一种方法,称做L=S准则,它通过调整系统并发度,使得缺页中断之间的平均时间等于处理一次缺页中断所需要的平均时间。性能研究表明,在这种情况下处理器的利用率达到最大。
另一种方法适合前面给出的时钟页面置换算法(如下图8.16所示)。描述了一种使用全局范围的技术。它监视该算法中扫描页框的指针循环缓冲区的速度。如果速度低于一个给定的最小阈值,则表明如下的一种或两种情况:
1、很少发生缺页中断,所以很少需要请求指针前进
2、对每个请求,指针扫描的平均页框数很小,表明有许多驻留页未被访问到,并且均易于被置换。
在这两种情况下,系统并发度可以安全地增加。另一方面,如果指针的扫描速度超过一个最大阈值,则表明或者缺页率很高,或者很难找到可置换页,这暗示着系统并发度太高了。
进程挂起
如果系统并发度被减小,则一个或多个当前驻留进程必须被挂起(换出)。下面有6种可能性:
1、最低优先级进程:实现调度策略决策,与性能问题无关。
2、缺页中断进程:原因是很有可能是缺页中断任务的工作集还没有驻留,因而挂起它对性能的影响最小。此外,由于它阻塞了一个一定将要被阻塞的进程,并且消除了页面置换和I/O操作的开销,因而该选择可以立即收到成效。
3、最后一个被激活的进程:这个进程的工作集最有可能还没有驻留。
4、驻留集最小的进程:在将来再装入时所需要的代价最小。但是,它不利于局部性较小的程序。
5、最大空间的进程:这可以在一个过量使用的内存中得到最多的空闲框,使得不会很快又处于去活状态。
6、具有最大剩余执行窗口的进程:在大多数进程调度方案中,一个进程在被中断或者放置在就绪队列末尾之前只运行一定的时间。这近似于最短处理时间优先的调度原则。

在操作系统设计的许多其他领域中,选择哪一个策略取决于操作系统中许多其他设计因素以及要执行的程序的特点。

302-驻留集管理,清除策略和加载控制相关推荐

  1. R语言pacman包管理R编程语言需要的包实战:使用p_load函数安装和加载多个R包、使用p_unload函数卸载多个R包、使用p_update函数更新过期的R包

    R语言pacman包管理R编程语言需要的包实战:使用p_load函数安装和加载多个R包.使用p_unload函数卸载多个R包.使用p_update函数更新过期的R包 目录

  2. 3.2.4 OS之页面分配策略(驻留集、页面分配、置换策略、抖动现象、工作集)

    文章目录 0.思维导图 1.驻留集 2.页面分配.置换策略 固定分配局部置换.可变分配局部置换.可变分配全局置换 3.何时调入页面? 4.从何处调页? 5.抖动(颠簸)现象 6.工作集 0.思维导图 ...

  3. [html] 浏览器是怎么对HTML5的离线储存资源进行管理和加载的

    [html] 浏览器是怎么对HTML5的离线储存资源进行管理和加载的 在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根 ...

  4. Nexus制品库管理:二进制制品管理:清除策略

    在2018年10月份发布的Nexus 3.14版中提供了CleanUp功能,这对于使用Nexus的用户是一个原本早就该提供的功能,在这个功能中提供了对于长时间不使用的二进制制品的清除策略.这篇文章主要 ...

  5. checkpoint-模型保存和加载

    模型的保存和加载 实验介绍 训练过模型的小伙伴一定对ckpt这个东西不陌生,下面我们就来看看它的魅力. 在模型训练过程中,可以添加检查点(Checkpoint)用于保存模型的参数,以便进行推理及中断后 ...

  6. 详解ETL银行数据仓储抽取和加载流程概述

    ETL和ELT ETL是Extract.Transfrom.Load即抽取.转换.加载三个英文单词首字母的集合: E:抽取,从源系统(Souce)获取数据: T:转换,将源系统获取的数据进行处理加工, ...

  7. Redis Key过期及清除策略

    >Key过期命令: 127.0.0.1:6379> EXPIRE name 10 # 设置key的过期时间,单位是秒 (integer) 1 127.0.0.1:6379> ttl ...

  8. 计算机 管理策略,有关管理组策略管理模板的建议 (.adm) 文件

    有关管理组策略管理模板的建议 (.adm) 文件 12/04/2020 本文内容 本文介绍了 ADM 文件如何工作.可用于管理其操作的策略设置,以及如何处理常见的 ADM 文件管理方案的建议. 适用于 ...

  9. PyTorch学习笔记2:nn.Module、优化器、模型的保存和加载、TensorBoard

    文章目录 一.nn.Module 1.1 nn.Module的调用 1.2 线性回归的实现 二.损失函数 三.优化器 3.1.1 SGD优化器 3.1.2 Adagrad优化器 3.2 分层学习率 3 ...

最新文章

  1. python利用wx.grid网格显示数据
  2. C++报错解决:error: ‘int’ is not a class, struct, or union type typedef typename _Sequence::value_
  3. iOS开发火了九年,这些错误你还在犯嘛?
  4. 能综合和仿真但是不能生成bit流文件的解决方法
  5. mybatis 乐观锁_MybatisPlus新特性之逻辑删除、乐观锁、自动填充
  6. collections模块
  7. Docker搭建便捷的开发者环境
  8. arm9重启ssh服务_部署ssh使用rsa登录配置
  9. springmvc结合freemarker,非自定义标签
  10. HTML - html简介和开发环境搭建
  11. Babelua 调试
  12. 6、微信小程序的布局
  13. 如何写好一篇科技论文?
  14. kubebuilder之一:kubernetes operator工作原理
  15. 基于MediaPipe API实现骨骼识别
  16. idea中用rest风格发送delete,put请求报405(tomcat8)
  17. 工业相机(面阵和线阵)和镜头选型
  18. es6 内置对象扩展rest, Arry 扩展方法Array.from(),find(), findIndex(),includes()
  19. 【数据挖掘】数据统计性描述与相似度
  20. MySql安装学习记录

热门文章

  1. 网页期末作业制作一个简单HTML电影网页设计(HTML+CSS)
  2. shiro、基于url权限管理、超详细
  3. Spyder crashed during last session 及其后诸多问题
  4. 伯努利分布的最大似然估计
  5. 7-58 计算油费 (15 分)
  6. 美国区块链公司Espresso Systems因涉嫌知识产权盗窃被起诉
  7. QEMU零知识学习2 —— QEMU源码下载
  8. 孫子に学ぶITマネジメント CIOの予算獲得編(2)彼を知り己を知る
  9. ​大数据和云计算技术周报(第37期)
  10. 代号海岸线如何用电脑玩 代号海岸线PC电脑版玩法教程