操作系统页面置换算法代码
OS第4章 作业18192
OS第四章作业练习一、选择题1、在固定分区分配中,每个分区的大小是()。
A.相同B.随作业长度变化C.可以不同但预先固定D.可以不同但根据作业长度固定2、在可变分区分配中,首次适应算法的空闲区是()。
A.按地址递增顺序连在一起B.始端指针表指向最大空闲区C.按大小递增顺序连在一起D.寻找从最大空闲区开始3、在可变分区分配中,最佳适应算法的空闲区是()。
A.按大小递减顺序连在一起B.按大小递增顺序连在一起C.按地址由小到大排列D.按地址由大到小排列4、在动态分区分配方案中,某一作业完成后,系统收回其主存空间,并与相邻空闲区合并,为此需修改空闲区表,造成空闲区数减1的情况是()。
A、无上邻空闲区,也无下邻空闲区B、有上邻空闲区,但无下邻空闲区C、有下邻空闲区,但无上邻空闲区D、有上邻空闲区,也有下邻空闲区5、设内存的分配情况如下图所示。
若要申请一块40K的内存空间,采用最佳适应算法,则所申请到的分区首址为()。
A.100K B.190K C.330K D.410K6、在分区分配方案中,需要执行紧凑操作的是()A、固定式分区B、可变式分区C、重定位式分区D、多重式分区7、在可重定位分区存储管理中的拼接技术可以()。
A 集中空闲区B 增加主存容量C 缩短访问周期D 加速地址转换8、采用页式存储管理的系统中,若逻辑地址用32位表示,其中12位表示页内地址,则地址空间最多允许()页。
A 232B 224C 220D 2129、很好地解决了“零头”问题的存储管理方法是()。
A.页式存储B.固定分区C.多重分区D.可变式分区10、联想寄存器在计算机系统中是用于()。
A、存储文件信息B、与主存交换信息C、地址变换D、存储通道程序11、采用()不会产生内部碎片。
A、固定式分区存储管理B、分段式存储管理C、分页式存储管理D、段页式存储管理12、段页式存储管理的实现原理是()。
A、用分段方法分配和管理物理存储空间,分页方法管理用户地址空间。
操作系统-页面置换算法
第一章 操作系统引论
实页
R 实 页R7
R6
R5Biblioteka R4R3R2
R1
R0
1
0
1
0
1
0
0
1
0
2
1
0
1
0
1
1
0
0
3
0
0
0
0
0
1
0
0
4
0
1
1
0
1
0
1
1
5
1
1
0
1
0
1
1
0
6
0
0
1
0
1
0
1
1
7
0
0
0
0
0
1
1
1
8
0
1
1
0
1
1
0
1
图5-6 某进程具有8个页面时的LRU访问情况
10
第一章 操作系统引论
2) 栈 可利用一个特殊的栈保存当前使用的各个页面的页面号。 每当进程访问某页面时,便将该页面的页面号从栈中移出, 将它压入栈顶。因此,栈顶始终是最新被访问页面的编号, 而栈底则是最近最久未使用页面的页面号。假定现有一进程, 它分有五个物理块,所访问的页面的页面号序列为:
4
第一章 操作系统引论
图5-4 利用FIFO置换算法时的置换图
5
第一章 操作系统引论
5.3.2 最近最久未使用和最少使用置换算法 1. LRU(Least Recently Used)置换算法的描述 FIFO置换算法的性能之所以较差,是因为它所依据的条
件是各个页面调入内存的时间,而页面调入的先后并不能反 映页面的使用情况。最近最久未使用(LRU)的页面置换算法 是根据页面调入内存后的使用情况做出决策的。
页面置换算法模拟程序-附代码
页⾯置换算法模拟程序-附代码⽬录1.问题的提出 (2)1.1关于页⾯置换算法模拟程序问题的产⽣ (2)1.2任务分析 (2)2.需求分析 (2)3.⽅案设计 (3)4.总体设计 (4)4.1程序N-S图 (4)4.2主要的函数 (4)4.3主要流程图及代码 (5)4.3.1 FIFO(先进先出) (5)4.3.2 LRU(最近最久未使⽤) (6)4.3.3 OPT(最佳置换算法) (8)4.4实现结果 (11)5.程序测试 (14)5.1设计测试数据 (14)5.2测试结果及分析 (15)摘要随着计算机的普及⼈们的物质⽣活得到了极⼤的满⾜,⼈们在精神⽣活⽅⾯同样也需要提⾼,所以越来越多的⼈进⾏着各种各样的学习。
操作系统是计算机教学中最重要的环节之⼀,也是计算机专业学⽣的⼀门重要的专业课程。
操作系统质量的好坏,直接影响整个计算机系统的性能和⽤户对计算机的使⽤。
⼀个精⼼设计的操作系统能极⼤地扩充计算机系统的功能,充分发挥系统中各种设备的使⽤效率,提⾼系统⼯作的可靠性。
由于操作系统涉及计算机系统中各种软硬件资源的管理,内容⽐较繁琐,具有很强的实践性。
要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果.本课程设计是学⽣学习完《操作系统教程》课程后,进⾏的⼀次全⾯的综合训练,通过课程设计,让学⽣更好地掌握操作系统的原理及实现⽅法,加深对操作系统基础理论和重要算法的理解,加强学⽣的动⼿能⼒。
熟悉页⾯置换算法及其实现,引⼊计算机系统性能评价⽅法的概念。
关键词:编制页⾯置换算法模拟程序、打印页⾯、FIFO页⾯算法、LRU页⾯置换算法、OPT页⾯置换算法。
引⾔1.问题的提出1.1关于页⾯置换算法模拟程序问题的产⽣在各种存储器管理⽅式中,有⼀个共同的特点,即它们都要求将⼀个作业全部装⼊内存⽅能运⾏,但是有两种情况:(1)有的作业很⼤,不能全部装⼊内存,致使作业⽆法运⾏;(2)有⼤量作业要求运⾏,但内存容量不⾜以容纳所有这些作业。
操作系统页面置换算法(C++实现)
操作系统页⾯置换算法(C++实现)1. 最佳(Optimal)置换算法1.1 算法原理 其选择淘汰的页⾯将是以后永不使⽤的,或许是在最长时间内不再被访问的页⾯。
采⽤最佳置换算法通常可以保证获得最低的缺页率。
但由于⼈们⽬前还⽆法预知,⼀个进程在内存的若⼲个界⾯中,哪⼀个页⾯是未来最长时间内不再被访问的,因⽽该算法是⽆法实现的,但可以利⽤它来评价其他算法。
现举例如下: 最佳置换算法可以⽤来评价其他算法。
假定系统为某进程分配了三个物理块,并考虑有以下页⾯号引⽤串: 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1进程运⾏时,先将7, 0, 1三个页⾯依次装⼊内存。
进程要访问页⾯2时,产⽣缺页中断,根据最佳置换算法,选择第18次访问才需调⼊的页⾯7予以淘汰。
然后,访问页⾯0时,因为已在内存中所以不必产⽣缺页中断。
访问页⾯3时⼜会根据最佳置换算法将页⾯1淘汰……依此类推,如图3-26所⽰。
从图中可以看出⾤⽤最佳置换算法时的情况。
可以看到,发⽣缺页中断的次数为9,页⾯置换的次数为6。
访问页⾯70120304230321201701177722222720000400031133311缺页否√ √√√√√√√√1.2 实现代码函数1void Optimal(vector<int> PageOrder, vector<vector<int> > &Simulate, int &PageNum,int &LackNum, int m, int n){2 vector<bool> found(n,false); // 记录页⾯中是否存在3 vector<int> lump; // 物理块45for(int i = 0; i < n; found[PageOrder[i]] = true, i ++){6//物理块中不存在7if( !found[PageOrder[i]] ){8// 物理块未满时9if(lump.size() < m){10 lump.push_back(PageOrder[i]);11 }12// 物理块满需要置换13else{14int temp, max = 0;15for(int j = 0; j < lump.size(); j ++){16int count = i;17for(; count < n + 1; count ++)18if(PageOrder[count] == lump[j]) break;19if(count > max){20 max = count;temp = j; // 记录当前最远页⾯序号21 }22 }23 found[lump[temp]] = false;24 lump[temp] = PageOrder[i];25 }26for(int j = 0; j < lump.size(); j ++)27 Simulate[i].push_back(lump[j]);28 LackNum ++; //访问页⾯失败29 }30//物理块中存在31else32 PageNum ++; //访问页⾯成功33 }34 }2. 先进先出(FIFO)置换算法2.1 算法原理 是最简单的页⾯置换算法。
操作系统智慧树知到答案章节测试2023年阜阳师范大学
第一章测试1.单处理机系统中,可并行的是()。
Ⅰ.进程与进程Ⅱ.处理机与设备Ⅲ.处理机与通道Ⅳ.设备与设备A:Ⅰ、Ⅱ、ⅣB:Ⅰ、Ⅱ、ⅢC:Ⅱ、Ⅲ、ⅣD:Ⅰ、Ⅲ、Ⅳ答案:C2.单道批处理系统的主要缺点是()。
A:CPU利用率不高B:失去了交互性C:不具备并行性答案:A3.提高单机资源利用率的关键技术是()。
A:脱机技术B:多道程序设计技术C:交换技术D:虚拟技术答案:B4.()操作系统允许一台主机上同时连接多台终端,多个用户可以通过各自的终端同时交互地使用计算机。
A:网络B:实时C:分时D:分布式答案:C5.实时操作系统必须在()内处理来自外部的事件。
A:一个机器周期B:被控制对象规定时间C:周转时间D:时间片答案:B6.在过去很长一段时间内,鉴于计算机系统非常昂贵,所以有效性曾一度是操作系统最为重要的设计目标。
()A:对B:错答案:A7.操作系统的所有程序都必须常驻内存。
()A:错B:对答案:A8.采用多道程序设计的系统中,系统中的程序道数越多,系统的效率越高。
()A:错B:对答案:A9.多道程序的并发执行失去了封闭性和可再现性,因此多道程序设计中无需封闭性和可再现性。
()A:错B:对答案:A10.批处理系统不允许用户随时干预自己程序的执行。
()A:错B:对答案:B11.微内核是指精心设计的、能够提供现代操作系统核心功能的小型内核,其通常运行在系统态,而且开机启动后常驻内存,不会因内存紧张而换出到外存。
()A:错B:对答案:B第二章测试1.并发性是指若干事件在()发生。
A:不同时间间隔内B:同一时间间隔内C:同一时刻D:不同时刻答案:B2.一个进程被唤醒,意味着()A:进程变为运行状态B:PCB移动到就绪队列之首C:优先级变大D:该进程可以重新竞争CPU答案:D3.进程和程序的本质区别是()。
A:前者分时使用CPU,后者独占CPUB:前者在一个文件中,后者在多个文件中C:前者存储在内存,后者存储在外存D:前者是动态的,后者是静态的答案:D4.下列选项中,会导致进程从执行态变为就绪态的事件是()。
操作系统有哪些主要调度算法
操作系统有哪些主要调度算法操作系统调度算法一、磁盘调度1.先来先服务fcfs:是按请求访问者的先后次序启动磁盘驱动器,而不考虑它们要访问的物理位置2.最短一般说来时间优先sstf:使距当前磁道最近的命令访问者启动磁盘驱动器,即是使查找时间最短的那个作业先继续执行,而不考量命令访问者到来的先后次序,这样就消除了先来先服务调度算法中磁臂移动过小的问题3.扫描算法scan或电梯调度算法:总是从磁臂当前位置开始,沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者。
如果沿磁臂的方向无请求访问时,就改变磁臂的移动方向。
在这种调度方法下磁臂的移动类似于电梯的调度,所以它也称为电梯调度算法。
4.循环读取算法cscan:循环读取调度算法就是在读取算法的基础上改良的。
磁臂改成单项移动,由外向里。
当前边线已经开始沿磁臂的移动方向回去挑选距当前磁臂最近的哪个柱面的访问者。
如果沿磁臂的方向并无命令出访时,再返回最外,出访柱面号最轻的作业命令。
操作系统调度算法二、进程调度算法1.先进先出算法fifo:按照进程步入准备就绪队列的先后次序去挑选。
即为每当步入进程调度,总是把准备就绪队列的队首进程资金投入运转。
2.时间片轮转算法rr:分时系统的一种调度算法。
轮转的基本思想是,将cpu的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。
当时间片结束时,就强迫进程让出cpu,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。
3.最低优先级算法hpf:进程调度每次将处理机分配给具备最低优先级的准备就绪进程。
最低优先级算法可以与相同的cpu方式融合构成可以抢占市场式最低优先级算法和不容抢占市场式最低优先级算法。
4.多级队列反馈法:几种调度算法的结合形式多级队列方式。
操作系统调度算法三、常用的批处理作业调度算法1.先来先服务调度算法fcfs:就是按照各个作业进入系统的自然次序来调度作业。
页面置换的名词解释
页面置换的名词解释页面置换指的是操作系统中一种内存管理技术,其主要目的是根据内存中的页面使用情况,动态地将内存中的某些页面替换出去,以便腾出空闲的内存空间给其他需要的页面使用。
页面指的是被划分为固定大小的块的内存空间,通常为4KB或者8KB。
在计算机系统中,程序在执行的过程中,会将需要的数据或指令加载到内存中进行处理。
然而,由于内存容量有限,无法一次性将所有程序所需的页面全部加载到内存中。
当程序需要页面而内存空间不足时,操作系统就会采用页面置换的技术,将原本在内存中的某些页面替换出去,给需要的页面腾出空间。
页面置换的目标是使得内存中的页面尽量是那些将来要使用到的页面,以提高程序的运行效率。
常见的页面置换算法有FIFO(先进先出)、最不常用(Least Frequently Used)、最近最少使用(Least Recently Used)等。
FIFO算法是最简单的置换算法,根据页面进入内存的先后顺序来进行替换。
当内存空间不足时,将最早进入内存的页面替换出去。
最不常用算法则是根据页面在一段时间内被访问的频率进行替换。
具体来说,每次页面被访问时,都会将该页面的访问频率加一,当内存空间不足时,选择访问频率最低的页面进行替换。
最近最少使用算法是根据页面最近一次被访问的时间来进行替换。
系统会为每个页面维护一个计时器,记录上次访问的时间。
当需要替换页面时,选择一个最久未被访问的页面进行替换。
这些页面置换算法都有各自的特点和适用场景。
FIFO算法简单且容易实现,但容易产生“抢占”现象;最不常用算法采用了频率统计的方式,可以较好地预测页面的使用情况;最近最少使用算法则更注重于页面的时间局部性。
然而,这些页面置换算法都存在着一定的问题。
例如,FIFO算法没有考虑页面的使用频率;最不常用算法也可能在短时间内无法完全准确地确定页面的使用频率;最近最少使用算法则需要维护精确的访问时间戳,带来了额外的开销。
为了解决这些问题,研究者们还提出了更加复杂的页面置换算法,如二次机会算法、clock算法、工作集算法等。
页面置换算法实验报告
页面置换算法实验报告一、实验目的本次实验的目的是通过模拟页面置换算法的过程,了解不同算法的优缺点,掌握算法的实现方法,以及对算法的性能进行评估。
二、实验原理页面置换算法是操作系统中的一个重要概念,它是为了解决内存不足的问题而产生的。
当系统中的进程需要使用内存时,如果内存已经被占满,就需要将一些页面从内存中置换出去,以便为新的页面腾出空间。
页面置换算法就是用来决定哪些页面应该被置换出去的算法。
常见的页面置换算法有以下几种:1. 最佳置换算法(OPT)最佳置换算法是一种理论上的最优算法,它总是选择最长时间内不会被访问的页面进行置换。
但是,由于无法预测未来的页面访问情况,因此最佳置换算法无法在实际中使用。
2. 先进先出置换算法(FIFO)先进先出置换算法是一种简单的置换算法,它总是选择最先进入内存的页面进行置换。
但是,这种算法容易出现“抖动”现象,即频繁地将页面置换出去,然后再将其置换回来。
3. 最近最久未使用置换算法(LRU)最近最久未使用置换算法是一种比较常用的置换算法,它总是选择最长时间未被访问的页面进行置换。
这种算法可以避免“抖动”现象,但是实现起来比较复杂。
4. 时钟置换算法(Clock)时钟置换算法是一种改进的FIFO算法,它通过维护一个环形链表来实现页面置换。
当需要置换页面时,算法会从当前位置开始扫描链表,如果找到一个未被访问的页面,则将其置换出去。
如果扫描一圈后都没有找到未被访问的页面,则将当前位置的页面置换出去。
三、实验过程本次实验使用Python语言编写了一个页面置换算法模拟程序,可以模拟上述四种算法的过程,并输出算法的性能指标。
程序的主要流程如下:1. 读取输入文件,获取页面访问序列和内存大小等参数。
2. 根据选择的算法,初始化相应的数据结构。
3. 遍历页面访问序列,模拟页面置换的过程。
4. 输出算法的性能指标,包括缺页率、页面置换次数等。
下面分别介绍四种算法的实现方法。
1. 最佳置换算法(OPT)最佳置换算法需要预测未来的页面访问情况,因此需要遍历整个页面访问序列,找到最长时间内不会被访问的页面。
页面置换算法实验报告
操作系统课程设计报告课程名称:操作系统课程设计课程设计题目:页面置换算法学院:计算机科学与技术学院专业:科技小组成员: 庞思慧E01114081王蒙E01114161姚慧乔E01114349朱潮潮E01114408指导老师:***目录1 实验目的 (3)2 实验要求 (3)3 实验内容与步骤 (3)4 算法思想 (4)5 模块设计 (4)6 程序设计 (5)7 测试结果 (7)8 结果分析 (9)9 程序代码 (9)10 课程设计小结 (24)页面置换算法模拟设计1.实验目的(1)通过模拟实现几种基本页面置换的算法,了解虚拟存储技术的特点。
(2)掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想,并至少用三种算法来模拟实现。
(3)通过对几种置换算法命中率的比较,来对比他们的优缺点。
2.实验要求计算并输出下述各种算法在不同内存容量下的命中率。
A 先进先出的算法(FIFO)B 最近最少使用算法(LRU)C最佳淘汰算法(OPT)3.实验内容与步骤(1)通过随机数产生一个指令序列,共320条指令,具体的实施方法是:A.[0,319]的指令地址之间随机选取一起点M;B.顺序执行一条指令,即执行地址为M+1的指令;C.在前地址[0,M+1]中随机选取一条指令并执行,该指令的地址为M’;D.顺序执行一条指令,其地址为M’+1;E.在后地址[M’+2,319]中随机选取一条指令并执行;F.重复A—E,直到执行320次指令。
(2)指令序列变换成页地址流A.页面大小为1K;B.用户内存容量为4页到32页;C.用户虚存容量为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:第0条—第9条指令为第0页(对应虚存地址为[0,9]);第10条—第19条指令为第1页(对应虚存地址为[10,19]);。
第310条—第319条指令为第31页(对应虚存地址为[310,319]);(3)计算并输出上述各种算法在不同内存容量下的命中率。
《操作系统》课程教学大纲
《操作系统》课程教学大纲一、课程基本情况课程代码:10411290课程名称(中/英文):操作系统/Operating System课程类别:专业基础课学分:3.5总学时:56理论学时:48实验/实践学时:8适用专业:数据科学与大数据技术适用对象:本科先修课程:计算机组成与系统结构、java程序设计、数据结构教学环境:多媒体开课学院:计算机与信息工程学院二、课程简介《操作系统》是高校软件工程专业的一门专业核心课,是后续专业课程的理论基础,本课程讲述操作系统的基本原理,主要偏重于操作系统功能与结构的理论分析,对其中的重要算法辅以实验,以加深对理论知识的理解和掌握。
主要内容包括操作系统概论;进程的概念、进程的描述与控制、进程的同步与互斥以及进程管理的常用算法;处理机调度的策略和处理死锁的方法;存储器管理的方案和分配算法以及存储保护和共享;文件系统的运行机制及关键的数据结构;设备与系统的结合方式,设备驱动程序的结构及加载机制。
通过该课程的学习要求学生理解和掌握操作系统的原理和实现方法,培养分析、比较操作系统实现方法优劣的基本能力,加深对操作系统的理解,提高深入编程和借鉴操作系统的设计思想和算法的能力。
本课程主要讲述操作系统的原理,使学生不仅能够从操作系统内部了解操作系统的工作原理,而且可以学到软件设计的思想方法和技术方法。
主要内容包括:操作系统的概论;操作系统的作业管理;操作系统的文件管理原理;操作系统的进程概念、进程调度和控制、进程同步和互斥等;操作系统的各种存储管理方式以及存储保护和共享;操作系统的设备管理原理。
三、课程教学目标2.课程教学目标及其与毕业要求指标点、主要教学内容的对应关系四、教学内容第一章操作系统引论1.主要内容:阐述操作系统的目标和作用;操作系统的发展过程;操作系统基本特性;操作系统主要功能;操作系统的结构设计。
2.基本要求:掌握操作系统的定义;理解操作系统目标、作用和功能;。
3.重点:操作系统的定义与功能。
操作系统课程设计报告题目及代码
题目一模拟操作系统设计设计一个模拟操作系统管理程序,实现以下管理功能:1.内存管理功能2.文件管理功能3.磁盘管理功能题目二虚拟存储器各页面置换算法的实现与比较内容:设计一个虚拟存储区和内存工作区,通过产生一个随机数的方法得到一个页面序列,假设内存给定的页面数由键盘输入,分别计算使用下述各方法时的内存命中率:先进先出算法〔FIFO〕、最近最少使用算法〔LRU〕、最正确淘汰算法〔OPT〕、最少页面算法〔LFU〕等。
题目三文件系统设计通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
内容:为Linu*系统设计一个简单的二级文件系统,以实现以下功能:1.可以实现以下几条命令(1)login 用户登录(2)dir 文件目录列表(3)creat 创立文件(4)delete 删除文件(5)open 翻开文件(6)close 关闭文件(7)read 读文件(8)write 写文件2.实验提示〔1〕首先确定文件系统的数据构造:主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放在磁盘,这样便于查找和修改。
〔2〕用户创立的文件,可以编号存储于磁盘上。
如file0、file1、file2……等,并以编号作为物理地址,在目录中进展登记。
[清华大学?操作系统教程? *丽芬编著题目四设计一个按时间片轮转法进程CPU调度的程序。
提示:〔1〕假设系统有5个进程,每个进程用一个进程控制块PCB来代表,PCB中包含进程名、指针、到达时间、估计运行时间、进程状态表。
其中,进程名即为进程进标识。
〔2〕为每一个进程设计一个要示运行时间和到达时间。
〔3〕按照进程到达的先后顺序排成一个循环队列,再设一个队首指针指向第一个到达的进程首址。
〔4〕执行处理机调度时,开场选择队首的第一个进程运行。
另外再设一个当前运行进程指针,指向当前正运行的进程。
〔5〕由于本实验是模拟实验,所以对被选中进程并不实际启运运行,只是执行:a.估计驼行时间减1b.输出当前运行进程的名字。
操作系统-1-存储管理之LFU页面置换算法(leetcode460)
操作系统-1-存储管理之LFU页⾯置换算法(leetcode460)LFU缓存题⽬:请你为最不经常使⽤(LFU)缓存算法设计并实现数据结构。
它应该⽀持以下操作:get 和 put。
get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。
put(key, value) - 如果键不存在,请设置或插⼊值。
当缓存达到其容量时,则应该在插⼊新项之前,使最不经常使⽤的项⽆效。
在此问题中,当存在平局(即两个或更多个键具有相同使⽤频率)时,应该去除最近最少使⽤的键。
「项的使⽤次数」就是⾃插⼊该项以来对其调⽤ get 和 put 函数的次数之和。
使⽤次数会在对应项被移除后置为 0 。
⽰例: LFUCache cache = new LFUCache( 2 /* capacity (缓存容量) */ ); cache.put(1, 1); cache.put(2, 2); cache.get(1); // 返回 1 cache.put(3, 3); // 去除 key 2 cache.get(2); // 返回 -1 (未找到key 2) cache.get(3); // 返回 3 cache.put(4, 4); // 去除 key 1 cache.get(1); // 返回 -1 (未找到 key 1) cache.get(3); // 返回 3 cache.get(4); // 返回 4代码:1class LFUCache {23public LFUCache(int capacity) {45 }67public int get(int key) {89 }1011public void put(int key, int value) {1213 }14 }1516/**17 * Your LFUCache object will be instantiated and called as such:18 * LFUCache obj = new LFUCache(capacity);19 * int param_1 = obj.get(key);20 * obj.put(key,value);21*/LFU页⾯置换算法(最不经常使⽤算法) 原理: 选择到当前时间为⽌被访问次数最少的页⾯被置换; 每页设置访问计数器,每当页⾯被访问时,该页⾯的访问计数器加1; 发⽣缺页中断时,淘汰计数值最⼩的页⾯,并将所有计数清零; 如图:图中的页⾯为三页,依次向存储中加⼊432143543215这些数字。
【操作系统】页面置换算法(最佳置换算法)(C语言实现)
【操作系统】页⾯置换算法(最佳置换算法)(C语⾔实现)【操作系统】页⾯置换算法(最佳置换算法)(C语⾔实现)(编码⽔平较菜,写博客也只是为了个⼈知识的总结和督促⾃⼰学习,如果有错误,希望可以指出)1.页⾯置换算法:在地址映射过程中,若在页⾯中发现所要访问的页⾯不在内存中,则产⽣缺页中断。
当发⽣缺页中断时,如果操作系统内存中没有空闲页⾯,则操作系统必须在内存选择⼀个页⾯将其移出内存,以便为即将调⼊的页⾯让出空间。
⽽⽤来选择淘汰哪⼀页的规则叫做页⾯置换算法。
⼀个好的页⾯置换算法,应具有较低的页⾯更换频率。
从理论上讲,应该保留最近重复访问的页⾯,将以后都不再访问或者很长时间内不再访问的页⾯调出。
----百度百科2.具体的页⾯置换算法:2.1 最佳置换算法:⼀个进程在内存的若⼲个页⾯中,哪⼀个页⾯是未来最长时间内不再被访问的,那么如果发⽣缺页中断时,就将该页⾯换出,以便存放后⾯调⼊内存中的页⾯。
1.这是计算机操作系统(第四版)中的⼀个例⼦。
系统⾸先为进程分配了三个物理块。
上⾯⼀排数字是作业号。
在转满三个物理块后,要访问2号作业,2号作业不在内存,所以会发⽣缺页中断,然后系统需要将2号作业调⼊内存,但是此时物理块已经装满。
2.依据最佳置换算法,会将7号页换出(0号页在2号页后第1个就会被访问,1号页在2号页后第10个会被访问,7号页在2号页后第14个会被访问,7号页在已经装⼊内存的作业中是未来最长时间不会被访问的,所以换出7号页)。
3.后⾯依次类推。
2.2 先进先出算法:如果发⽣缺页中断,需要换出⼀个页⾯的时候,总是选择最早进⼊内存的页⾯,即选择在内存中驻留时间最久的页⾯进⾏换出。
有点不清楚。
就是每次发⽣缺页就将最早进⼊内存的页⾯换出,然后将刚调⼊的页⾯换⼊该物理块。
2.3 最近最久未使⽤(LRU)置换算法:LRU算法是缺页中断发⽣时选择最久未使⽤的页⾯进⾏换出。
这个算法其实也很好判断。
分享⼀个⼩技巧。
内存分配了k个物理块,发⽣缺页中断将要往内存调⼊某个页⾯的时候,在该页⾯往前⾯数K个物理块最前⾯的那个就会是要换出的,因为该页⾯最长时间未被使⽤过。
操作系统程序设计(编程描述页面置换算法——先进先出算法 )
nRunTime=runtime;//运行时间(运行步数)
PageTable=new page[nPageCountLogicalSpace];//根据实际需要创建页表
public page[] PageTable=new page[200];
public void InitProcess(int no,int pagetotal,int runtime)
{
nControlNo=no;
}
//模拟成功信息提示
private void hua(int x ,int y,Color n)
{
Graphics h = this.CreateGraphics(); //创建画布
Brush g = new SolidBrush(n);//创建画刷
sf.Alignment = StringAlignment.Near;
//设置字体格式
Brush g =new SolidBrush(n);
Graphics h = this.groupBox1.CreateGraphics(); //创建画布
g.Dispose();
}
//在groupbox1指定位置着色
private void sc()
{
StringFormat sf = new StringFormat();
h.DrawString(s, new Font(new FontFamily("黑体"), 8), g, x, y, sf);
}
//以groupBox1为画板指定坐标
fifo页面淘汰算法总结(共5篇)
fifo页面淘汰算法总结第1篇假设虚拟内存的地址是16位,页面大小为1K,则进程的大小为 2 16 = 64 K B2^{16}=64KB 216=64KB分页个数 = 进程的大小页面的大小 = 逻辑地址表示的大小页面的大小 = 2 16 B 1 K B = 2 6 页分页个数=\frac{进程的大小}{页面的大小}=\frac{逻辑地址表示的大小}{页面的大小}=\ frac{2^{16B}}{1KB}=2^{6}页分页个数=页面的大小进程的大小=页面的大小逻辑地址表示的大小=1KB216B=26页因此页号P占用前6位,页内偏移量W=16-6=10位。
每一个页表项占用2B,因此页表存储空间需要 2 6 ∗ 2 B = 128 B 2^6*2B=128B 26∗2B=128B页面结构以及页表项设计如下:算法流程如下:具体实现如下:算法流程如下:具体实现如下:算法流程如下:其中调用了randBool()函数,随机的生成0或者1,其具体实现如下算法规则:选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。
假定系统为某进程分配了三个物理块,并考虑有以下页面访问序列: [7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1] 进程运行时,先将7, 0,1三个页面依次装入内存。
进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。
然后,访问页面0时,因为已在内存中所以不必产生缺页中断。
访问页面3时又会根据最佳置换算法将页面1淘汰……依此类推。
算法流程图如下:OPT算法具体实现如下:算法规则:在发生页面替换时,被替换的对象应该是最早进入内存的。
仍然采用上述的例子,此时页面置换过程如下表所示FIFO算法流程图如下所示:FIFO页面置换算法具体实现如下:初始化设置m=8,e=8,s=10; 页框数=3,访问序列长度=20;选择算法2:先进先出淘汰算法置换过程算法规则:在发生页面替换时,被替换的页面应该满足,在之前的访问队列中,该对象截止目前未被访问的时间最长。
张尧学《计算机操作系统教程》课后题答案
张尧学《计算机操作系统教程》课后题答案第一章绪论1.什么是操作系统的基本功能?答:操作系统的职能是管理和控制汁算机系统中的所有硬、软件资源,合理地组织计算机工作流程,并为用户提供一个良好的工作环境和友好的接口。
操作系统的基本功能包括:处理机管理、存储管理、设备管理、信息管理(文件系统管理)和用户接口等。
2.什么是批处理、分时和实时系统?各有什么特征?答:批处理系统(batchprocessingsystem):操作员把用户提交的作业分类,把一批作业编成一个作业执行序列,由专门编制的监督程序(monitor)自动依次处理。
其主要特征是:用户脱机使用计算机、成批处理、多道程序运行。
分时系统(timesharingoperationsystem):把处理机的运行时间分成很短的时间片,按时间片轮转的方式,把处理机分配给各进程使用。
其主要特征是:交互性、多用户同时性、独立性。
实时系统(realtimesystem):在被控对象允许时间范围内作出响应。
其主要特征是:对实时信息分析处理速度要比进入系统快、要求安全可靠、资源利用率低。
3.多道程序(multiprogramming)和多重处理(multiprocessing)有何区别?答;多道程序(multiprogramming)是作业之间自动调度执行、共享系统资源,并不是真正地同时值行多个作业;而多重处理(multiprocessing)系统配置多个CPU,能真正同时执行多道程序。
要有效使用多重处理,必须采用多道程序设计技术,而多道程序设计原则上不一定要求多重处理系统的支持。
6。
设计计算机操作系统时与那些硬件器件有关运算器、控制器、存储器、输入设备、输出设备第二章作业管理和用户接口2.作业由哪几部分组成?各有什么功能?答:作业由三部分组成:程序、数据和作业说明书。
程序和数据完成用户所要求的业务处理工作,作业说明书则体现用户的控制意图。
3.作业的输入方式有哪几种?各有何特点答:作业的输入方式有5种:联机输入方式、脱机输入方式、直接耦合方式、SPOOLING(Simultaneous Peripheral OperationsOnline)系统和网络输入方式,各有如下特点:(1)联机输入方式:用户和系统通过交互式会话来输入作业。
操作系统训练题
一、在一个请求分页系统中,采用LRU页面置换算法,例如一个作页的页面走向为4,3,2,1,4,3,5,4,3,2,1,5,当分配给该作业的物理块数M分别为3和4时,试计算访问过程中所发生的缺页次数和缺页率?(注明:有内存块最初都是空的),并比较所得结果。
解:(1)当M=3时,页面走向 4 3 2 1 4 3 5 4 3 2 1 5缺页标记* * * * * * * * * *M1 4 4 4 1 1 1 5 5 5 2 2 2M2 3 3 3 4 4 4 4 4 4 1 1M3 2 2 2 3 3 3 3 3 3 5缺页次数=10 缺页率=缺页次数/总页数*100%=10/12*100%=83.3% (2)当M=4时页面走向 4 3 2 1 4 3 5 4 3 2 1 5缺页标记* * * * * * * *M1 4 4 4 4 4 4 4 4 4 4 4 5M2 3 3 3 3 3 3 3 3 3 3 3M3 2 2 2 2 5 5 5 5 1 1M4 1 1 1 1 1 1 2 2 2缺页次数=8 缺页率=8/12*100%=67%二、在一个请求分页系统中,有一个长度为 5 页的进程,假如系统为它分配 3 个物理块,并且此进程的页面走向为2,3,2,1,5,2,4,5,3,2,5,2。
试用FIFO 和LRU 两种算法分别计算出程序访问过程中所发生的缺页次数。
(10分)解:FIFO:2 3 2 1 5 2 4 5 3 2 5 2第1页 2 2 2 5 5 5 3 3 3第2页 3 3 3 2 2 2 5 5第3页 1 1 1 4 4 4 2缺页中断次数= 6LUR:2 3 2 1 5 2 4 5 3 2 5 2第1页 2 2 2 2 5 5 5 3第2页 3 3 5 2 3 3 5第3页 1 1 4 4 2 2缺页中断次数= 5三、某段表内容如下:段号段首地址段长度0120K40K1760K30K2480K20K3370K20K一逻辑地址为(2,154)的实际物理地址为多少?答:逻辑地址(2154)表示段号为2,即段首地址为480K,154为单元号,则实际物理四、在某采用页式存储管理的系统中,所有作业执行时依次访问的页号是:1,2,3,4,3,1,5,4,6,2,1,2,5,7,3,2,4 假定开始时先把前4页装入内存。
操作系统习题4-1
来划分。
(3) 分页的作业地址空间是一维的
分段的作业地址空间则是二维的,程序员在标识一
个地址时,既需给出段名, 又需给出段内地址。
4.4.4
段页式存储管理方式
主程序段 子程序段 数据段
1. 基本原理
0 4K 8K 12K 15K 16K 0 4K 8K 0 4K 8K 10K 12K
(a) 段号(S) 段内页号(P) (b) 段内地址(W)
15 11 10 页号 页内位移 0
(2)每个进程最多有32个页面,因此,进程的页表项最多 为32项;若不考虑访问权限等,则页表项中只需给出页所 对应的物理块号,1M的物理空间可分成29个物理块,故每 个页表项至少有9位。 (3)如果物理空间减少一半,则页表中页表项数仍不变, 但每项的长度可减少1位。
继续
2.分区分配算法
从表或链中选出一分区分配给该作业 (1)首次适应算法FF 要求:空闲分区链按照地址递增顺序排列
分配:从链首顺序查找Y 分配;否则,分配失败
优点:优先利用内存中低址部分,保留了高址部分大空闲 缺点:低址部分不断被划分,留下许多碎片; 顺序查找,增加了时间开销
(2)循环首次适应算法 由FF演变而来 要求:从上次找到的空闲分区的下一个分区开 始查找; 设置查询指针,循环查找
允许几道作业并发
1. 划分方法
大小相等 缺乏灵活性:作业太小,浪费; 作业太大,不足 用途:控制多个相同对象场合, 炉温群控系统 划分为多个较小、适量中等和少量大分区
大小不等
灵活性:根据程序大小为之分配适量分区;
2.内存分配 将分区按大小顺序排列,建立分区使用表 表项:起始地址,大小,状态 图4-4
定义:为用户程序分配一块连续的内存空间
操作系统之页面置换算法(最佳置换OPT,先进先出FIFO,最近最久未使用LRU)
操作系统之页⾯置换算法(最佳置换OPT,先进先出FIFO,最近最久未使⽤LRU)最近学习操作系统时,实验要求实现常见的三种页⾯置换算法,博主按照书上要求试着编写,实现了案例,并记录在博客随记中,以便后续⾃⼰复习并也给需要的同学分享参考⼀下!⽔平有限,若有错,请悄悄告诉博主!博主好⽴即改正。
最佳置换算法(optimal replacement,OPT)是从内存中选择今后不再访问的页⾯或者在最长⼀段时间后才需要访问的页⾯进⾏淘汰。
如下例⼦:根据页⾯⾛向依次处理,得到最终的置换结果如下图表,整个页⾯缺页次数为7,缺页率为7/12=58%。
1 #include <iostream>2 #include <stdio.h>3 #include <stdlib.h>4#define N 125#define B 36using namespace std;78int pageArr[N]={1,2,3,4,1,2,5,1,2,3,4,5};//页⾯⾛向9int block[B]={0};//物理块3个,其数值是页号10 typedef struct FLAG {11int flags[B];12int counts;13 } FLAG;1415void opt(int pageArr[],int block[]);16int inBlock(int which);17int findFar(int next);18void Replace(int index,int value);19void disPlay();2021int main(void){22 cout << "begin:" <<endl;23 opt(pageArr,block);24 cout << "end!" <<endl;25return0;26 }2728void opt(int pageArr[],int block[]){29int getIndex;30for(int i=0;i<N;i++){31if(i<3){//前3页号#短缺#进队列32 block[i]=pageArr[i];33 printf("缺页:(null)-->%d\n",pageArr[i]);34 }35else {36if(i==3){37 disPlay();3839 }40if(inBlock(pageArr[i])!=-1){//下⼀个页⾯if在物理块中返回index并跳过,反-141 disPlay();4243continue;44 }45 getIndex=findFar(i+1);//从下⼀个页号,找到最远出现的页⾯,替换的下标46if(getIndex==-1){47 cout<<"error,not replace obj!"<<'\t';48 }49else{50 Replace(getIndex,pageArr[i]);//由下标找到上⼀组替换⽬标,⽤第⼆参数替换51 disPlay();5253 }54 }55 }56return;57 }5859//替换block中的物理块60void Replace(int index,int value){61 printf("缺页:%d--被替换为-->%d\n",block[index],value);62 block[index]=value;63return;64 }656667//找到最远出现的页⾯68int findFar(int next){69int index=-1;//error,默认返回不存在的索引70 FLAG myflag;71 myflag.flags[0]=0;72 myflag.flags[1]=0;73 myflag.flags[2]=0;74 myflag.counts=0;75int stop = N-next;76while(stop--){77 index=inBlock(pageArr[next++]);78if(index!=-1){79 myflag.flags[index]=1;80 myflag.counts++;83break;84 }85 }86for(index=0;index<B;index++){87if(myflag.flags[index]==0)88break;89 }90return index;91 }929394//下⼀个页⾯if在物理块中返回index,反-195int inBlock(int which){96//int i=0;97//while(i<B)98// if(block[i++]==which)99// return i-1;100for(int i=0;i<B;i++){101if(block[i]==which)102return i;103 }104return -1;105 }106107//打印⼀元组108void disPlay(){109int i=0;110while(i<B){111 printf("%d\t",block[i++]);112 }113 printf("\n");114return;115 }上⾯是博主使⽤C++(基本是C语法)编写的代码,运⾏结果如下://////////////////////////////////////////////////////////////////////////begin:缺页:(null)-->1缺页:(null)-->2缺页:(null)-->31 2 3缺页:3--被替换为-->41 2 41 2 41 2 4缺页:4--被替换为-->51 2 51 2 51 2 5缺页:1--被替换为-->33 2 5缺页:3--被替换为-->44 2 54 2 5end!//////////////////////////////////////////////////////////////////////////先进先出算法:先进先出置换算法(first in first out,FIFO)是淘汰最先进⼊内存的页⾯,即选择在内存中驻留时间最长的页⾯进⾏淘汰的算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通达学院课程设计I报告(2018/2019学年第2学期)题目:页面置换算法专业计算机科学与技术学生姓名班级学号指导教师指导单位计算机学院日期2019.5.13-5.23指导教师成绩评定表页面置换算法一、课题内容和要求通过实现页面置换的四种算法,理解虚拟存储器的概念、实现方法,页面分配的总体原则、进程运行时系统是怎样选择换出页面的,并分析四种不同的算法各自的优缺点是哪些。
以下算法都要实现:1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。
2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。
4) 最不经常使用算法(LFU)设计要求:1、编写算法,实现页面置换算法;2、针对内存地址引用串,运行页面置换算法进行页面置换;3、算法所需的各种参数由输入产生(手工输入或者随机数产生);4、输出内存驻留的页面集合,缺页次数以及缺页率;二、需求分析通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法及最不经常使用算法LFU的实现方法。
通过已知最小物理块数、页面个数、页面访问序列、及采用置换方式可以得出页面置换的缺页次数和缺页率,及每次缺页时物理块中存储!(1) 输入的形式页面序列物理块数、页面数、页面序列(2) 输出的形式驻留页面集合、缺页数、缺页率注:如果命中用 * 表示,为空用 -1 表示(3)程序所能达到的功能模拟先进先出FIFO、最佳置换OPI、最近最久未使用LRU页面置换算法和最不经常使用算法LFU的工作过程。
假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, …,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。
测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。
三、概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
int mSIZE; /*物理块数*/int pSIZE; /*页面号引用串个数*/static int memery[10]={0}; /*物理块中的页号*/static int page[100]={0}; /*页面号引用串*/static int temp[100][10]={0}; /*辅助数组*//*置换算法函数*/void FIFO();void LRU();void OPT();void LFU();/*输出格式控制函数*/void print(unsigned int t);流程图如下:图1FIFO算法是最简单的页面置换算法。
FIFO页面置换算法为每个页面记录了调到内存的时间,当必须置换页面时会选择最旧的页面。
注意,并不需要记录调入页面的确切时间,可以定义一个数,来管理所有的内存页面。
置换是队列的首个页面。
然后加1,当这个数达到物理块数的值了,清零从头开始。
LRU使用最近的过去作为不远将来的近似,那么可以置换最长时间没有使用的页。
这种方法称为最近最少使用算法。
LRU 置换将每个页面与它的上次使用的时间关联起来。
当需要置换页面时,LRU选择最长时间没有使用的页面。
这种策略可当作在时间上向后看而不是向前看的最优页面置换OPT是用一维数组page[]存储页面号序列,memery[]是存储装入物理块中的页面。
数组next[]记录物理块中对应页面的最后访问时间。
每当发生缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面。
若物理块中的页面都不再使用,则每次都置换物理块中第一个位置的页面。
LFU是用一个一维数组time[]记录每个物理块被访问的次数,当物理块满且发生置换的时候,将最小的time数组上位置的数置换出来,如果一样就置换第一个数。
四、详细设计1、输出格式控制函数:void print(unsigned int t){int i,j,k,l;int flag;for(k=0;k<=(pSIZE-1)/30;k++) //k为行数{for(i=30*k;(i<pSIZE)&&(i<30*(k+1));i++) //开头字符串输出{if(((i+1)%30==0)||(((i+1)%30)&&(i==pSIZE-1)))printf("%d\n",page[i]);elseprintf("%d ",page[i]);}for(j=0;j<mSIZE;j++) //历次置换情况输出{for(i=0;i<2;i++){if(i>=j) //物理块未占满的情况printf(" |%d|",temp[i][j]);elseprintf(" | |");}for(i=2+30*k;(i<pSIZE)&&(i<30*(k+1));i++){for(flag=0,l=0;l<mSIZE;l++)if(temp[i][l]==temp[i-1][l])flag++;if(flag==mSIZE) /*页面在物理块中*/printf(" |*|");elseprintf(" |%d|",temp[i][j]);}if(i%30==0)continue;printf("\n");}}printf("----------------------------------------\n");printf("缺页次数:%d\t\t",t);printf("缺页率:%.2f%%\n",(float)t/pSIZE*100);printf("----------------------------------------\n");}2、FIFO算法:void FIFO(){int memery[10]={-1,-1,-1,-1,-1};int i,j,k,m;int max=0; /*记录换出页*/int count=0; /*记录置换次数*/for(i=0;i<pSIZE;i++){/*判断新页面号是否在物理块中*/for(j=0,k=0;j<mSIZE;j++){if(memery[j]!=page[i])k++;}if(k==mSIZE) /*如果不在物理块中*/{count++;/*计算换出页*/memery[max]=page[i];max++;if(max==mSIZE){max=0;}}for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}printf("FIFO算法:");print(count);}3、LRU算法:void LRU(){int memery[10]={-1,-1,-1,-1,-1};int flag[10]={0}; /*记录页面的访问时间*/int i,j,k,m,c=0;int max=0; /*记录换出页*/int count=0; /*记录置换次数*/for(i=0;i<pSIZE;i++){/*判断新页面号是否在物理块中*/for(j=0,k=0;j<mSIZE;j++){if(memery[j]!=page[i])k++;elseflag[j]=i; /*刷新该页的访问时间*/}if(k==mSIZE) /*如果不在物理块中*/{count++;/*计算换出页*/if(memery[mSIZE-1]==0){memery[c]=page[i];flag[c]=i;c++;}else{max=flag[0]<flag[1]?0:1;for(m=2;m<mSIZE;m++){if(flag[m]<flag[max])max=m;memery[max]=page[i];flag[max]=i; /*记录该页的访问时间*/}}}for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}printf("LRU算法:");print(count);}4、OPT算法:void OPT(){int memery[10]={-1,-1,-1,-1,-1};int next[10]={0}; /*记录下一次访问时间*/int i,j,k,l,m,c=0;int max; /*记录换出页*/int count=0; /*记录置换次数*/for(i=0;i<pSIZE;i++){/*判断新页面号是否在物理块中*/for(j=0,k=0;j<mSIZE;j++){if(memery[j]!=page[i])k++;}if(k==mSIZE) /*如果不在物理块中*/{count++;if(memery[mSIZE-1]==0){memery[c]=page[i];c++;}else{/*得到物理快中各页下一次访问时间,l最大的被替换*/for(m=0;m<mSIZE;m++){for(l=i+1;l<pSIZE;l++)if(memery[m]==page[l])break;next[m]=l;}/*计算换出页*/max=next[0]>=next[1]?0:1;for(m=2;m<mSIZE;m++)if(next[m]>next[max])max=m;memery[max]=page[i];}}for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}printf("OPT算法:");print(count);}5、LFU算法:void LFU(){int memery[10]={-1,-1,-1,-1,-1};int time[10]={0}; /*记录访问次数*/int i,j,k,l,m,c=0;int max; /*记录换出页*/int count=0; /*记录置换次数*/for(i=0;i<pSIZE;i++){/*判断新页面号是否在物理块中*/for(j=0,k=0;j<mSIZE;j++){if(memery[j]!=page[i])k++;elsetime[j]++;}if(k==mSIZE) /*如果不在物理块中*/{count++;if(memery[mSIZE-1]==0){memery[c]=page[i];time[c]++;c++;}else{/*计算换出页,次数少的被置换*/max=time[0]<=time[1]?0:1;for(m=2;m<mSIZE;m++)if(time[m]<time[max])max=m;memery[max]=page[i];}}for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}printf("LFU算法:");print(count);}五、测试数据及其结果分析测试数据:(1)页面个数:10 最小物理块数:3页面序列:1 2 1 2 6 8 2 4 1 3(2)页面个数:20 最小物理块数:3页面序列:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 数据一截图:图2图3 数据二截图:图4图5六、调试过程中的问题(1)算法缺陷问题1、原来代码规定了前mSIZE个数据是直接放入数组的,但是通过多组数据的测试发现当前mSIZE个数据中有重复的数据时,算法并不能判定命中,而是判定缺页,这显然是错误的。