操作系统中的全局页面置换算法

1 全局页面置换算法

以上页面置换算法都是针对单一的应用程序的页面置换算法, 且有一个前提, 就是给单一应用程序分配的物理页帧数量是一定的. 现实中, 给一个应用程序分配的物理页帧数, 该程序产生的缺页中断也就越少, 而且程序运行过程中, 可能某些阶段对于内存的读写操作很多, 某些阶段很少, 所以给一个应用程序分配固定数量的物理页帧是不合理的. 这样就需要一个全局页面置换算法, 可以动态对某个应用程序的物理页帧数进行调整. 

2 工作集模型

前文介绍的各种页面置换算法, 都是基于一个前提, 即程序的局部性原理. 但是此原理是否成立?

  • 如果局部性原理不成立, 那么各种页面置换算法就没有什么分别, 也没有什么意义. 例如: 假设进程对逻辑页面的访问顺序是1 2 3 4 5 6 7 8 9 ..., 即单调递增, 那么在物理页面数有限的前提下, 不管采用何种置换算法, 每次的页面访问都必然导致缺页中断.
  • 如果局部性原理是成立的, 那么如何来证明它的存在, 如何来对它进行定量地分析? 这就是工作集模型.

2.1 工作集

工作集: 一个进程当前正在使用的逻辑页面集合.

可以用一个二元函数W(t, \Delta )来表示:

  • t是当前的执行时刻.
  • \Delta称为工作集窗口(working set window), 即一个定长的页面访问的时间窗口. (t, \Delta ) 可以表示在t时刻前\Delta长度的时间范围, 代表着一段时间.
  • W(t, \Delta ) = 在当前时刻t之前的\Delta时间窗口当中的所有页面所组成的集合(随着t的变化, 该集合也在不断的变化).
  • \left | W(t, \Delta ) \right |指工作集的大小, 即页面数目.

2.2 常驻集

常驻集: 指在当前时刻, 进程实际驻留在内存当中的页面集合.

  • 工作集是进程在运行过程中固有的性质, 而常驻集取决于系统分配给进程的物理页面数目, 以及所采用的页面置换算法.
  • 如果一个进程的整个工作集都在内存中, 即常驻集包含工作集, 那么进程将很顺利地运行, 而不会造成太多的缺页中断(知道工作集发生剧烈变动, 从而过渡到另一个状态).
  • 当今成常驻集的大小达到某个数目之后, 再给它分配更多的物理页面, 缺页率也不会明显下降.

3 两个全局置换算法:

3.1 工作集页面置换算法

3.1.1 原理

追踪之前\iota个的引用.

  • 在之前\iota个内存访问的页引用是工作集, \iota被称为窗口大小.
  • 实现原理: 获取某时刻t的时间窗口为\iota的工作集W(t, \iota ), 如果此时应用程序所占用的物理页不在工作集中, 就把他直接换出去(也就是说根据工作集实时调整常驻集, 保证常驻集是该时刻t之前\iota时间段内一直被使用的物理页).

3.1.2 举例

1. 假设有一个应用程序, 操作系统给其分配了五个物理页帧A, B, C, D, E, 该应用程序对于逻辑页的访问序列是e d a c c d b c e c e a d, 时间窗口的长度是4, 如图:

2. 当e d a c逻辑页面访问请求过来之后, 会产生四次中断:

 

 3. 当请求4进来之后, 此时的工作集应为e d a c, c在工作集中, 也就是不会产生中断, 重新确认此时的工作集, 变成了d a c, 也就是e应该被踢出工作集, 其占用的物理页帧也会被释放出来:

 4. 当请求5过来之后, 此时工作集是d a c, d在工作集中, 不会产生缺页中断, 重新确定工作集, 还是d a c:

 5. 当请求6过来之后, 此时工作集是d a c, b不在工作集中, 会产生缺页中断, 重新确定工作集, 变成了 c d b, a又被踢出工作集, 其占用的物理页帧也被释放了出来:

