操作系统页面置换算法代码
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)最佳置换算法需要预测未来的页面访问情况,因此需要遍历整个页面访问序列,找到最长时间内不会被访问的页面。
- 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个数据中有重复的数据时,算法并不能判定命中,而是判定缺页,这显然是错误的。