页面置换算法

缓存算法(页面置换算法)-FIFO、LFU、LRU

天大地大妈咪最大 提交于 2020-03-10 16:38:39
转自:http://www.cnblogs.com/dolphin0520/ 1.FIFO算法   FIFO(First in First out),先进先出。其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为什么这个原则在很多地方都会用到呢?因为这个原则简单、且符合人们的惯性思维,具备公平性,并且实现起来简单,直接使用数据结构中的队列即可实现。   在FIFO Cache设计中,核心原则就是: 如果一个数据最先进入缓存中,则应该最早淘汰掉 。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉。在FIFO Cache中应该支持以下操作;    get(key):如果Cache中存在该key,则返回对应的value值,否则,返回-1;   set(key,value):如果Cache中存在该key,则重置value值;如果不存在该key,则将该key插入到到Cache中,若Cache已满,则淘汰最早进入Cache的数据。    举个例子:假如Cache大小为3,访问数据序列为set(1,1),set(2,2),set(3,3),set(4,4),get(2),set(5,5)   则Cache中的数据变化为:   (1,1) set(1,1)   (1,1) (2,2) set(2,2)   (1,1) (2,2) (3,3) set

虚拟内存页面置换算法

≡放荡痞女 提交于 2020-02-29 09:06:51
// VC08---虚拟内存页面置换算法.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> using namespace std; const int MaxNumber=100; int PageOrder[MaxNumber];//页面访问序列 int Simulate[MaxNumber][MaxNumber];//访问各个时刻物理块的记录 int PageCount[MaxNumber];//物理块 int PageNum,LackNum,blockNum;//PageNum页面个数,LackNum缺页数 double LackPageRate;//缺页率 bool found; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 初始化 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ void initialization(){ cin>>blockNum; cin>>PageNum; for(int i=0;i<PageNum;cin>>PageOrder[i++]); cout<<"初始化的页面访问序列"<<endl; for(int i=0;i<PageNum;cout<<PageOrder[i++]<<" , ")

页面置换算法之Clock算法

落花浮王杯 提交于 2020-02-11 17:03:33
1.前言 缓冲池是数据库最终的概念,数据库可以将一部分数据页放在内存中形成缓冲池,当需要一个数据页时,首先检查内存中的缓冲池是否有这个页面,如果有则直接命中返回,没有则从磁盘中读取这一页,然后缓存到内存并返回。 但是内存的价值较高,一般来说服务器的内存总是小于磁盘大小的,而且内存不能完全分配给数据库作为缓冲池。这就意味着数据库基本上无法将所有的数据都缓冲到内存中。 当缓冲池满后,如果还有新的页面要被缓冲到池中,就要设计一种页面置换的算法,将一个旧的页面替换成新的页面。 一般来说我们熟悉的算法有下面几种: 下面逐一介绍各种算法。 2. 最佳置换算法 如果被替换掉的页是以后再也不会使用的,那么这种算法无疑是最优秀的。因为不管什么算法,替换掉的页也有可能再次被缓存,替换掉其它的页。 但是这种算法是无法实现的,我们不可能知道哪个页面以后也在不会被使用。 或者我们退一步,将这个算法改成被替换掉的页是以后很长一段时间都不会再次被使用的,那么这种算法无疑也是最优秀的。 但是还是会面对一个无法实现的问题,我们还是不知道哪些页面会在未来多长一段时间内不会被再次访问。页面无法确认,时间也无法确定。 虽然这种算法无法被实现,但是可以作为一种度量,如果有一种算法其效率最接近OPT,那么这种算法无疑是优秀的算法。 3. 先进先出算法 先进先出算法是一种很简单的算法,其基本思想是形成一个队列

页面置换算法-LRU,FIFO,LFU---golang实现

こ雲淡風輕ζ 提交于 2020-01-23 01:50:45
页面置换算法 页面置换算法 前提的数据结构 go语言实现双向链表数据结构 FIFOCache FIFOCache实现代码 测试数据和测试代码 测试结果 什么是LRU Cache 数据结构 代码实现 LFUCache 实现代码 测试代码和测试结果 页面置换算法 什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。 广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache── 称为Internet临时文件夹或网络内容缓存等。 前提的数据结构 不管是在fifo,lru,lfu的cache中,其底层数据结构 都是双向链表加hashmap实现的 go语言实现双向链表数据结构 package DoubleLinked import ( "fmt" "strings" ) type Node struct { key interface { } value interface { } prev , next * Node } // 实现打印方法 func ( this Node ) String ( ) string { builder :=

