页替换算法 page replacement —— 最优算法 OPT / MIN 的 C with stl 实现

操作系统面置换算法最优置换(OPT算法 定义        最优置换算法OPT)是指,其所选择的被淘汰面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的面。采用最佳置换算法,通常可保证获得最低的缺率。但由于人们目前还无法预知一个进程在内存的若干个面中,哪一个面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法算法过程        现举例说明如下。 阅读详情

页替换算法 —— 最优算法 OPT/MIN 的 C with stl 实现

MIN的最优证明参考:http://algo2.iti.kit.edu/vanstee/courses/caching.pdf
文档里叫做LFD(longest forward distance)

输入

  • K, cache size
  • N, number of pages
  • N integers, represents the index of the quert pages in order

构想

把某次query的page id 命名为 queryId。在miss发生时,Min是要找出在cache的所有page id中,在query队列中最远出现的page id (命名这个变量为furthest),并用queryId替换掉cache中的furthest。

最开始的想法:

cache用hashset,每次miss时在query队列中找furthest
这样,查询某个 page id是否在cache中的时间复杂度是O(1),找到furthest的复杂度是O(N),替换的复杂度是O(1)。总共会有N次查询,因此总时间复杂度是O(N^2)

改进:

新建一个node

struct MinNode
{
   
   
    int pageId;
    int nextAppear;
    MinNode(int id)
    {
   
   
        pageId = id;
        nextAppear = -1;
    }
    MinNode(int id, int next)
    {
   
   
        pageId = id;
        nextAppear = next;
    }
};

再定义两个数据结构:

  • unordered_map<int, list<MinNode>::iterator> queryMap;
  • list<MinNode> queryList;

读入query队列是用for循环,for(i = 0; i < N; i++),先检查queryMap中有没有要查询的page id,如果没有,用第一种构方法MinNode(int id)把这个id封装成MinNode(相当于初始化nextAppear为-1)并加到queryList尾部,在queryMap中加入<key = page id, value = --queryList.end()>

如果queryMap中已经有要查询的page id了,那么更新这个MinNode——把它的nextAppear设置成i,同样还是用第一种构方法MinNode(int id)把这个id封装成MinNode并加到queryList尾部,在queryMap中加入<key = page id, value = --queryList.end()>

这一步完成之后,queryList里就保存了输入的query队列,并且还保留了每一个query的page id,与这个page id最近的下一个相同page id的位置(nextAppear),如果没有下一个,那么nextAppear为-1。

接下来就是cache,也用list<MinNode>。当miss发生时,只需要遍历cache就可以找到要被替换的node。因此找到furthest的复杂度降为O(K)。虽然cache用list实现,但是查询某个page id是否在cache中的复杂度也可以降为O(1),这只需要通过map+list的方式即可实现,具体可以看代码。替换的复杂度还是O(1)。因此总时间复杂度是O(KN)。

代码

void algoMin(int K, int N)
{
   
   
    char *line = NULL;
    size_t len = 0;
    ssize_t nread;
 
大数据算法课程笔记8a:page replacement algorithm 本节课主要是介绍page replacement algorithm的相关算法,包括offline和online。1. 问题简介这个是体系结构里面的经典问题,内存小、硬盘大,内存快、硬盘慢。所以CPU从内存中读取数据,而内存从硬盘中读取数据。那我们希望内存读取硬盘的次数尽量减少,这样可以减少程序的运行时间,而减少次数的算法主要依赖于page replacement algorithm。所谓page 阅读详情

相关推荐

C语言两个简单的存储器管理的面置换算法(FIFO and LRU) Page-Replacement Algorithm

<br />一个先近先出置换算法,一个最近最久未使用算法,模拟一下过程。<br /> <br /> <br />/*面置换算法,先近先出算法,就是个队列操作<br /> */<br /> #include <stdio.h><br /> #include <conio.h><br /> #include <time.h><br /> #include <stdlib.h><br /><br /> //内存可提供的面的个数<br /> #define MEMERY_PAGE_NUM 3<br

Fish1112的专栏 4404

面置换算法Optimal、FIFO、LRU)

