lru与fifo什么情况下华图押题密卷命中率率接近

以下试题来自:
问答题某系统有4个页框,某个进程页面使用情况见表3-18,请问采用FIFO、LRU、简单CLOCK和改进型CLOCK置换算法,将会替换哪一页
表3-18 进程页面使用情况
上次引用时间
其中,R是读标志位,M是修改标志位。 1)F1FO置换算法选择最先进入内存的页面进行替换。由表中装入时间可知,第2页最先进入内存,故HFO置换算法将选择第2页替换。 ......
为您推荐的考试题库
你可能感兴趣的试题
1.问答题 发生缺页的原因是当前访问的页面不在主存,需要将该页调入主存。
对于第一次访问的页面,无论当前主存是否已满,都会发生一...... 2.问答题 由于驻留集大小任意,现要求两种算法的替换页面和缺页情况完全一样,就意味着要求FIFO与LRU的置换选择一致。FIFO是替换最早进入...... 3.问答题 设快表命中率为p,则应满足:
p×(10+100)+(1-)×(10+100+100+100)≤120(ns)
解得p≥95% 4.问答题 二级页表的平均访问时间计算同理:
98%×(10+100)+(1-98%)×(10+100+100+100)=114(ns) 5.问答题 根据页面走向,使用最近最久未使用页面淘汰算法时,页面置换情况见下表。
物理块数为3时:<table width="529" height="111"......
热门相关试卷
最新相关试卷1497人阅读
操作系统(4)
计算三种缺页中断的缺页数,缺页率和命中率
FIFO,LRU,OPT
#include&stdio.h&
#include&malloc.h&
#include&stdlib.h&
#include&time.h&
#include&string.h&
** 默认页表大小为3
#define PAGETABLELENGTH 3
//输出函数,四个参数,缺页数,缺页率和命中率,算法名称
//无返回值
void output( int pageFault, double pageFaultRate, double hitProbability , char *name)
printf(&\n=====================\n%s:\n&,name);
printf(&缺页数是: %d\n&,pageFault);
printf(&缺页率是: %2.2lf%\n&,pageFaultRate*100);
printf(&命中率是: %2.2lf%\n&,hitProbability*100);
//判断是否命中
int pageHited(int *arr,int begin, int length, int equNum)
for(int i=i&++i)
if(arr[i]==equNum)
return -1;
void arrayInit( int *arr, int length)
for(int i=0;i&++i)
arr[i] = 0;
//参数是一个指针以及数组长度
//无返回参数
//输出,缺页数,缺页率和命中率
void fifo( const int *const arr, int length)
int pageTable[PAGETABLELENGTH];
int hitCount = 0;
int firstIn = 0;
int pageCount = 0;
arrayInit(pageTable, PAGETABLELENGTH);
for(int i=0; i& ++i)
//判断是否命中
int hit = pageHited( pageTable, 0, pageCount, arr[i]);
if(hit!=-1)
//page已经填满
if(pageCount== PAGETABLELENGTH)
pageTable[firstIn] = arr[i];
firstIn = (++firstIn)%PAGETABLELENGTH;
//pagetable未填满
pageTable[pageCount] = arr[i];
pageCount++;
output(length-hitCount,(length-hitCount)/(double)length, (double)hitCount/length, &FIFO& );
//参数是一个指针以及数组长度
//无返回参数
//输出,缺页数,缺页率和命中率
void lru( const int *const arr, int length)
int hitCount = 0;
int pageTable[PAGETABLELENGTH];
//记录page元素里最近使用的位置
int pageLastUsed[PAGETABLELENGTH];
int pageCount = 0;
arrayInit(pageTable, PAGETABLELENGTH);
arrayInit(pageLastUsed, PAGETABLELENGTH);
for(int i=0;i&++i)
int hit = pageHited(pageTable,0,pageCount,arr[i]);
if(hit!=-1)
pageLastUsed[hit] =
if(pageCount==PAGETABLELENGTH)
int min = 0;
for(int plu = 1; plu&PAGETABLELENGTH; ++plu)
min = pageLastUsed[min] & pageLastUsed[plu]?min:
pageTable[min] = arr[i];
pageTable[pageCount] = arr[i];
pageLastUsed[pageCount++] =
output(length-hitCount,(length-hitCount)/(double)length, (double)hitCount/length ,&LRU&);
//参数是一个指针以及数组长度
//无返回参数
//输出,缺页数,缺页率和命中率
void opt( int *arr, int length)
int hitCount = 0;
int pageTable[PAGETABLELENGTH];
int pageFuture[PAGETABLELENGTH];
int pageCount = 0;
arrayInit(pageTable,PAGETABLELENGTH);
arrayInit(pageFuture,PAGETABLELENGTH);
for(int i=0; i& ++i)
int hit = pageHited(pageTable, 0, pageCount, arr[i]);
if(hit!=-1)
//table 满 ,计算在最近的将来谁不会被用到
if(pageCount == PAGETABLELENGTH)
for(int pi=0; pi&pageC ++pi)
int find = pageHited(arr,i+1,length,pageTable[pi]);
if(find!=-1)
pageFuture[pi] =
pageFuture[pi] = length+1;
int max = 0;
for(int pii=1; pii&pageC ++pii)
max = pageFuture[max] & pageFuture[pii]? max:
pageTable[max] = arr[i];
//table未满
pageTable[pageCount++] = arr[i];
output(length-hitCount,(length-hitCount)/(double)length, (double)hitCount/length,&OPT&);
//参数是一个int型指针,数组长度
//随机生成一个长度为11-20的数组,代表着页的执行顺序,
//数字大小为1-9,随机生成,返回数组head指针
int* productRandomArray( int *length)
//随机数种子
srand(int(time(0)));
rand()%10+11;
//数组长度
int *head = (int *)malloc(sizeof(int)*(*length));
if(head ==NULL)
printf(&malloc error!\n&);
return NULL;
//数组赋值
for(int i=0;i&(*length);++i)
head[i] = rand()%9+1;
int main()
head = productRandomArray(&length);
if(head == NULL)
return -1;
printf(&=====================Table 大小设置为 3 ==========================\n&);
printf(&====== 实验发现在大多数情况下FIFO 和 LRU 的命中率是一样的 ========\n&);
printf(&======================实验数据是随机生成的========================\n&);
for(int i=0;i&i++)
printf(&%d &,head[i]);
fifo(head,length);
lru(head, length);
opt(head, length);
getchar();
getchar();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:38969次
积分:1081
积分:1081
排名:千里之外
原创:61篇
转载:17篇
(1)(3)(4)(3)(1)(19)(3)(5)(14)(35)扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
计算机组成与系统结构作业题假设主存只有 a,b,c 三个页框,组成 a 进 c 出的 FIFO 队列,进程访问页面的序列是8,4,5,6,4,8,6,4,8,8,6,4 号.用列表法求采用 FIFO+LRU 替换策略时的命中率.
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
哈哈,答案来啦!
为您推荐:
其他类似问题
扫描下载二维码python写FIFO与LRU算法-3
FIFO、LRU 调度算 实验类型 法 综合 【实验目的、要求】 实验目的、要求】 (1)通过编写程序实现请求分页存储管理页面 Optimal、FIFO、LRU 调度算法,使学生掌握虚拟...
最久未使用算法(LRU) 3 最久未使用算法(LRU) FIFO 算法和 OPT 算法之间的主要差别是,FIFO 算法利用页面进入内存后的时间 长短作为置换依据,而 OPT 算法的依据...
计算并输出下述各种算法在不同内存容量下的命中率。 先进先出的算法 (FIFO); 最近最少使用算法 (LRu); 最少访问页面算法 (LFu); 最近最不经常使用算法 (NUR...
与分配给作业的主存块数,使用队列作为数据结构编写算法,实现统 计缺页次数与...(); void Fifo(); void Lru(); Init(); cout&&&请选择置换方法&&&endl...
此题答案为: 答: 首先采用 FIFO, m=3 时, 当 缺页次数=9, m=4 当时,缺页次数=10。 采用 LRU 算法,当 m=3 时,缺页次数=10;当 m=4 时,缺页...
页面替换算法一、实验目的 1,通过模拟实现几种基本页面置换的算法,了解虚拟存储...(FIFO)&&&&\n&&& cout&&&U 最近最少使用(LRU)算法&&&&\n&&&...
4) 最不经常使用算法(LFU) 二.实验目的: 1、用 C 语言编写 OPT、FIFO、LRU,LFU 四种置换算法。 2、熟悉内存分页管理策略。 3、了解页面置换的算法。 4、...关于LRU算法_词汇网
关于LRU算法
责任编辑:词汇网 发表时间: 12:34:32
一,LRU原理LRU(Least Recently Used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1.新数据插入到链表头部;2.每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3.当链表满的时候,将链表尾部的数据丢弃。分析【命中率】当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。【复杂度】实现简单。【代价】命中时需要遍历链表,找到命中的数据块索引,然后需要将数据移到头部。二,LRU-K原理LRU-K中的K代表最近使用的次数,因此LRU可以认为是LRU-1。LRU-K的主要目的是为了解决LRU算法“缓存污染”的问题,其核心思想是将“最近使用过1次”的判断标准扩展为“最近使用过K次”。实现相比LRU,LRU-K需要多维护一个队列,用于记录所有缓存数据被访问的历史。只有当数据的访问次数达到K次的时候,才将数据放入缓存。当需要淘汰数据时,LRU-K会淘汰第K次访问时间距当前时间最大的数据。详细实现如下:1.数据第一次被访问,加入到访问历史列表;2.如果数据在访问历史列表里后没有达到K次访问,则按照一定规则(FIFO,LRU)淘汰;3.当访问历史队列中的数据访问次数达到K次后,将数据索引从历史队列删除,将数据移到缓存队列中,并缓存此数据,缓存队列重新按照时间排序;4.缓存数据队列中被再次访问后,重新排序;5.需要淘汰数据时,淘汰缓存队列中排在末尾的数据,即:淘汰“倒数第K次访问离现在最久”的数据。LRU-K具有LRU的优点,同时能够避免LRU的缺点,实际应用中LRU-2是综合各种因素后最优的选择,LRU-3或者更大的K&#20540;命中率会高,但适应性差,需要大量的数据访问才能将历史访问记录清除掉。分析【命中率】LRU-K降低了“缓存污染”带来的问题,命中率比LRU要高。【复杂度】LRU-K队列是一个优先级队列,算法复杂度和代价比较高。【代价】由于LRU-K还需要记录那些被访问过、但还没有放入缓存的对象,因此内存消耗会比LRU要多;当数据量很大的时候,内存消耗会比较可观。LRU-K需要基于时间进行排序(可以需要淘汰时再排序,也可以即时排序),CPU消耗比LRU要高。三,Twoqueues(2Q)原理Twoqueues(以下使用2Q代替)算法类&#20284;于LRU-2,不同点在于2Q将LRU-2算法中的访问历史队列(注意这不是缓存数据的)改为一个FIFO缓存队列,即:2Q算法有两个缓存队列,一个是FIFO队列,一个是LRU队列。实现当数据第一次访问时,2Q算法将数据缓存在FIFO队列里面,当数据第二次被访问时,则将数据从FIFO队列移到LRU队列里面,两个队列各自按照自己的方法淘汰数据。详细实现如下:1.新访问的数据插入到FIFO队列;2.如果数据在FIFO队列中一直没有被再次访问,则最终按照FIFO规则淘汰;3.如果数据在FIFO队列中被再次访问,则将数据移到LRU队列头部;4.如果数据在LRU队列再次被访问,则将数据移到LRU队列头部;5.LRU队列淘汰末尾的数据。注:上图中FIFO队列比LRU队列短,但并不代表这是算法要求,实际应用中两者比例没有硬性规定。分析【命中率】2Q算法的命中率要高于LRU。【复杂度】需要两个队列,但两个队列本身都比较简单。【代价】FIFO和LRU的代价之和。2Q算法和LRU-2算法命中率类&#20284;,内存消耗也比较接近,但对于最后缓存的数据来说,2Q会减少一次从原始存储读取数据或者计算数据的操作。四, MultiQueue(MQ)原理MQ算法根据访问频率将数据划分为多个队列,不同的队列具有不同的访问优先级,其核心思想是:优先缓存访问次数多的数据。实现MQ算法将缓存划分为多个LRU队列,每个队列对应不同的访问优先级。访问优先级是根据访问次数计算出来的,例如详细的算法结构图如下,Q0,Q1....Qk代表不同的优先级队列,Q-history代表从缓存中淘汰数据,但记录了数据的索引和引用次数的队列:如上图,算法详细描述如下:1.新插入的数据放入Q0;2.每个队列按照LRU管理数据;3.当数据的访问次数达到一定次数,需要提升优先级时,将数据从当前队列删除,加入到高一级队列的头部;4.为了防止高优先级数据永远不被淘汰,当数据在指定的时间里访问没有被访问时,需要降低优先级,将数据从当前队列删除,加入到低一级的队列头部;5.需要淘汰数据时,从最低一级队列开始按照LRU淘汰;每个队列淘汰数据时,将数据从缓存中删除,将数据索引加入Q-history头部;6.如果数据在Q-history中被重新访问,则重新计算其优先级,移到目标队列的头部;7.Q-history按照LRU淘汰数据的索引。分析【命中率】MQ降低了“缓存污染”带来的问题,命中率比LRU要高。【复杂度】MQ需要维护多个队列,且需要维护每个数据的访问时间,复杂度比LRU高。【代价】MQ需要记录每个数据的访问时间,需要定时扫描所有队列,代价比LRU要高。注:虽然MQ的队列看起来数量比较多,但由于所有队列之和受限于缓存容量的大小,因此这里多个队列长度之和和一个LRU队列是一样的,因此队列扫描性能也相近。五,LRU类算法对比由于不同的访问模型导致命中率变化较大,此处对比仅基于理论定性分析,不做定量分析。对比点对比命中率LRU-2>MQ(2)>2Q>LRU复杂度LRU-2>MQ(2)>2Q>LRU代价LRU-2>MQ(2)>2Q>LRU实际应用中需要根据业务的需求和对数据的访问情况进行选择,并不是命中率越高越好。例如:虽然LRU看起来命中率会低一些,且存在”缓存污染“的问题,但由于其简单和代价小,实际应用中反而应用更多。
上一集:没有了 下一集:
相关文章:
最新添加资讯
24小时热门资讯
附近好友搜索

我要回帖

更多关于 fifo和lru 的文章

 

随机推荐