虚存技术(下)

五迷三道 提交于 2020-01-08 23:53:24
请求分页系统建立在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。 在请求分页系统中,只要求将当前需要的一部分页面装入内存,以便可以启动作业运行。在作业执行过程中,当所要访问的页面不在内存时,再通过雕爷功能将其调入,同时还可以通过置换功能将暂时不用的页面换出到外存上,以便腾出内存空间。 页面置换算法的主要目标是使页面置换频率最低(也可以说缺页率最低)。 常见的页面置换算法有以下几种: 1、最佳置换算法(Optimal,OPT) 2、先进先出页面置换算法(First In First Out,FIFO) 3、最近最久未使用( Least Recently Used,LRU)置换算法 4、第二次机会算法 5、时钟算法(clock) 6、改进时钟算法 7、最不常用算法(LFU,Least Frequently Used) 1、最佳置换算法(Optimal,OPT) 所选择的被换出的页面将是以后永不使用的,或者是在最长时间内不再被访问,通常可以保证获得最低的缺页率。但是由于人们无法预知一个页面多长时间不再被访问,因此该算法是一种理论上的算法。最佳置换算法可以用来评价其他算法。 举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列: 开始运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2

内存管理

╄→尐↘猪︶ㄣ 提交于 2019-12-10 00:29:19
内存管理 习题 一.选择题 1、设备分配问题中,算法实现时,同样要考虑安全性问题,防⽌在多个进程进⾏设备请求时,因相互等待对⽅释放所占设备所造成的(D)现象。 A.瓶颈 B.碎⽚ C.系统抖动 D.死锁 2、主存与辅存间频繁的页⾯置换现象被称为(C)。 A.请求调页 B.碎⽚整理 C.系统抖动 D.输⼊输出 3、在可变分区存储管理中,最差适应分配算法要求对空闲区表项按( C)进⾏排列 A.地址从⼤到⼩ B.地址从⼩到⼤ C.尺⼨从⼤到⼩ D.尺⼨从⼩到⼤ 若为最优适应分配算法则D 最优适应分配算法可把空闲区按长度以递增顺序登记在空闲区表中。分配时顺序查找空闲区表,由于查找时每次总是从分区中的最小的一个区开始,所以,找到的第一个能满足作业要求的分区,一定是所有能满足作业要求的分区中的最小的一个分区。 4、段页式存储管理汲取了页式管理和段式管理的长处,其实现原理结合了页式和段式管理的基本思想,即( B )。 A、⽤分段⽅法来分配和管理物理存储空间,⽤分页⽅法来管理⽤户地址空间。 B、⽤分段⽅法来分配和管理⽤户地址空间,⽤分页⽅法来管理物理存储空间。 C、⽤分段⽅法来分配和管理主存空间,⽤分页⽅法来管理辅存空间。 D、⽤分段⽅法来分配和管理辅存空间,⽤分页⽅法来管理主存空间。 段页式存储管理兼有页式管理和段式管理的优点,采用分段方法来分配和管理用户地址空间,用分页方法来管理物理存储空间。

页面置换算法--

孤者浪人 提交于 2019-12-09 14:12:03
页面置换算法:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生 缺页中断 。当发生缺页中断时,如果操作系统内存中没有空闲页面,则 操作系统 必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。 常见的页面置换算法: 最佳置换算法(OPT):这是一种理想情况下的页面置换算法,但实际上是不可能实现的。该算法的基本思想是:其所选择的淘汰页面将是以后永远不使用的,或许是在最长(未来)时间内不再被访问的页面。最佳页面置换算法只是简单地规定:标记最大的页应该被置换。这个算法唯一的一个问题就是它无法实现。当缺页发生时,操作系统无法知道各个页面下一次是在什么时候被访问。虽然这个算法不可能实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较。 假定系统为某进程分配了三个物理块,并考虑有以下的页面引用串: 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 1、先将7,0,1三个页面装入内存s 2、访问2号页面时,因为三个物理块都被占满了,则需要用OPT算法将一个页面置换出来,从左向右看,7,0,1三个页面中,7号页面是在最长(未来)时间内不再被访问的页面,所有用2号页面将7号页面置换出来。 3.当到4号页面的时候,2,0,3中,0号页面是在最长(未来)时间内不再被访问的页面

计算机操作系统第五章测试题及答案

