FIFO调度算法和LRU算法

一.理论

FIFO:先进先出调度算法

LRU:最近最久未使用调度算法

两者都是缓存调度算法,经常用作内存的页面置换算法。

打一个比方,帮助你理解。你有很多的书,比如说10000本。由于你的书实在太多了,你只能放在地下室里面。你看书的时候不会在地下室看书,而是在书房看书。每次,你想看书都必须跑到地下室去找出来你想看的书,然后抱回来放到书桌上,之后才开始看。还有就是,有一些书你会反复的看,今天看了也许过几天又要看。总之,你自己是不知道你哪天会需要看哪本书的。你的老师每天下课的时候会给你布置一个书单,让你晚上回去去看哪本书。(假设你老师让你看的书在你的地下室里面都有)跑地下室当然是非常麻烦的,所以你希望你的经常看的那些书最好放在书桌上。但是你的书房的书桌同时只能摆放10本书(这个是假设的啊)。那么,问题来了。到底把哪些说留在书桌上最好呢?这里说的最好,就是说你尽量少的跑地下室去找书。为了解决这个问题,人们发明了很多的算法。

其中,比较常见的就是上面这两种:FIFO算法和LRU算法。

FIFO算法:

很简单,我把书桌上的10本书按照放置时间先后堆放成一堆。这里的放置时间,就是说这本书在我的书桌上放了几天了。每次要看书的时候,我先在书桌上找,找到就直接可以读了。读完之后放回原来的位置就可以,不打乱顺序。如果书桌上面没有我要读的书,就去地下室找。找来之后,我就把书桌上放的时间最长的那本(也就是书堆里面最下面的那本书)放回地下室。然后把我今天需要看的这本书放在书堆的最上面。

LRU算法:

也不难,我把书桌上的10本书按照阅读时间先后堆放成一堆。这里的阅读时间,就是说我最近一次读这本书是几天之前。每次要看书的时候,我先在书桌上找,找到就直接可以读了。读完之后放在书堆的最上面。如果书桌上面没有我要读的书,就去地下室找。找来之后,我就把书桌上最久没有阅读的那本(也就是书堆里面最下面的那本书)放回地下室。然后把我今天需要看的这本书放在书堆的最上面。上面这个比方,相信你可以看明白吧。这里的地下室对应内存,书桌对应缓存,书对应页面。

二.缺页次数

在一个采用页式虚拟存储管理的系统中,有一用户作业,它依次要访问的页面序列是1,2,3,4,1,2,5,1,2,3,4,5.假定分配给该作业的页数为3且作业初始时未装载页面,那么采用FIFO调度算法产生的缺页中断数为多少,采用LRU调度算法产生的缺页中断数为多少?
 FIFO算法:(First In First Out),先进先出,一般看到这类思想,首先想到的数据结构应当是队列,但是我们这里最好是用vector,因为调页过程中需要遍历队列检查该页是否已存在,当算法的存储结构是队列或栈,但实现过程中需要经常遍历全队列或全栈的内容时,最好用vector,这是《剑指Offer》面试题25给我的启发。给出一个访问序列的模拟算法到此应该非常简单了,为了节省时间,下面仅给出题目计算步骤,代码今后再补。
           访问序列:1,2,3,4,1,2,5,1,2,3,4,5
                   1,2,3先调入内存,内存结构:3      2      1    缺页次数:3  
                   4调入内存,1调出,  内存结构:4      3      2    缺页次数:4
                   1调入内存,2调出,  内存结构:1      4      3    缺页次数:5
                   2调入内存,3调出,  内存结构:2      1      4    缺页次数:6
                   5调入内存,4调出,  内存结构:5      2      1    缺页次数:7
                   1存在,内存结构不改变
                   2存在,内存结构不改变
                   3调入内存,1调出,  内存结构:3      5      2    缺页次数:8
                   4调入内存,2调出,  内存结构:4      3      5    缺页次数:9
                   5存在,内存结构不改变
            共缺页9次,缺页中断率 = 缺页中断次数 / 总访问页数 = 9 / 12