6. 当请求7过来之后, 此时工作集是c d b, c在工作集中, 不会产生缺页中断, 重新确定工作集, 还是c d b:

7. 当请求8过来之后, 此时工作集是c d b, e不在工作集中, 会产生缺页中断, 重新确定工作集, 为d b c e, 添加了e, 没有需要被踢出工作集的页面:

8. 当请求9过来之后, 此时工作集是d b c e, c在工作集中, 不会产生缺页中断, 重新确定工作集, 为b c e, d需要被踢出工作集: 

9. 当请求10过来之后, 此时工作集是b c e, e在工作集中, 不会产生缺页中断, 重新确定工作集, 为c e, b需要被踢出工作集: 

 10. 当请求11过来之后, 此时工作集是c e, a不在工作集中, 会产生缺页中断, 重新确定工作集, 为c e a, 没有需要被踢出工作集: 

11. 当请求12过来之后, 此时工作集是c e a, d不在工作集中, 会产生缺页中断, 重新确定工作集, 为c e a d, 没有需要被踢出工作集:  

3.2 缺页率页面置换算法

3.2.1 原理

可变分配策略: 常驻集大小可变. 例如: 某个进程在刚开始运行的时候, 先根据程序大小给它分配一定数目的物理页面, 然后在进程运行过程中, 动态调整常驻集大小.

  • 可采用全局页面置换的方式, 当发生一个缺页中断时, 被置换的页面可以是在其它进程中, 各个并发进程竞争地使用物理页面.
  • 优缺点: 性能较好, 但增加了系统开销
  • 具体实现: 可以使用缺页率算法(PFF, page fault frequency)来动态调整常驻集的大小.

缺页率:

缺页率表示"缺页次数 / 内存访问次数"(比率)或"缺页的平均时间间隔的倒数". 影响缺页率的因素:

  • 页面置换算法
  • 分配给进程的物理页面数目
  • 页面本身的大小
  • 程序的编写方法

缺页率算法:

若运行的程序的缺页率过高, 可通过增加工作集来分配更多的物理页面. 若运行的程序的缺页率过低, 则通过减少工作集来较少它的物理页面数. 力图使运行的每个程序的缺页率保持在一个合理的范围内.

3.2.2 算法实现

保持追踪缺失发生概率:

  1. 当缺失发生时, 从上次页缺失起计算这个时间差并记录这个时间差, t_{last}是上次的页缺失的时间.
  2. 如果发生页缺失之间的时间差是"大"的, 之后减少工作集的时间窗口(也就是W(t, \Delta )里面的\Delta): 如果t_{current} - t_{last} > T (T是设置的一个阈值), 之后从内存中移除所有在[t_{current}, t_{last}]时间内没有被引用的页.
  3. 如果发生页缺失之间的时间差是"小"的, 之后增加工作集: 如果t_{current} - t_{last} \leq T, 之后增加缺失页到工作集中.

3.2.3 实例

  • 如果t_{current} - t_{last} > T, 从工作集中移除没有在[t_{current}, t_{last}]被引用的页面. 
  • 如果t_{current} - t_{last} \leq T, 仅增加缺失页到工作集中.

1. 假设有一个应用程序, 操作系统给其分配了五个物理页帧A, B, C, D, E, 该应用程序对于逻辑页的访问序列是e d a c c d b c e c e a d, 时间差阈值为2, 如图:

2. 前四次访问, 都会产生中断, 所以时间差都是1, 比阈值2小, 所有都会把页面添加到工作集中:

 3. 访问4和5, 因为c d都在工作集中, 所以不会产生中断:

4. 当访问6过来时, 此时b不在工作集中, 所以会产生中断, 先把b放入工作集并找到物理页面与其映射. 此时距离上次中断的时间差为3,  大于时间差阈值2, 所以就会把上次中断到这次中断之间工作集中未访问的页面踢出工作集(也就是a e被踢出, 其占用的常驻集中的A E也会被释放出来):

5. 当访问7过来时,  c在工作集中, 所以不会产生中断:

6. 当访问8过来时, e不在工作集, 会产生中断, 此时中断时间差为2, 不大于时间差阈值2, 所以直接把e添加进工作集: 

7. 当访问9, 10过来时, c, e在工作集, 不会产生中断: 

8. 当访问11过来时, a不在工作集, 产生中断, 此时距离上次中断时间为3, 大于时间差阈值, 就会把工作集中在两次中断间未被引用的页面清出: 

9. 当访问12过来时, d不在工作集, 产生中断, 此时距离上次中断时间为1, 小于时间差阈值, 直接把d加入工作集:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么更新opengl.dll文件_安装累积更新丢文件似乎已成为惯例 KB4556799同样出现文件丢失问题...

从 Windows 10 Version 1903 版发布开始就经常出现用户升级版本或者安装累积更新导致个人文件丢失的问题。但是以前这种问题似乎并不算频繁,然而从今年开始微软发布的累积更新几乎都存在这样的问题让很多用户苦恼。而微软至今从未承认过安装累积更新会丢失用户的个人…

非全局页面置换算法

1 先进先出算法(FIFO) 1.1 基本思路: 选择在内存中驻留时间最长的页面并淘汰之. 具体来说, 系统维护着一个链表, 记录了所有位于内存当中的逻辑页面. 从链表的排列顺序来看, 链首页面的驻留时间最长, 链尾页面的驻留时间最短. 当发生一个缺页中断时, 把链首页面的淘汰出局, 并…

github打开前端样式丢失_工具资源系列之 github 上各式各样的小徽章从何而来?...

前言平时大家在在逛 github 时或多或少都看到过项目首页各式各样的小徽章,不知道你是否和我一样好奇这些小徽章都是哪来的呢?首先我们先来一睹为快目前前端开发的三大主流框架: var ,看一看他们的 github 项目首页有哪些小徽章吧!小结:前端三大框架的徽章均不相同,由此可见,这…

操作系统进程管理

1 进程概述 进程: 一个具有一定的功能的程序在一个数据集合上的一次动态执行过程. 1.1 进程组成 一个进程应该包括: 程序的代码程序处理的数据程序计数器中的值, 指使下一条将运行的指令一组通用的寄存器的当前值, 堆, 栈一组系统资源(如打开的文件) 总之, 进程包含了正在运…

vs code ipynb文件_UE4引擎 源码的获取、安装,以及VS配置

1.首先我们需要注册一个Epic账户,网址如下http://api.unrealengine.com/CHN/GettingStarted/Installation/index.html#bookmark12.创建GitHub账户https://github.com/3.登录UE4社区点击个人进入到个人之后点击连接的账户,之后在下面填写我们GITHUB的昵称…

js bind 传参、_js中的面向对象(一)

面向对象要解决的问题提到面向对象,大家的第一反应就是封装、继承和多态。对其做如下解释:封装:影藏细节(A对A——将多行代码取个名字或A对B——API调用合作)继承:继承的意思就是同上跟上述一样&#xff0c…

计算机网络中的物理层

1 基础概念 物理层解决如何在链接各种计算机的传输媒体上传输数据比特流, 而不是指具体的传输媒体. 物理层的主要任务, 确定与传输媒体接口有关的一些特性. -> 定义标准 1.1 物理层规定的特性: 机械特性: 定义物理连接的特性, 规定物理连接时所采用的规格, 接口形状, 引…

二元置信椭圆r语言_医学统计与R语言:多分类logistic回归HosmerLemeshow拟合优度检验...

微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发输入1:multinominal logistic regression "nnet")结果1: test (multinomial model)输入2:ordinal logistic regression "MASS")结果2&am…

python3.7.2安装与配置_python3.7.0 安装与配置

python 3.7.0 X64下载地址: https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe 更多版本下载请移步到:https://www.python.org/downloads/release/python-370/ python可以在同一台机器上进行多版本的安装使用。 安装好python3.7.0后确认系…