时光怂恿深爱的人放手 提交于 2019-12-02 06:53:04
大项 1 of 4 - 选择题 24.0/ 24.0 得分 题目 1 of 27 4.0/ 4.0 得分 Belady现象是指( )。 A. 淘汰页很可能是一个马上要用的页 B. 当分配到的内存块数增加时,缺页中断的次数有可能反而增加 C. 缺页次数与系统的页面大小正相关 D. 引起系统抖动的现象 答案: B 题目 2 of 27 4.0/ 4.0 得分 作业在执行中发生了缺页中断,经操作系统处理后,应让其执行( )指令。 A. 启动时的第一条 B. 被中断的后一条 C. 被中断的 D. 被中断的前一条 答案: C 题目 3 of 27 4.0/ 4.0 得分 在页面置换算法中,存在Belady现象的算法是( )。 A. NRU B. LRU C. FIFO D. OPT 答案: C 题目 4 of 27 4.0/ 4.0 得分 实现虚拟存储器的目的是( )。 A. 实现程序浮动 B. 扩充主存容量 C. 实现存储保护 D. 扩充辅存容量 答案: B 题目 5 of 27 4.0/ 4.0 得分 虚拟存储器管理系统的基础是程序的局部性原理,局部性有两种表现形式,分别是时间的局部性和( )。 A. 访问的局部性 B. 指令的局部性 C. 空间的局部性 D. 数据的局部性 答案: C 题目 6 of 27 4.0/ 4.0 得分 在请求分页存储管理中,若采用FIFO页面淘汰算法

操作系统——内存管理

拥有回忆 提交于 2019-12-01 07:05:18
目录 一、存储器管理 1.1存储器的层次结构 1.2程序的装入和链接 1.2.1程序装入 1.2.2程序链接 1.3交换 1.4连续分配管理方式 1.4.1单一连续分配 1.4.2固定分区分配 1.4.3动态分区分配(含顺序和索引算法) 1.4.4动态可重定位分区分配 1.5非连续分配管理方式 1.5.1分页存储管理方式 1.5.2分段存储管理方式 1.5.3段页式存储管理方式 二、虚拟存储器 2.1基本概念 2.2请求分页存储管理方式 2.2.1请求分页中的硬件支持 2.2.2请求分页中的内存分配 2.2.3页面调入策略 2.3页面置换算法 2.4“抖动”与工作集 一、存储器管理 1.1存储器的层次结构 1、多层结构的存储器系统 1)存储器的多层结构 通用计算机存储层次有三级:CPU寄存器,主存,辅存 主存包括:高速缓存、主存储器、磁盘缓存 辅存包括:固定磁盘、可移动存储介质 寄存器、高速缓存、主存储器和磁盘缓存属于 操作系统存储管理 的管辖范畴,断电后存储信息丢失;固定磁盘、可移动存储介质属于 设备管理 的管辖范畴,存储信息被长期保存 2)可执行存储器 寄存器和主存储器被称为可执行存储器 进程可以在很少的时钟周期内使用 load和 store指令访问可执行存储器,但对辅存的访问需要通过 I/O设备实现,耗费时间远超前者 2、主存储器与寄存器 1)主存储器 简称内存或主存,用于

页面置换算法详解

拟墨画扇 提交于 2019-11-28 06:42:21
一、什么是页面置换算法 进程运行时,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区,其中选择调出页面的算法就称为 页面置换算法 。 好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出 二、常见的页面置换算法 1、FIFO(先进先出算法) ( 优先淘汰最早进入内存的页面 ) FIFO 算法是最简单的页面置换算法。FIFO 页面置换算法为每个页面记录了调到内存的时间,当必须置换页面时会选择最旧的页面 “FIFO 算法当进程分配到的页面数增加时,缺页中断的次数可能增加也可能减少” FIFO 算法基于队列实现,不是堆栈类算法 注意,并不需要记录调入页面的确切时间,可以创建一个 FIFO 队列,来管理所有的内存页面。置换的是队列的首个页面。当需要调入页面到内存时,就将它加到队列的尾部 FIFO 页面置换算法易于理解和编程。然而,它的性能并不总是十分理想: 其一,所置换的页面可以是很久以前使用过但现已不再使用的初始化模块 其二,所置换的页面可以包含一个被大量使用的变量,它早就初始化了,但仍在不断使用 2、OPT(最佳置换算法) ( 淘汰以后不会使用的页面 ) 发现 Belady 异常的一个结果是寻找最优页面置换算法,这个算法具有所有算法的最低的缺页错误率,并且不会遭受