一.理论

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/fkissx/p/4712959.html

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

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

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

  2. mahout中kmeans算法和Canopy算法实现原理

    本文讲一下mahout中kmeans算法和Canopy算法实现原理. 一. Kmeans是一个很经典的聚类算法,我想大家都非常熟悉.虽然算法较为简单,在实际应用中却可以有不错的效果:其算法原理也决定了 ...

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

    系列文章:<机器学习实战>学习笔记 最近看了<机器学习实战>中的第11章(使用Apriori算法进行关联分析)和第12章(使用FP-growth算法来高效发现频繁项集).正如章 ...

  4. 转载:最小生成树-Prim算法和Kruskal算法

    本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html 最小生成树-Prim算法和Kruskal算法 Prim算 ...

  5. 0-1背包的动态规划算法,部分背包的贪心算法和DP算法------算法导论

    一.问题描述 0-1背包问题,部分背包问题.分别实现0-1背包的DP算法,部分背包的贪心算法和DP算法. 二.算法原理 (1)0-1背包的DP算法 0-1背包问题:有n件物品和一个容量为W的背包.第i ...

  6. 用Spark学习FP Tree算法和PrefixSpan算法

    在FP Tree算法原理总结和PrefixSpan算法原理总结中,我们对FP Tree和PrefixSpan这两种关联算法的原理做了总结,这里就从实践的角度介绍如何使用这两个算法.由于scikit-l ...

  7. 字符串查找算法总结(暴力匹配、KMP 算法、Boyer-Moore 算法和 Sunday 算法)

    字符串匹配是字符串的一种基本操作:给定一个长度为 M 的文本和一个长度为 N 的模式串,在文本中找到一个和该模式相符的子字符串,并返回该字字符串在文本中的位置. KMP 算法,全称是 Knuth-Mo ...

  8. 最小生成树之Prim算法和Kruskal算法

    最小生成树算法 一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决. Prim算法 ...

  9. java实现最小生成树的prim算法和kruskal算法

    在边赋权图中,权值总和最小的生成树称为最小生成树.构造最小生成树有两种算法,分别是prim算法和kruskal算法.在边赋权图中,如下图所示: 在上述赋权图中,可以看到图的顶点编号和顶点之间邻接边的权 ...

随机推荐

  1. Docker中执行Shell出现乱码

    问题描述 最近遇到一个问题: 执行命令 docker exec f4af9b sh -c 'bash /tmp/build.sh' 命令在docker中执行shell,会出现中文乱码的问题.但是在do ...

  2. 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序

    [题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...

  3. SpringBoot与异步任务、定时任务、邮件任务

    异步任务 在需要开启异步的服务加上注解:@Async @Service public class AsyncService { //告诉SpringBoot这是一个异步任务,SpringBoot会自动 ...

  4. NodeJS让前端与后端更友好的分手

    学问   最近“上层建筑”在兴起国学热,所以公司几个月前决定开发一款名叫“学问”的有关于国学的app.     APP的详情页面还是由web来显现具体内容,有些类似于新闻页,图文混排什么的web是最适 ...

  5. 2016.5.18——leetcode:Majority Element

    Majority Element 本题收获: 1.初步了解hash,nth_element的用法 2.题目的常规思路 题目: Given an array of size n, find the ma ...

  6. 使用mysql的SUBSTRING_INDEX函数解决项目中编码非重复问题的实现方案!

    一 SUBSTRING_INDEX函数介绍 作用:按关键字截取字符串 substring_index(str,delim,count) 说明:substring_index(被截取字段,关键字,关键字 ...

  7. 【算法学习】Fhq-Treap(无旋Treap)

    Treap——大名鼎鼎的随机二叉查找树,以优异的性能和简单的实现在OIer们中广泛流传. 这篇blog介绍一种不需要旋转操作来维护的Treap,即无旋Treap,也称Fhq-Treap. 它的巧妙之处 ...

  8. ARM Linux 3.x的设备树(Device Tree)【转】

    转自:http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1.  ...

  9. Vim 快捷键整理【转】

    转自:http://blog.csdn.net/ceven2010/article/details/7406341 一.移动光标 1.左移h.右移l.下移j.上移k 2.向下翻页ctrl + f,向上 ...

  10. kworker内核工作队列详解

    工作队列是另一种将工作推后执行的形式,它可以把工作交给一个内核线程去执行,这个下半部是在进程上下文中执行的,因此,它可以重新调度还有睡眠.    区分使用软中断/tasklet还是工作队列比较简单,如 ...