《2022年操作系统_页面置换算法FIFO,OPT,LRU实现 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统_页面置换算法FIFO,OPT,LRU实现 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统第六次上机在一个请求分页系统中,设页面大小占100 个单元, 假如系统分配给一个作业的物理块数为3,试求出用FIFO,LRU ,OPT三种算法在程序访问过程中所发生的缺页次数及缺页率,每次中断时都需要打印出来或者标示出来。(假设最初页面都在外存)1. 假定此作业的访问地址序列为202,313,252,111,546,217,444,544,365,223,398,111。2. 输入任意的访问序列,也必须正确显示。/*代码尚需完善:1. 应由用户输入数组,且应根据题目要求对每个数/100 ,得到页块标号。2. 在动态输入的情况下,通过sizeof,获得数组长度,实现任意输入的处理。3.F
2、IFO算法实现, why ?4. 在OPT 实现中, mark属性设置,以及向后遍历的参数设置?*/ 前三个页块单独处理,需注意前三个页块也可能重复。已做出修改!#include usingnamespacestd; int input12 = 2,3,2,1,5,2,4,5,3,2,3,1 ; class page public : int num; int mark; page() num = 0; mark = -1; ; void FIFO() cout -FIFO-endl; int error = 0; page frame3; / 页帧名师资料总结 - - -精品资料欢迎下载 -
3、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - bool flag = true ; int check = 0; for ( int i = 0; i3; i+) / 处理前三个引用 for ( int k = 0; k i; k+) if (inputi = inputk) flag = false ; if (flag = true ) framei.num = inputi; framei.mark = i; error+; cout framei.num | ;
4、 for ( int j = 0; j = i; j+) cout framej.num ; cout endl; else check+; for ( int i = 3-check; i12; i+) int j; for (j = 0; j3; j+) if (inputi = framej.num) cout inputi endl; break; if (j = 3) error+; frame(error - 1) % 3).num = inputi; / 换掉最旧的页/ ?cout inputi | ; for ( int k = 0; k3; k+) cout framek.n
5、um ; cout endl; cout FIFO: endl; cout Error 次数: error endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - cout Frame Error: (error/12.0) endl endl; void OPT() cout -OPT-endl; int error = 0; pageframe3; bool flag = true ; int check = 0; fo
6、r ( int i = 0; i3; i+) / 处理前三个引用 for ( int k = 0; k i; k+) if (inputi = inputk) flag = false ; if (flag = true ) framei.num = inputi; error+; cout framei.num | ; for ( int j = 0; j = i; j+) cout framej.num ; cout endl; else check+; for ( int i = 3-check; i12; i+) int j; for (j = 0; j3; j+) if (input
7、i = framej.num) cout inputi endl; break; if (j = 3) error+; for (j = 0; j= i; k-) / 向后遍历,找到最长时间不用的页/k =20 ?貌似修改后会出问题 if (framej.num = inputk) framej.mark = k; if (frame0.markframe1.mark&frame0.markframe2.mark) frame0.num = inputi; elseif (frame1.markframe0.mark&frame1.markframe2.mark) frame1.num = i
8、nputi; elseframe2.num = inputi; cout inputi | ; for ( int k = 0; k3; k+) cout framek.num ; cout endl; cout OPT: endl; cout Error 次数: error endl; cout Frame Error: (error / 12.0) endl endl; void LRU() cout -LRU-endl; int error = 0; pageframe3; bool flag = true ; int check = 0; for ( int i = 0; i3; i+
9、)/ 处理前三个引用 for ( int k = 0; k i; k+) if (inputi = inputk) flag = false ; if (flag = true ) framei.num = inputi; error+; cout framei.num | ; for ( int j = 0; j = i; j+) cout framej.num ; cout endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - -
10、 - - else check+; for ( int i = 3-check; i12; i+) int j; for (j = 0; j3; j+) if (inputi = framej.num) cout inputi endl; break; if (j = 3) error+; for (j = 0; j3; j+) framej.mark = -1; for ( int k = 0; k = i; k+)/ 向前遍历,找到最近最少使用的 if (framej.num = inputk) framej.mark = k; if (frame0.markframe1.mark&fra
11、me0.markframe2.mark) frame0.num = inputi; elseif (frame1.markframe0.mark&frame1.markframe2.mark) frame1.num = inputi; elseframe2.num = inputi; cout inputi | ; for ( int k = 0; k3; k+) cout framek.num ; cout endl; cout LRU: endl; cout Error 次数: error endl; cout Frame Error: (error / 12.0)endl endl; int main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - FIFO(); OPT(); LRU(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -