操作系统页面置换算法代码文档格式.docx
- 文档编号:22123183
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:18
- 大小:20.04KB
操作系统页面置换算法代码文档格式.docx
《操作系统页面置换算法代码文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统页面置换算法代码文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
/*任选一指令访问点*/
a[i+1]=a[i]+1;
/*顺序执行一条指令*/
a[i+2]=(int)rand()%390;
/*执行前地址指令m’*/
a[i+3]=a[i+2]+1;
/*执行后地址指令*/
}
i++)/*将指令序列变换成页地址流*/
{
page[i]=a[i]/10;
offset[i]=a[i]%10;
for(i=4;
=32;
i++)/*用户内存工作区从4个页面到32个页面*/
printf("
%2dpageframes"
i);
FIFO(i);
LRU(i);
NUR(i);
\n"
);
return0;
}
voidFIFO(total_pf)/*FIFO(FirstinFirstout)ALGORITHM*/
inttotal_pf;
/*用户进程的内存页面数*/
inti;
pfc_type*p,*t;
initialize(total_pf);
/*初始化相关页面控制用数据结构*/
busypf_head=busypf_tail=NUL;
/*忙页面队列头,对列尾链接*/
i++)
if(pl[page[i]].pfn==INVALID)/*页面失效*/
diseffect+=1;
/*失效次数*/
if(freepf_head==NUL)/*无空闲页面*/
p=busypf_head->
next;
pl[busypf_head->
pn].pfn=INVALID;
/*释放忙页面队列中的第一个页面*/
freepf_head=busypf_head;
freepf_head->
next=NUL;
busypf_head=p;
p=freepf_head->
/*按方式调新页面入内存页面*/
pn=page[i];
pl[page[i]].pfn=freepf_head->
pfn;
if(busypf_tail==NUL)
busypf_head=busypf_tail=freepf_head;
else
busypf_tail->
next=freepf_head;
busypf_tail=freepf_head;
freepf_head=p;
FIFO:
%6.4F"
1-(float)diseffect/320);
voidLRU(total_pf)
inttotal_pf;
intmin,minj,i,j,present_time;
present_time=0;
diseffect++;
min=32767;
for(j=0;
j<
total_vp;
j++)
if(min>
pl[j].time&
&
pl[j].pfn!
=INVALID)
min=pl[j].time;
minj=j;
freepf_head=&
pfc[pl[minj].pfn];
pl[minj].pfn=INVALID;
pl[minj].time=-1;
pl[page[i]].time=present_time;
freepf_head=freepf_head->
present_time++;
LRU:
%6.4f"
voidNUR(total_pf)
inti,j,dp,cont_flag,old_dp;
pfc_type*t;
dp=0;
cont_flag=TRUE;
old_dp=dp;
while(cont_flag)
if(pl[dp].counter==0&
pl[dp].pfn!
cont_flag=FALSE;
dp++;
if(dp==total_vp)
if(dp==old_dp)
pl[j].counter=0;
pfc[pl[dp].pfn];
pl[dp].pfn=INVALID;
pl[page[i]].counter=1;
if(i%clear_period==0)
NUR:
voidinitialize(total_pf)/*初始化相关数据结构*/
diseffect=0;
pl[i].pn=i;
pl[i].pfn=INVALID;
/*置页面控制结构中的页号,页面为空*/
pl[i].counter=0;
pl[i].time=-1;
/*页面控制结构中的访问次数为0,时间为-1*/
for(i=1;
total_pf;
pfc[i-1].next=&
pfc[i];
pfc[i-1].pfn=i-1;
/*建立pfc[i-1]和pfc[i]之间的连接*/
pfc[total_pf-1].next=NUL;
pfc[total_pf-1].pfn=total_pf-1;
pfc[0];
/*页面队列的头指针为pfc[0]*/
模拟LRU页面置换算法
2010/02/0116:
33
#include<
#definePAGENUM6/*主存中允许的最大的页数*/
#defineMAXPAGENUM15/*一个程序包含的最大页数*/
/*定义栈的结构即置换器*/
typedefstructstack
intpage[PAGENUM];
inthead;
}PAGER;
/*定义一个置换器*/
PAGERpager;
/*栈的初始化*/
voidInitPager()
inttop=0;
inti,j,tmp;
intr;
randomize();
r=random(MAXPAGENUM);
pager.page[top++]=r;
while(top<
PAGENUM)
for(j=0;
top;
if(r==pager.page[j])
break;
if(j==top-1)
pager.head=PAGENUM-1;
/*栈中成员的移动,即移动页面的操作*/
voidMovingPage(intBegin)
for(i=Begin;
i<
PAGENUM-1;
i++)
pager.page[i]=pager.page[i+1];
/*出栈操作,即交换出页面的操作*/
voidPopPage(intp)
MovingPage(p);
pager.head=PAGENUM-2;
/*入栈操作,即换进新页面的操作*/
voidPushPage(intpage)
pager.head=PAGENUM-1;
pager.page[pager.head]=page;
/*打印主存中的页面*/
voidprintPager()
Thepagesinthepageris:
"
for(i=0;
i<
PAGENUM;
%d"
pager.page[i]);
/*处理页面的换进和换出*/
voidPagingProcess()
intrdm;
rdm=random(MAXPAGENUM);
if(rdm==pager.page[i])
printPager();
Thepage[%d]willbeaccessed\n"
rdm);
PopPage(i);
PushPage(rdm);
if(i==PAGENUM-1)
Thepage[0]willbepagedout\n"
PopPage(0);
Thepage[%d]willbepagedin\n"
clrscr();
3;
InitPager();
ROUND%d:
\n\n"
i+1);
PagingProcess();
getch();
页面调度算法(FIFO,LRU,OPT)
2006-11-2219:
29
iostream.h>
#include"
stdlib.h"
typedefintQElemType;
#defineok1
#defineoverflow0
#defineerror0
typedefstructQnode{
QElemTypedata;
structQnode*next;
}Qnode,*Queueptr;
typedefstruct{
Queueptrfront;
Queueptrrear;
}LinkQueue;
InitQueue(LinkQueue&
Q){
Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode));
if(!
Q.front)exit(overflow);
Q.front->
next=NULL;
returnok;
EnQueue(LinkQueue&
Q,QElemTypee){
Queueptrp;
p=(Queueptr)malloc(sizeof(Qnode));
p)exit(overflow);
p->
data=e;
next=NULL;
Q.rear->
next=p;
Q.rear=p;
DeQueue(LinkQueue&
Q,QElemType&
e){
if(Q.front==Q.rear)returnerror;
p=Q.front->
e=p->
data;
next=p->
if(Q.rear==p)Q.rear=Q.front;
free(p);
voidVisitQueue(LinkQueueQ){
Queueptrp;
while(p){cout<
<
p->
data<
"
;
p=p->
CompareQueue(LinkQueueQ,intpage){
while(p){
if(p->
data==page)returnok;
p=p->
returnerror;
voidFIFO(int*a,intn,intm){
LinkQueueQ;
intpage,t=0,flag=0,x;
InitQueue(Q);
for(inti=1;
i<
=m;
i++)
page=a[i];
t++;
if(t<
=n){EnQueue(Q,page);
cout<
a[i]<
else{
for(intj=1;
j<
=n;
j++)
if(CompareQueue(Q,page)){t--;
flag=1;
break;
if(flag==0){DeQueue(Q,x);
x<
wastakenout"
<
page<
wastakenin"
EnQueue(Q,page);
endl;
VisitQueue(Q);
:
flag=0;
cout<
缺页中断数为:
t="
t<
voidLRU(int*a,intn,intm){
intpage,t=0,flag=0,x,e;
t++;
else{for(intj=1;
DeQueue(Q,e);
EnQueue(Q,e);
intmax(int*t,intn){
intmax=t[1],s=1;
if(t[i]>
max){max=t[i];
s=i;
returns;
voidOPT(inta[21],intn,intm){
intw=0,flag=0;
int*t=newint[n+1];
w++;
if(w<
=n)cout<
;
else{
for(intq=1;
q<
q++)
if(a[i]==a[q]){w--;
if(flag==0)
for(intk=i;
k<
k++)
if(a[j]!
=a[k])t[j]++;
elsebreak;
a[max(t,n)]<
wastakenout"
wastakenin"
a[max(t,n)]=a[i];
for(ints=1;
s<
s++)
a[s]<
for(intr=1;
r<
r++)t[r]=0;
w="
w<
delete[]a;
main()
intm,n;
输入页面数:
cin>
>
m;
int*a=newint[m+1];
输入驻留集大小:
n;
inputthepages"
cin>
a[i];
TheresultofFIFO:
FIFO(a,n,m);
TheresultofLRU:
LRU(a,n,m);
TheresultofOPT:
OPT(a,n,m);
return0;
模拟FIFO页面调度算法处理缺页中断
2009-11-2816:
14
iostream.h>
math.h>
classList;
classitem
public:
friendclassList;
private:
item(intp=0,ints=0,intb=0,intl=0,intc=0){page=p;
sign=s;
block=b;
locate=l;
changesign=c;
next=NULL;
item*next;
intpage;
intsign;
intchangesign;
intblock;
intlocate;
classList
List(intp=0,ints=0,intb=0,intl=0,intc=0){list=newitem(p,s,b,l,c);
intcheck(intp);
intinsert(intp,ints,intb,intl);
void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 页面 置换 算法 代码