python3设置编码_python3 中文乱码与默认编码格式设定方法

python默认编码格式是utf-8。在python2.7中,可以通过sys.setdefaultencoding(gbk)设定默认编码格式,而在python3.3中sys.setdefaultencoding()这个函数已经没有了。在python3.3中该如何设置内置的默认编码格式啊!急求!&#xff01…

操作系统处理器调度

1 背景 1.1 上下文切换: 切换CPU的当前任务, 从一个进程/线程到另一个保存当前进程/线程在PCB/TCB中的执行上下文(CPU状态)读取下一个进程/线程的上下文 1.2 CPU调度: 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程调度程序: 挑选进程/线程的内核函数(通过…

c# 操作redisclient 设置过期时间_C# Redis分布式锁单节点

(给DotNet加星标,提升.Net技能)转自:热敷哥cnblogs.com/refuge/p/13774008.html为什么要用分布式锁?先上一张截图,这是在浏览别人的博客时看到的.在了解为什么要用分布式锁之前,我们应该知道到底什么是分布式锁.锁按照不同的维度,有多种分类.比如1、悲观…

计算机网络数据链路层检错编码 --- 循环冗余码CRC

实例说明 假如要发送的数据是1101 0110 11, 采用CRC校验, 生成多项式是10011, 那么最终发送的数据应该是? 发送端发送过程: 1. 最终发送的数据 要发送的数据 帧检验序列FCS(冗余码) 2. 利用生成多项式计算冗余码 计算冗余码的方法: 1. 加0, 要根据生成多项式中的阶为, 则…

python和arduino串口通信_利用串行通信实现python与arduino的同步

我有一个需要:使用arduino将伺服电机移动到某个位置并在该位置停止 让一个由python控制的相机在那个位置获取图像 当图像被采集到时,伺服机构应该移动到一个对称的位置 这个序列重复N次 所以我尝试使用串行通信同步arduino和python代码。在arduino端&…

计算机网络中数据链路层编码纠错编码 --- 海明码

1 概述 首先, 海明码是计算机网络中数据链路层的针对帧的位错提出的一种纠错编码方式. 海明码可以发现双比特错, 但纠正单比特错. 工作原理(简单解释): 牵一发动全身 2 工作流程 2.1 确定校验码位数r 海明不等式: 其中为冗余信息位数, 为信息位数 如果给定要发送的数据, …

python在教育领域的应用_浅谈Python的主要应用领域

Python的用途较为广泛,小编也会经常接触到各种与Python有关的项目,也算是一名忠实的开发者。能够遇到关于Python用途的问题,也很乐意回答。Python这个概念非常大,它的定位是“计算机程序设计语言”,从它的特点来看&…

计算机操作系统同步互斥

1 背景 在计算机系统里面, 多道程序设计是现代操作系统的重要特征, 且并行起到了很大的作用, 所以操作系统抽象出来了线程/进程的概念用来支持多道程序设计, 同时, 各个进程之间需要进行交互, CPU也需要进行调度来支持多进程. 多进程会涉及到共享资源访问的问题, 如果操作系统…

leetcode 26 --- removeDuplicates

1 题目 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 2 思路 此题要利…

conda安装tensorflow-gpu简洁版_win10 tensorflow2.2 安装注意事项

学习新技术有两座大山,一座是安装配置环境,另一座是调试bug。对于想学习人工智能开发的人来说,安装配置tensorflow是必不可少的一步,这个过程对于初次接触的人来说,到处都是火坑。下面大家跟我一起,看看都会…

python九九乘法表右对齐_python语法练习题之九九乘法表

九九乘法表 for...in方法实现 #方法一 for i in range(1, 10):for j in range(1, i1):print({}*{}{:<4}.format(j, i, i*j), end )print()#输出 1*11 1*22 2*24 1*33 2*36 3*39 1*44 2*48 3*412 4*416 1*55 2*510 3*515 4*520 5*525 1*66 2*612 3*618 4*624 5*630 6*636 1*7…