北邮 操作系统试验 页面置换算法.docx
- 文档编号:7679455
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:15
- 大小:149.05KB
北邮 操作系统试验 页面置换算法.docx
《北邮 操作系统试验 页面置换算法.docx》由会员分享,可在线阅读,更多相关《北邮 操作系统试验 页面置换算法.docx(15页珍藏版)》请在冰豆网上搜索。
北邮操作系统试验页面置换算法
课本第九章21题实验
ytinrete
1.实验目的:
学习页面置换算法
2.实验内容
WriteaprogramthatimplementstheFIFOandLRUpage-replacementalgorithmspresentedinthischapter.First,generatearandompagereferencestringwherepagenumbersrangefrom0..9.Applytherandompage-referencestringtoeachalgorithmandrecordthenumberofpagefaultsincurredbyeachalgorithm.Implementthereplacementalgorithmssuchthatthenumberofpageframescanvaryfrom1..7.Assumethatdemandpagingisused.
写一个程序来实现本章中介绍的FIFO和LRU页置换算法。
首先产生一个随机的页面引用序列,页面数从0~9。
将这个序列应用到每个算法并记录发生的页错误的次数。
实现这个算法时,要将页帧的数量设为可变(从1~7)。
假设使用请求调页。
3.设计说明
FIFO算法:
每次请求先查找是否有空块,有则替换,并标记为最晚到达,若没有则从标记中寻找最新到达的块,替换,并更新标记表。
标记数字越小,到达时间最早。
LRU算法:
每次请求先查找是否有空块,有则替换,并标记为最近使用时间最短者,若没有则从标记中寻找最近使用时间最长者,替换,并更新标记表。
标记数字越小,最近使用频率越低。
4.实验环境
windows7ultimatex64withsp1
Dev-c++
5.程序源码
#include
#include
#include
#include
#include
#include
usingnamespacestd;
typedefstructblock//页帧块结构
{
intnum;
intlable;
}block;
intpage_size,frame_size;//序列数,页帧大小
vector
vector
voidpage_replacement(intkind)//kind=1为FIFO,kind=2为LRU
{
//初始化
frame.clear();
blockinit;
init.num=-1;
init.lable=-1;
for(inti=0;i { frame.push_back(init); } interror=0;//错误次数 intseq=0;//标记数字 intposition=-1;//匹配位置 for(inti=0;i { position=-1; cout< "<<"引用请求为"< "< cout<<"引用前页帧情况(-1为空): "; for(intj=0;j { cout<<(frame.at(j)).num<<","; if(order.at(i)==(frame.at(j)).num) position=j; } cout< if(-1! =position) { cout<<"匹配成功! "< //更新标记这也是LRU算法比FIFO唯一多出来的地方 if(kind==2) { inttemp=(frame.at(position)).lable; (frame.at(position)).lable=seq+1; for(intj=0;j { if(-1! =(frame.at(j)).num)//不是空块 { if((frame.at(j)).lable>temp) { (frame.at(j)).lable--; } } } } //多余部分结束 } else { cout<<"匹配失败! "< error++; //开始置换 //先查找空页 for(intj=0;j { if(-1==(frame.at(j)).num) { position=j; break; } } if(-1! =position)//有空页 { (frame.at(position)).num=order.at(i);//置换 seq++; (frame.at(position)).lable=seq;//标记数字 } else//没有空页 { for(intj=0;j { if(1==(frame.at(j)).lable) { position=j; break; } } (frame.at(position)).num=order.at(i);//置换 (frame.at(position)).lable=seq+1;//标记进入顺序 for(intj=0;j { (frame.at(j)).lable--; } } } cout<<"引用后页帧情况(-1为空): "; for(intj=0;j { cout<<(frame.at(j)).num<<","; } cout< } cout< "< } intmain() { cout<<"请输入测试的页面序列数: "; cin>>page_size; if(page_size<=0) { cout<<"序列数有误"; return0; } cout<<"请输入页帧数量(1~7): "; cin>>frame_size; if(frame_size<=0||frame_size>7) { cout<<"页帧数有误"; return0; } intnumber; srand(unsigned(time(NULL)));//设置随机数种子 for(inti=0;i { number=rand()%10;//页面数从0到9 order.push_back(number); } /*课本例子,使用这个时将上面的随机数注释掉 order.push_back(7); order.push_back(0); order.push_back (1); order.push_back (2); order.push_back(0); order.push_back(3); order.push_back(0); order.push_back(4); order.push_back (2); order.push_back(3); order.push_back(0); order.push_back(3); order.push_back (2); order.push_back (1); order.push_back (2); order.push_back(0); order.push_back (1); order.push_back(7); order.push_back(0); order.push_back (1); */ cout< "< for(inti=0;i { cout< if(order.size()-1! =i) cout<<","; } cout< page_replacement (1); cout< page_replacement (2); system("pause"); return0; } 6.结果测试 首先以课本上为例: 20个序列: 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 帧序列为3 FIFO错误数15,置换顺序课件与课本完全相符。 LRU错误数12,置换顺序课件与课本完全相符。 其他随机数实验 其他随机数实验
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮 操作系统试验 页面置换算法 操作系统 试验 页面 置换 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)