操作系统常见三大面置换算法Optimal、FIFO、LRU。在其中的测试用例才有了《计算机操作系统》第三版,书中的例子作为测试。

式存储管理: 最佳置换(OPT)--先进先出面置换(FIFO)--最久未使用置换(LRU)

式存储管理: 最佳置换--先进先出面置换--最久未使用置换1.背景进程运行时,若其访问的面不在内存而需将其调入,但内存已无空闲空间时,就需要从内存中调出一程序或数据,送入磁盘的对换区。选择调出面的算法就称为面置换算法。好的面置换算法应有较低的面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的面先调出。2.置换策略理论1. 最佳置换算法(OPT)最佳(Optim...

一只IT小小鸟 2万+

面置换算法

FIFO算法 先入先出,即淘汰最早调入的面。 OPT(MIN)算法 选未来最远将使用的淘汰,是一种最优的方案,可以证明缺数最小。 可惜,MIN需要知道将来发生的事,只能在理论中存在,实际不可应用。 LRU(Least-Recently-Used)算法 用过去的历史预测将来,选最近最长时间没有使用的淘汰(也称最近最少使用)。 LRU准确实现:计数器法,码栈法。 由于代价较高,通常不使用准确实现,而是采用近似实现,例如Clock算法。 内存抖动现象: 面的频繁更换,导致整个系统效率急剧下降,这

8163

lru替换算法_LRU替换算法分析和Belady异常

lru替换算法Problem statement: 问题陈述: Write a program to simulate Least Recently Used (LRU) page replacement algorithm for the following page reference string: 9, 10, 11, 7, 12, 8, 7, 6, 12, 5, 4, 3, 10...

cumtv80668的专栏 2074

LRU面置换算法模拟

一、设计目的1、用C语言实现最近最久未使用(LRU)置换算法。2、了解内存分管理策略3、掌握调策略4、掌握一般常用的调度算法5、选取调度算法中的典型算法,模拟实现 二、设计任务在Window98/2000 系统的TC2.0环境下运行程序;通过从一般常用的调算法中选取典型算法LRU,了解面管理的相关细节,并用程序设计实现LRU。 三、设计内容与步骤分存储管理将一个进程的逻辑地址空间分成若干

fertiland的专栏 2万+

表置换算法之最佳置换算法(OPT),先进先出置换算法(FIFO),最近最久未使用置换算法(LRU),时钟置换算法(CLOCK)

最佳置换算法OPTOptimal):每次选择淘汰的面将是以后永不使用,或者在最长时间内不再被访问的面这样可以保证最低的缺率。先进先出置换算法(FIFO):每次选择淘汰的面是最早进入内存的面。最近最久未使用置换算法(LRU,least recently used):每次淘汰的面是最近最久未使用的面。

jungleirim的博客 1万+

【操作系统】OPT算法

B、考虑下述面走向:6,7,5,2,6,7,3,6,7,5,2,3 当分配的内存物理块数量分别为3和4时: OPT(最优面置换算法)的缺次数分别是多少? OPT(最佳置换算法):从主存中移出永远不再需要的面,如果没有这样的面存在,那就选择最长时间不需要访问的面,来保证最低的缺率 当分配的内存物理块数量为3时 先放入6,7,5,当放入2的时候,显而易见,最长时间...

qq_42615643的博客 3万+

操作系统(五)面置换算法与分配策略

王道考研关于请求分管理时的面置换算法

qq_56517253的博客 5662

替换算法OPT最优性证明

如果t时刻留A(也就是换掉B or C),那么到达t后首次要用A的时候,有且仅有两种情况,A真的留到了那个时候,被用到了,或者没被用到(这是因为x这段时间有可能换掉了A)。如果t时刻留B,C,也是同样的道理,有可能真的因为保留而被用到;最接近t的(这里的"t后"认为包含t),替换掉的是t后首次要用时刻最远离t的,甚至以后都不用。问题说明:当且仅当遇到一个面的时候,这个面会装入内存,抉择替换谁(如果满了),目标是最大化命中次数。,因为"用A"在"用B"之前,这是时间上的包含关系。