LRU算法:最近最少使用(Least Recently Used),先看一下调页过程
           访问序列:1,2,3,4,1,2,5,1,2,3,4,5
                1,2,3先调入内存,内存结构:3      2      1    缺页次数:3  
                4调入内存,1调出,  内存结构:4      3      2    缺页次数:4
                1调入内存,2调出,  内存结构:1      4      3    缺页次数:5
                2调入内存,3调出,  内存结构:2      1      4    缺页次数:6
                5调入内存,4调出,  内存结构:5      2      1    缺页次数:7
           到这一步其实和FIFO并没有区别
              1调入内存,由于内存中存在1,故没有缺页中断,但由于1最近被访问过,所以要将其位置调换,
              使它最后一个被淘汰,内存结构:1      5      2
              2调入内存,没有缺页中断,但内存位置要变化,内存结构:2      1      5
                  3调入内存,5调出,  内存结构:3      2      1    缺页次数:8
                  4调入内存,1调出,  内存结构:4      3      2    缺页次数:9
                  5调入内存,2调出,  内存结构:5      4      3    缺页次数:10
           共缺页10次,缺页中断率:10/12

原文地址:https://www.cnblogs.com/yuanninesuns/p/8542024.html

时间: 2024-10-13 14:07:50

FIFO调度算法和LRU算法的相关文章

使用Apriori算法和FP-growth算法进行关联分析(Python版)

===================================================================== <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记也包含一些其他python实现的机器学习算法 算法实现均采用python github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python ==================================

最短路径Dijkstra算法和Floyd算法整理、

转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径—Dijkstra算法和Floyd算法 Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹

Dijkstra算法和Floyed算法

写的比较好的三篇文章 Floyed算法 最短路径-Dijkstra算法和Floyed算法 最短路径之Dijkstra算法和Floyed算法 哈哈,他山之石,可以攻玉 自己有心得,慢慢补充

链接挖掘算法之PageRank算法和HITS算法

参考资料:http://blog.csdn.net/hguisu/article/details/7996185 更多数据挖掘算法:https://github.com/linyiqun/DataMiningAlgorithm 链接分析 在链接分析中有2个经典的算法,1个是PageRank算法,还有1个是HITS算法,说白了,都是做链接分析的.具体是怎么做呢,继续往下看. PageRank算法 要说到PageRank算法的作用,得先从搜索引擎开始讲起,PageRank算法的由来正式与此相关. 搜

最小生成树之 prim算法和kruskal算法(以 hdu 1863为例)

最小生成树的性质 MST性质:设G = (V,E)是连通带权图,U是V的真子集.如果(u,v)∈E,且u∈U,v∈V-U,且在所有这样的边中, (u,v)的权c[u][v]最小,那么一定存在G的一棵最小生成树,(u,v)为其中一条边. 构造最小生成树,要解决以下两个问题: (1).尽可能选取权值小的边,但不能构成回路(也就是环). (2).选取n-1条恰当的边以连接网的n个顶点. Prim算法的思想: 设G = (V,E)是连通带权图,V = {1,2,-,n}.先任选一点(一般选第一个点),首

Prim算法和Kruskal算法的正确性证明

今天学习了Prim算法和Kruskal算法,因为书中只给出了算法的实现,而没有给出关于算法正确性的证明,所以尝试着给出了自己的证明.刚才看了一下<算法>一书中的相关章节,使用了切分定理来证明这两个算法的正确性,更加简洁.优雅并且根本.相比之下,我的证明带着许多草莽气息,于此写成博客,只当是记录自己的思考 ------------------------------------------- 说明: 本文仅提供关于两个算法的正确性的证明,不涉及对算法的过程描述和实现细节 本人算法菜鸟一枚,提供的

最小生成树-Prim算法和Kruskal算法

原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小.该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现:并在195

时空权衡之输入增强 ----字符串匹配算法Horspool算法和Boyer-Moore算法

在算法设计的时空权衡设计技术中,对问题的部分或者全部输入做预处理,对获得的额外信息进行存储,以加速后面问题的求解的思想,我们称作输入增强. 其中字符串匹配算法Horspool算法和Boyer-Moore算法就是输入增强的例子. 首先了解一下字符串匹配的概念.我们把在一个较长的n个字符的串中,寻找一个给定的m个字符的串的问题,称为字符串匹配问题.较长的串称为text,而需要寻找的串称为pattern. 字符串匹配问题的蛮力算法很好理解:我们把pattern与text第一个字符对齐,从左往右比较pa

使用Apriori算法和FP-growth算法进行关联分析

系列文章:<机器学习>学习笔记 最近看了<机器学习实战>中的第11章(使用Apriori算法进行关联分析)和第12章(使用FP-growth算法来高效发现频繁项集).正如章节标题所示,这两章讲了无监督机器学习方法中的关联分析问题.关联分析可以用于回答"哪些商品经常被同时购买?"之类的问题.书中举了一些关联分析的例子: 通过查看哪些商品经常在一起购买,可以帮助商店了解用户的购买行为.这种从数据海洋中抽取的知识可以用于商品定价.市场促销.存活管理等环节. 在美国国会