非全局页面置换算法

1 先进先出算法(FIFO)

1.1 基本思路:

选择在内存中驻留时间最长的页面并淘汰之. 具体来说, 系统维护着一个链表, 记录了所有位于内存当中的逻辑页面. 从链表的排列顺序来看, 链首页面的驻留时间最长, 链尾页面的驻留时间最短. 当发生一个缺页中断时, 把链首页面的淘汰出局, 并把新的页面添加到链表的末尾.

1.2 评价:

性能较差, 调出的页面有可能是要经常要访问的页面, 并且有Belady现象. 很少单独使用.

2 最近最久未使用算法(LRU)

2.1 基本思路

当一个缺页中断发生时, 选择最久未使用的那个页面, 并淘汰之.

2.2 原理

它是对最优页面置换算法的一个近似, 其依据是程序的局限性原理, 即在最近一小段时间内, 它们还可能会再一次被频繁的访问. 反过来说, 如果在过去某些页面长时间未被访问, 那么在将来它们还可能会长时间地得不到访问.

2.3 评价

LRU算法需要记录某个和页面使用时间的先后顺序, 开销比较大, 两种可能的实现方法是:

  1. 系统维护一个页面链表, 最近刚刚使用过的页面作为首节点, 最久未使用的页面作为尾节点. 每一次访问内存时, 找到相应的页面, 把它从链表中摘下来, 再移动到链表之首, 每次缺页中断发生时, 淘汰链表尾部的页面.
  2. 设置一个活动页面栈, 当访问某页时, 将此页号压入栈顶, 然后考察栈内是否有与此页面相同的页号, 若有则抽出. 当需要淘汰一个页面时, 总是选择栈底的页面, 它就是最久未使用的.

3 时钟页面置换算法

时钟页面置换算法, LRU的近似, 对FIFO的一种改进.

3.1 基本思路:

  1. 需要用到页表项当中的访问位, 当一个页面被装入内存时, 把该位初始化为0, 然后如果这个页面被访问(读/写), 则把该位置为1.
  2. 把各个页面组织成环形链表(类似钟表面), 把指针指向最老的页面(最先进来).
  3. 当发生一个缺页中断时, 考察指针所指向的最老页面, 若它的访问位为0, 立即淘汰, 若访问位为1, 则把该位置置为0, 然后指针往下移动一格. 如此下去, 直到找到被淘汰的页面, 然后把指针移动到它的下一格.

3.2 流程

时钟页面置换算法图示:   

1. 假设内存中有四个物理页帧, A, B, C, D, 某一时刻有四个逻辑页面a, b, c, d与其对应(lp代表最末指针):

2. 假设此时来了一堆逻辑页号的访问请求序列: c, a, d, b, e, b, a, b, c, d, 那么有在访问前四个页号c, a, d, b时都不会产生缺页中断, 但是在访问逻辑页号e时, 此时e会产生缺页中断, 那么此时需要找到被替换的逻辑页, 此时lp指向a, 但是a所对应的物理页帧A的访问位是1, 所以把A的访问位置为0, 然后指针移向b:

3. 这次循环下去发现b c d的访问位都是1, 所以都置为0, 然后lp回到a:

4. 发现a对应的A的访问位是0, 那么把其替换为e, 并把e的访问位置为1, 把lp移到b:

5. 访问b的请求来了, 把b对应的B的访问位置为1:

6. 访问a的请求来了, 产生缺页中断, 此时lp在b, 但是b的访问位为1, 那么置为0, 然后吧lp移向c, 发现c的访问位是0, 直接替换为a, 并把访问位置为1, 把lp移向d:

7. b的访问请求来了, 没有产生缺页中断, 把b的访问位置为1:

8. c的访问请求来了, 产生缺页中断, 此时lp在d, 访问位是0, 那么直接替换掉, 访问位置为1, lp移动到e:

9. d的访问请求来了, 产生缺页中断, 此时lp在e, 但是e b a 对应的物理页帧的访问位都是1, 所以转一圈把所有访问位都置为1之后又回到了e, 此时e对应的A的访问位为0, 那么把其替换成d, 且访问位置为1, 然后把lp移至下一位b:

4 二次机会法

clock算法的不足: 将页面置换出去需要写入硬盘, 代价较大. 页表项中不仅有访问位, 还有写入位, 代表着这个物理页帧从硬盘到物理内存后(首次载入或者上次被置换进来)是否被写入过, 如果在置换算法中需要将一个页置换出去, 其对应的物理页帧的写入位是0, 那么不需要将其物理页帧内容写入硬盘, 只需要将其直接释放即可.

二次机会法思路: 与clock算法类似, 也是维护一个环形链表, 当发生页中断时, 检查指针指向的页对应的页表项的访问位和写入位, 如果都是0, 那么直接置换该页. 如果访问位及写入位有且仅有一位是1, 如果访问位和写入位都是1, 那么就把访问位置为0, 写入位置为1.

5 最不常用算法

思路: 缺页中断产生时, 选择访问次数最少的页作为被置换的页.

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

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

相关文章

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…

操作系统信号量和管程

1 背景 同步互斥回顾: 并发问题: 竞争条件(竞态条件) 多程序并发存在大量问题 同步 多线程共享公共数据的协调执行包括互斥与条件同步互斥: 在同一时间只有一个线程可以执行临界区 确保线程同步 需要高层次的编程抽象(如: 锁)从底层硬件支持编译 2 信号量 信号量是抽象数…

python里元组和列表的共同点和不同点_Python元组与列表的相同点与区别

列表和元组都属于有序序列&#xff0c;支持使用双向索引访问其中的元素、使用内置函数len()统计元素个数、使用运算符in测试是否包含某个元素、使用count()方法统计指定元素的出现次数和index()方法获取指定元素的索引。虽然有着一定的相似之处&#xff0c;但列表和元组在本质上…