weixin_67870448的博客 370

问三:面置换算法有哪些?

概述: 在程序运行过程中,如果要访问的面不在内存中,就发生缺中断从而将该调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个面到磁盘对换区中来腾出空间。 面置换算法和缓存淘汰策略类似,可以将内存看成磁盘的缓存。在缓存系统中,缓存的大小有限,当有新的缓存到达时,需要淘汰一部分已经存在的缓存,这样才有空间存放新的缓存数据。 面置换算法的主要目标是使面置换频率最低(也可以说...

向代码提问 1082

最佳置换算法

最佳置换算法OPT):从主存中移出永远不再需要的面;如无这样的面存在,则选择最长时间不需要访问的面。于所选择的被淘汰面将是以后永不使用的,或者是在最长时间内不再被访问的面,这样可以保证获得最低的缺率。  最佳置换算法可以用来评价其他算法。假定系统为某进程分配了三个物理块,并考虑有以下面号引用串:     7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2,...

jack450250844的博客 3万+

page replacement

<br />1.Optimal Algorithm 最佳置换算法<br />2.The NRU (Not Recently Used) Page Replacement Algorithm 最近末使用<br />3.The First-In, First-Out (FIFO) Page Replacement Algorithm 先进先出置换算法<br />4.Least Recently Used (LRU) 最近最少使用<br />5.The Second Chance Page Replacement

shootogawa的专栏 1729

JAVA实现面置换算法OPT,FIFO,LRU)

public class page_replacement { private int n;//内储框 private int m;//访问次数 private int F;//没能直接找到的次数,(F/m)为缺率 private Listlist=null;//访问地址走向 private Mapmap=null; public page

fengsigaoju的博客 2万+

面置换算法-FIFO、LRU、OPT

操作系统的虚拟存储器管理技术中,有一项比较重要的分支叫分存储管理。分管理是在架中装入一些需要使用或过去使用过的面,但是架的数量是有限的,这里就会用到一些面置换算法,使得面访问的效率提高。判断一个置换算法优劣的指标就是缺率,缺是指当前的架中没有需要访问的面,而需要将该面加入其中一个架。缺率=访问缺次数/访问总次数。 先进先出算法(FIFO)是一个实现起来比较简单的

星星之火 5047

【笔试-基础】FIFO、LRU、OPT这三种置换算法的缺次数

FIFO:first in first out  先进先出算法 LRU:least recently used  近期最少使用算法 OPT:optimal page replacement  最佳面置换算法 考虑下述面走向:           1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6      当内存

影儿的专栏 6659

常见的面置换算法概述 OPT、FIFO、SCR、CLOCK、改进型CLOCK

最佳面置换算法 OPT算法 最佳面置换算法是Belady于1966年提出的一种理论上的算法。是一种保证最少的缺率的理想化算法算法描述 输入面号引用串: 如果框中的某个面P以后永不使用,则该面为淘汰面Pt。 如果每个P都会再次被访问,那么其中最长未来时间内不再被访问的面为淘汰面Pt。 先进先出面置换算法 FIFO算法 算法描述 优先淘汰最早进入内存的面,亦即在内存中...

txcjhaw的博客 4195

最优面置换算法

最佳面置换算法:其所选择的被淘汰面将是以后永不使用的,或许是在最长(未来)时间内不再被访问的面。 总结:置换将来最长时间不需要执行的面 e请求时: 需要置换(abcd)中一个面, a 要在7访问 b在6 c 在 9 d 在 10 所以要置换d 如下图: ...

qq_35367566的博客 2009
上一篇: 操作系统课程项目 OS project —— Pintos from Project 1 to Project 3
下一篇: 常微分方程 ODE -- Existence and Uniqueness of Solutions, Dependence of Solutions on Initial Conditions
Arisdodles
博客等级 码龄9年 10粉丝 14原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值