页面置换算法操作系统试验Word文档格式.docx
- 文档编号:21662088
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:11
- 大小:17.84KB
页面置换算法操作系统试验Word文档格式.docx
《页面置换算法操作系统试验Word文档格式.docx》由会员分享,可在线阅读,更多相关《页面置换算法操作系统试验Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
inti;
inta;
srand(time(NULL));
for(i=0;
i<
n;
i++)
{v=rand()%(END-START+1)+START;
p[i]=v;
cout<
<
v;
}
}
structPro
{
intnum,time;
//num存放具体的内容,time在不同算法里面有不同的意义
};
//它们是物理块和页面的数据结构
intInput(intm,intN,Pro*p,Pro*page)//完成p[]数组和page[]的初始化工作
{//p[]数组是存放页面的空间,m是页面的长度
//page[]是可以使用的物理块,N是物理块的大小
endl<
"
请输入各页面号"
endl;
int*p2=newint[m];
rand(m,p2);
for(inti=0;
i<
m;
i++)
{
p[i].num=p2[i];
p[i].time=0;
N;
i++)//初试化页面基本情况
page[i].num=0;
page[i].time=N+2-i;
returnm;
intSearch(inte,Pro*page,intN)//算法里面都要用到它。
{//它是找e页是否在page物理块中,N是物理块的大小
if(e==page[i].num)
returni;
//如果找到,就返回在物理块中的位置给Search
return-1;
//找不到,就返回-1
intMax(Pro*page,intN)//LRU算法用到的
{//找出在page块中,time最大的值和位置,同时位置返回
//time最大,就代表了最久没被使用的数
inte=page[0].time,i=0;
intk=0;
while(i<
N)//找出离现在时间最长的页面
if(e<
page[i].time)
k=i;
i++;
returnk;
intCompfu(Pro*page,inti,intt,Prop[],intm)//OPT算法用到的
//找出如果page[t]要等于p,并且zaip[i]~p[m]这个区间内,走的次数,最大的数
intcount=0;
//count是保存走的步数
for(intj=i;
j<
j++)
if(page[t].num==p[j].num)break;
//如果相等,跳出循环
elsecount++;
//不等就步数加1
returncount;
intMin(Propage[],intN)//LFU算法用到的
{//page[]是可以使用的物理块,N是物理块的大小
//找到出现次数最小的的数,并把位置返回
intmin=page[0].time;
if(min>
voidFIFO(Prop[],Propage[],intm,intN)//p[]数组是存放页面的空间,m是页面的长度
floatn=0;
//n用来保存缺页的次数
inti=0;
//i是循环变量,它是表示走到页面的位置。
intt=0;
//t是用来表示物理块走到的位置
页面置换情况:
"
if(Search(p[i].num,page,N)>
=0)
continue;
//找到相同的页面,就跳到下一次循环,不做处理。
else//在找不到的时候,通过t=t%N,求出这次来替换物理块的位置
{
t=t%N;
n++;
//缺页数加1
page[t].num=p[i].num;
t++;
//位置加1
缺页次数:
n<
缺页率:
n/m<
命中率:
1-n/m<
voidLFU(Prop[],Propage[],intm,intN)//p[]数组是存放页面的空间,m是页面的长度
{//page[]是可以使用的物理块,N是物理块的大小,
page[i].time=0;
page[i].time++;
//找到相同的页面,time加1
//
else
{//找出使用最少的页面进行调换
t=Min(page,N);
//找到出现次数最小的的数,并把位置返回t
page[t].time=0;
//该页time清零
voidOPT(Prop[],Propage[],intm,intN)//p[]数组是存放页面的空间,m是页面的长度
//t是用来表示物理块走到的位置
m)
//如果找到了,就不做处理。
else//如果找不到
inttemp=0,cn;
//cn用来保存离后面最远的数
for(t=0;
t<
t++)//对物理块里面的每个数进行遍历
if(temp<
Compfu(page,i,t,p,m))//temp用来保存
{//page[t]=p[i]~p[m]这个区间内,走的次数,最大的数
temp=Compfu(page,i,t,p,m);
cn=t;
page[cn]=p[i];
//把当前的值放要发生要走最远的数,也就最不可能最近出现的数
n=n+1;
//跳到下一次循环
voidLRU(Prop[],Propage[],intm,intN)//p[]数组是存放页面的空间,m是页面的长度
//t是用来表示物理块走到的位置
intk;
k=t=Search(p[i].num,page,N);
if(t>
//如果找到,就要把当前的page[t].time次数
//清零
else//找不到的时候,发生缺页
//缺页数加1
t=Max(page,N);
//找出page物理块里面,最久没被时候的数
//同时把最久没被时候的数在物理块里的位置传给t
//最久没被使用的是被现在的数代替
//同时清零
for(intj=0;
j++)//把缺页以外的数,把它没被使用的次数加1
if(j==t)
page[t].time++;
voidmain()
intm=0,t=0,N=0;
请输入实际页数:
;
cin>
>
Pro*p=newPro[m];
//p是用来放页面的地方
可用内存页面数"
Pro*page=newPro[N];
//page是放物理块的地方
charc;
Input(m,N,p,page);
//m是页面的总长,N是物理块的长度
do{
f:
FIFO页面置换"
l:
LRU页面置换"
o:
OPT页面置换"
u:
LFU页面置换"
按其它键结束"
c;
if(c=='
f'
)//FIFO页面置换
FIFO(p,page,m,N);
l'
)//LRU页面置换
LRU(p,page,m,N);
o'
)//OPT页面置换
OPT(p,page,m,N);
u'
LFU(p,page,m,N);
}while(c=='
||c=='
);
下次预告(敬请期待):
实验5设备管理(2学时)
一、实验目的
理解设备管理的概念和任务,掌握独占设备的分配、回收等主要算法的原理并编程实现。
二、实验内容
编写程序实现对独占设备的分配与回收的模拟。
1、实现设备分配、回收、显示系统中设备信息的功能。
2、通过设备类表和设备表记录系统中设备信息、以便进行设备分配。
3、设备类表记录系统中全部设备的情况,每个设备类占一个表目,设备类表的数据结构如表1所示。
设备类
拥有设备数量
可分配设备数量
设备起始地址
图1设备类表
4、为每一个设备配置一张设备控制表,用于记录本设备的情况。
设备控制表的数据结构如图2所示。
绝对号
设备状态(好/坏)
是否分配(是/否)
占有作业名
相对号
图2设备控制表
4、程序中建立分配设备和回收设备函数。
5、设系统有3类设备,每类设备的设备数分别为2、3、4。
6、要求键盘输入作业名、作业所需设备类和设备相对号。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 页面 置换 算法 操作系统 试验
![提示](https://static.bdocx.com/images/bang_tan.gif)