⑴ 操作系统中在FIFO算法中,缺页中断率是什么怎么计算
FIFO是先进先出算法,当CPU需要访问的页不在内存中时产生了缺页中断,缺页中断是一段程序就是把外存中的页调入内存,还需要把内存中原有的页放回到外存。缺页中断率就是一个进程执行过程中缺页的次数除以需访问页的总次数得到缺页中断率,这个值越小越好。
⑵ 操作系统先进先出算法(FIFO)和先来先服务算法(FCFS)有啥本质区别吗 为什么感觉一样
这两个是确实一样的,但是有时候会说FCFS算法常常用FIFO队列来实现。
⑶ 操作系统题LRU,FIFO算法怎么做
其实这种题目是非常简单的:
页号:2,3,2,1,4,5,2,4,5,1,3,2,5,2
O: 1 3 4 1 共有4次中断
F: 2 3 1 4 5 2 1 共有7次中断
C: 3 2 1 2 4 5 1 共有7次中断
L: 3 1 2 4 5 1 共有6次中断
⑷ FIFO和LRU小结
一:FIFO算法
1.0,FIFO (First in First out) 先进先出(核心原则:最先进来的,最先淘汰); 其实在操作系统的设计理念中很多地方都是利用到了先进先出的思想就是因为这个原则简单切符合人们的惯性思维,具备公平性实现起来也简单,直接使用数据结构中的队列即可实现
1.1,在FIFO 中应该支持这些操作: 一,get(key),如果Cache中存在该key,则返回对应的value值,否则返回 -1; 二,set(key,value),如果Cache中存在该key,则重置value值,如果不存在则将该key插入到Cache中,若Cache已满则淘汰最先进入Cache的数据
1.2,那么利用什么数据结构来实现呢?有这一种思路, 利用一个双向链表保存数据,当来了新数据之后便添加到链表末尾,如果Cache存满数据,则把链表头部数据删除,然后把次年数据添加到链表末尾,在访问数据的时候,如果在Cache中存在该数据的话,则返回对应的value值,否则返回 -1,如果想提高访问效率,可以利用hashmap来保存每个key在链表中的位置(参考下面拓展)
二:LRU算法
1.0,LRU (Least recently used) 最近最久未使用调度,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也更高"; 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:
1,新数据插入到链表头部
2,每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
3,当链表满的时候,将链表尾部的数据丢弃
1.1,LRU的优缺点 1.命中率,当存在热点数据时,LRU的效率很好,但偶发性的,周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重 2,实现相对简单 3,命中时需要遍历链表,找到命中的数据块索引,然后需要将数据移到头部
2.0,LRU-K K代表最近使用的次数,因此LRU也可以认为是LRU-1,它主要是为了解决LRU算法"缓存污染"的问题,其核心思想是将"最近使用过1次"的判断标准扩展为"最近使用过K次"; 相比LRU要多维护一个队列,用于记录所有缓存数据被访问的历史,只有当数据的访问次数达到K次的时候,才将数据放入缓存.当需要淘汰数据时,LRU-k会淘汰第K次访问时间距离当前时间最大的数据.详细实现如下:
2.1,一,数据第一次被访问,加入到访问历史列表; 二,如果数据在访问历史列表里后达到K次访问,则按照一定(FIFO, LRU)淘汰; 三,当访问历史队列中的数据访问次数达到k次后,将数据l索引从历史队列删除,将数据移到缓存队列中,并缓存此数据,缓存队列重新按照时间排序; 四,缓存数据队列中被再次访问后,重新排序; 五,需要淘汰数据时,淘汰缓存队列中排在末尾的数据(即:淘汰倒数第K次访问离现在最久的数据)
2.2,LRU-K具有LRU的优点,同时能够避免LRU的缺点,实际应用中LRU-2是综合各种因素后最优的选择,LRU-3或者更大的K值命中率会高,但适应性差,需要大量的数据访问才能将历史记录缓存或者清除掉
2.3优缺,LRU-K降低了"缓存污染"带来的问题,命中率比LRU要高,但LRU-K队列是一个优先级队列,算法复杂度和代价相对LRU较高,并且LRU需要记录那些被访问过,但是没有达到K次也就是还没有放入缓存的对象,因此b内存消耗会比LRU要多,当然如果数据量很大的时候,内存消耗会比较可观
3.0,Two queues (2Q) 算法类似于LRU-2,不同点在于2Q将LRU-2算法中的访问历史队列(历史队列,还没有缓存数据)改为一个FIFO缓存队列,即: 2Q算法有两个缓存队列,一个是FIFO队列,一个是LRU队列.
3.1,当数据第一次访问时,2Q算法会将数据缓存在FIFO队列里面,当数据第二次被访问时,则将数据从FIFO队列移到LRU队列里面,两个队列各自按照自己的方法淘汰数据; 一,新访问的数据插入到FIFO队列, 二,如果数据在FIFO队列中一直没有被再次访问,则最终按照FOFO规则淘汰, 三,如果数据在FIFO队列中被再次访问,则将数据移到LRU队列头部, 四,如果数据在LRU队列再次被访问,则将数据移到LRU队列头部, 五,LRU队列淘汰末尾的数据
3.2,可能会感觉FIFO队列比LRU队列短,但并不代表这是算法的要求,实际应用中两者比例没有硬性要求
3.3,2Q算法命中率高于LRU,切需要两个队列,但两个队列本身都比较简单,代价是FIFO和LRU代价之和; 2Q算法和LRU-2算法命中率类似,内存消耗也比较接近,但对于最后的缓存数据来说,2Q减少一次从原始储存读取数据或者计算数据的操作
4.0,Multi Queue (MQ) 算法根据访问频率将数据划分为多个队列,不同的队列具有不同的访问优先级,其核心思想是:优先缓存访问次数多的数据
4.1,MQ算法将缓存划分为多个LRU队列,每个队列对应不同的访问优先级,访问优先级是根据访问次数计算出来的,详情: 一,新插入的数据放入Q0; 二,每个队列按照LRU管理数据; 三,当数据访问次数达到一定次数需要提升优先级时将数据从当前队列删除,加入到高一级的队列头部; 四,为了防止高优先级数据永远不被淘汰,每个队列淘汰数据时,将数据从缓存中删除,将数据加入Q-history头部; 五,需要淘汰数据时,从最低一级队列开始按照LRU淘汰,每个队列淘汰数据时,将数据从缓存中删除,将数据索引加入Q-history头部; 六,如果数据在Q-history中被重新访问,则重新计算其优先级,移到目标队列的头部; 七,Q-history按照LRU淘汰数据的索引
4.2,MQ降低了"缓存污染"带来的问题,命中率比LRU高,但MQ需要维护多个队列,切需要维护每个数据的访问时间,复杂度比较高,并且MQ需要记录每个数据的访问时间,需要定时扫码所有队列,代价也比较高
4.3,虽然MQ的队列看起来数量比较多,但由于所有队列之和受限于缓存容量的大小,因此这里多个队列长度之和和一个LRU队列是一样的,因此队列扫码性能接近
小结: 命中率 LRU-2 > MQ(2) > 2Q > LRU ; 复杂度 LRU-2 > MQ(2) > 2Q >LRU ; 代价 LRU-2 > MQ(2) > 2Q > LRU ; 需要注意的是,命中率并不是越高越好,实际中应该根据业务需求和对数据的访问情况进行分析选择,LRU虽然看起来命中率低一些,切存在"缓存污染"的问题,但其简单切代价小,实际中反而应用更多
拓展:基于 双链表的 LRU 实现: 一,传统意义的LRU算法是每一个Cache对象设置一个定时器,每次Cache命中则给定时器 +1,而Cache用完需要淘汰旧内容,放置新内容时就查看所有的计时器,并将使用的内容替换掉; 其弊端很明显,如果Cache的数量少,问题不大,但如果Cache的空间过大,达到10W或者100W以上,一旦需要淘汰,则需要遍历所有计时器,其性能与资源消耗巨大,效率也就非常的慢了; 二,双链表原理,将Cache的所有位置都用双链表连接起来,当一个位置被命中之后,就将通过调整链表的指向,将该位置调整到链表头的位置,新加入Cache直接加到链表头中,这样在多次进行Cache操作后,最近被命中的就会被向链表头方向移动,而没有命中的则向链表后部移动,链表尾则表示最近最少命中的Cache,当需要替换内容时我们只需要淘汰链表最后的部分即可!
如果错误或者建议,欢迎下方留言,谢谢!
⑸ 什么是FIFO
FIFO是First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。
是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单。
但缺点就是只能顺序写入数据,顺序读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
⑹ 如何用java实现fifo页面置换算法
[fifo.rar] - 操作系统中内存页面的先进先出的替换算法fifo
[先进先出页面算法程序.rar] - 分别实现最佳置换算法(optimal)、先进先出(fifo)页面置换算法和最近最久未使用(LRU)置换算法,并给出各算法缺页次数和缺页率。
[0022.rar] - 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断
[Change.rar] - 用java实现操作系统的页面置换 其中包括 最佳置换算法(Optimal)、先进先出算法(First-in, First-out) 、最近最久不用的页面置换算法(LeastRecently Used Replacement)三种算法的实现
[M_Management.rar] - 操作系统中内存管理页面置换算法的模拟程序,采用的是LRU置换算法
[detail_of_44b0x_TCPIP.rar] - TCPIP 程序包加载到44b0x 的ADS1.2工程文件的说明书。说名了加载过程的细节和如何处理演示程序和代码。演示代码已经上传,大家可以搜索
[.rar] - java操作系统页面置换算法: (1)进先出的算法(fifo) (2)最近最少使用的算法(LRU) (3)最佳淘汰算法(OPT) (4)最少访问页面算法(LFU) (注:由本人改成改进型Clock算法) (5)最近最不经常使用算法(NUR)
⑺ 操作系统题:页面置换算法 OPT FIFO LRU
fifo就是先进先出,可以想象成队列
lru是最久未使用,当需要替换页面的时候,向前面看,最久没使用的那个被替换
opt是替换页面的时候,优先替换后面最迟出现的。
不懂再问。。
⑻ 操作系统页面置换算法:第二次机会算法是什么
第二次机会算法:
与FIFO、OPT、LRU、NRU等同为操作系统中请求分页式管理方式的页面置换算法。
第二次机会算法的基本思想是与FIFO相同的,但是有所改进,避免把经常使用的页面置换出去。当选择置换页面时,依然和FIFO一样,选择最早置入内存的页面。但是二次机会法还设置了一个访问状态位。所以还要检查页面的的访问位。如果是0,就淘汰这页;如果访问位是1,就给它第二次机会,并选择下一个FIFO页面。当一个页面得到第二次机会时,它的访问位就清为0,它的到达时间就置为当前时间。如果该页在此期间被访问过,则访问位置为1。这样给了第二次机会的页面将不被淘汰,直至所有其他页面被淘汰过(或者也给了第二次机会)。因此,如果一个页面经常使用,它的访问位总保持为1,它就从来不会被淘汰出去。
第二次机会算法可视为一个环形队列。用一个指针指示哪一页是下面要淘汰的。当需要一个存储块时,指针就前进,直至找到访问位是0的页。随着指针的前进,把访问位就清为0。在最坏的情况下,所有的访问位都是1,指针要通过整个队列一周,每个页都给第二次机会。这时就退化成FIFO算法了。
⑼ 操作系统 页式管理中的置换算法 怎么看缺页
去年学过,现在记忆残缺,尽量回答
FIFO算法是先入先出算法吧,首先是有三个页面,所以一列只有三行
再者,根据先入先出的规则,后面读取的串替代内存中进来时间最久的串,若当前读取的串内存中已经有了,则内存中的页面不变
缺页就是没有重复的页面,即没有重复的页面共有10页,就缺页10次
LRU LFU就是看访问串前面或者后面会不会有使用到,具体哪个我忘了,把FIFO看明白了你就晓得了
FIFO:
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1
7 7 7 2 2 2 2 4 4 4 0 0 0 0 0 0 0
空0 0 0 0 3 3 3 2 2 2 2 2 1 1 1 1
空空1 1 1 1 0 0 0 3 3 3 3 3 2 2 2
你的打错了吧
PS:我上面说缺页10页是随便举的例子,题目中的缺页数是12,缺页不是很好计算的么,就是没有内容重复的内存页,数一下就知道了,还不知道就留言我吧
⑽ 操作系统原理与应用之 页面调度算法问题
FIFO:即先进先出算法,就是先进去的页在位置不够时先淘汰。所以具体如下:
主存开始为空
访问1,1不在主存中,产生缺页中断,添加,主存里现在是:1
访问2,2不在主存中,产生缺页中断,添加,主存里现在是:1,2
以此类推,
1,2,3(缺页中断)
1,2,3,6(缺页中断)
访问4,4不在主存中,缺页中断,主存满了,最早的1淘汰,主存里现在是:2,3,6,4
然后3,6,4,7(缺页中断,2淘汰)
然后3,3在主存中,不产生中断
然后6,4,7,2(缺页中断,3淘汰)
4,7,2,1(缺页中断,6淘汰)
4在主存中,不中断
7在主存中,不中断
7,2,1,5(缺页中断,4淘汰)
2,1,5,6(缺页中断,7淘汰)
5在主存中,不中断
2在主存中,不中断
1在主存中,不中断
整个FIFO过程就是这样。
LRU是最近最久未使用的先淘汰,具体如下:
1(缺页中断)
1,2(缺页中断)
1,2,3(缺页中断)
1,2,3,6(缺页中断)
2,3,6,4(缺页中断,1最久没用过,淘汰)
3,6,4,7(缺页中断,2最久没用过,淘汰)
3在主存中,不中断,3最近使用过,主存中顺序调整为6,4,7,3
4,7,3,2(缺页中断,6最久没用过,淘汰)
7,3,2,1(缺页中断,4最久没用过,淘汰)
3,2,1,4(缺页中断,7最久没用过,淘汰)
2,1,4,7(缺页中断,3最久没用过,淘汰)
1,4,7,5(缺页中断,2最久没用过,淘汰)
4,7,5,6(缺页中断,1最久没用过,淘汰)
5在主存中,调整顺序为4,7,6,5
7,6,5,2(缺页中断,4最久没用过,淘汰)
6,5,2,1(缺页中断,7最久没用过,淘汰)
整个LRU过程就是这样。
全手打求采纳谢谢~!如有问题请追问~