计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx

上传人:b****3 文档编号:5411940 上传时间:2022-12-16 格式:DOCX 页数:11 大小:17.35KB
下载 相关 举报
计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx_第1页
第1页 / 共11页
计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx_第2页
第2页 / 共11页
计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx_第3页
第3页 / 共11页
计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx_第4页
第4页 / 共11页
计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx

《计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx》由会员分享,可在线阅读,更多相关《计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx(11页珍藏版)》请在冰豆网上搜索。

计算机操作系统实验模拟比较页面置换页算法及缺页率1.docx

计算机操作系统实验模拟比较页面置换页算法及缺页率1

成绩

计算机操作系统实验

 

模拟比较页面置换页算法及缺页率

 

学号

200510020220

姓名

乔峰

班级

信息052

 

实验名称:

模拟比较页面置换页算法及缺页率

实验目的:

(1)掌握先进先出页面置换算法;

(2)掌握最近未用页面置换算法;

(3)了解最近最久未使用页面置换算法以及其他页面置换算法;

(4)熟悉C/C++编程。

实验学时:

6学时

实验内容:

编写程序,设置不同的页面数,使用不同的页面替换策略算法进行模拟页面替换。

先进先出,最近未用页面置换算法等,并计算缺页率。

实验环境:

(1).PC微机

(2).Windows操作系统

(3).C/C++开发环境

实验原理及算法参考程序段:

#include

#include

#include

#include

#include

intadd[256]/*地址*/,page[256]/*页面*/;

intk,j,ram,t;

floatrate;/*缺页率*/

structs1

{intpage;

intfree;

inttag;

}fifo[33],opt[33],lru[33];

structs2

{inttime;

};

voidaddress();

floatFIFO(intram);/*先进先出*/

floatLRU(intram);/*最近最久未使用页面置换*/

voidaddress()/*产生指令地址*/

{inti;

add[0]=1000;

for(i=1;i<=255;i++)

{intx=random(1024);

if((x>=0)&&(x<512))

add[i]=add[i-1]+1;

if((x>=512)&&(x<768))

add[i]=random(add[i-1]-1)+1;

if((x>=768)&&(x<1024))

add[i]=add[i-1]+random(30*1024-add[i-1]-1)+1;

}

}

floatFIFO(intram)

{intabsent=0,t=0,i,z,l,yn;

for(i=0;i

{fifo[i].page=-1;

fifo[i].free=1;

fifo[i].tag=0;

}

i=0;

while(i

{yn=0;

for(z=0;z

*/

if(fifo[z].page==page[i])

{yn=1;

for(z=0;z

if(fifo[z].free==0)

fifo[z].tag+=1;

}

if(yn!

=1)

{absent+=1;/*counttheabsentpage*/

l=0;

while((l

l++;

if((l

*/

{fifo[l].page=page[i];

fifo[l].free=0;

for(l=0;l

if(fifo[l].free==0)

fifo[l].tag+=1;

}

else/*thereisnofreeram*/

{t=0;

for(l=0;l

if(fifo[l].tag

t=l;

fifo[t].page=page[i];

fifo[t].free=0;

fifo[t].tag=1;

l=0;

}

}

i++;

}

rate=(float)absent/j*100;

returnrate;

}

 

floatLRU(intram)

{intabsent=0,yn,t,i,l,z,now=0;

structs2P[250];

for(i=0;i

P[i].time=0;

for(i=0;i

{lru[i].page=-1;

lru[i].free=1;

}

i=0;

while(i

{for(l=0;l

yn=0;

{for(z=0;z

if(lru[z].page==page[i])

{now+=1;

P[lru[z].page].time=now;

yn=1;

}

if(yn!

=1)

{absent+=1;now+=1;

l=0;

while((l<=ram)&&(lru[l].free==0))

l++;

if((l<=ram)&&(lru[l].free==1))/*anyfreeram?

*/

{lru[l].page=page[i];

P[lru[l].page].time=now;

lru[l].free=0;

}

else/*thereisnoram*/

{t=0;

for(l=0;l

if(P[lru[l].page].time

t=l;

lru[t].page=page[i];

P[lru[t].page].time=now;

}

}

}

i++;

}

rate=(float)absent/j*100;

returnrate;

}

voidmain()

{inti,p[256];/*页号*/

clrscr();

address();

for(k=1;k<=8;)/*页面大小:

1k,2k,4k,8K*/

{printf("thesizeofapageis%dk\n",k);

printf("thepagenumis...\n");

for(i=0;i<256;i++)

{p[i]=add[i]/(k*1024);/*将指令地址生成相应的页号*/

printf("%d",p[i]);

}

j=0;

for(i=0;i<256;i++)

{while(p[i]==p[i+1])

i++;

page[j]=p[i];

j++;

}

printf("\nafterconnectthesamepagesthepagenumis:

\n");

for(i=0;i

printf("%d",page[i]);

printf("\n");

getch();

for(ram=1;ram<=32;ram++)

{if(ram==10)getch();

printf("\nblock=%dpages=%d,absentrate:

",ram,j);

printf("FIFO=%0.2f%%",FIFO(ram));

printf("LRU=%0.2f%%",LRU(ram));

printf("OPT=%0.2f%%",OPT(ram));

}

k=k*2;

getch();

}

}

实验小结:

通过本次实验掌握了先进先出和最近最久未使用页面置换算法,同时也对其他的页面置换算法也更加熟悉。

在实验过程中熟悉了C语言的编程环境,并能够用C编程模拟比较也面置换算法,对编程也有一定的提高。

 

代码:

#include"stdio.h"

#include"stdlib.h"

#include"conio.h"

#include"ctype.h"

//定义页,采用双向链表存储结构

structpage

{

unsignedintnumber;//页号

unsignedintbaseaddress;//页开始地址

//其它信息

structpage*nextpage,*priorpage;//下一页和前一页

};

//定义页表

structpagetable

{

unsignedintpid;//进程号

unsignedintpagenum;//页表大小

unsignedintpagetablesize;//页表最大表目

structpage*head;//页表头指针,指向头结点,头结点指向第一页

};

//FIFO页面访问程序,函数调用时要传递过来页表pt,要访问的页面号accesspage,返回是否发生缺页中断(1是0否)

intaccess(structpagetable*pt,unsignedintaccesspage)

{

structpage*newpage;//新页面

structpage*currentpage=pt->head->nextpage;//当前页

structpage*replacedpage;//要淘汰的页

//在当前页中寻找要访问的页号

while(currentpage&¤tpage->number!

=accesspage)

{

currentpage=currentpage->nextpage;

}

//找到页号则打印√,并返回0

if(currentpage!

=NULL&¤tpage->number==accesspage)

{

printf("√");

return0;

}

//没找到则判断页表是否已经满了,没满则调入新页并打印×返回1

elseif(pt->pagenumpagetablesize)

{

newpage=(structpage*)malloc(sizeof(structpage));

newpage->number=accesspage;

newpage->nextpage=newpage->priorpage=NULL;

newpage->nextpage=pt->head->nextpage;

if(pt->head->nextpage)

{

pt->head->nextpage->priorpage=newpage;

}

pt->head->nextpage=newpage;

newpage->priorpage=pt->head;

pt->pagenum++;

printf("×");

return1;

}

//如页表已经满,则采用fifo算法进行淘汰选择

else

{

currentpage=pt->head->nextpage;

replacedpage=NULL;

while(currentpage->nextpage)

{

currentpage=currentpage->nextpage;

}

replacedpage=currentpage;

if(replacedpage->nextpage)

{

replacedpage->nextpage->priorpage=replacedpage->priorpage;

}

replacedpage->priorpage->nextpage=replacedpage->nextpage;

free(replacedpage);

newpage=(structpage*)malloc(sizeof(structpage));

newpage->number=accesspage;

newpage->nextpage=newpage->priorpage=NULL;

newpage->nextpage=pt->head->nextpage;

if(pt->head->nextpage)

{

pt->head->nextpage->priorpage=newpage;

}

pt->head->nextpage=newpage;

newpage->priorpage=pt->head;

printf("×");

return1;

}

}

 

main()

{

structpagetablept;

unsignedinttotalabsence=0,totalpagenum=10;

unsignedintrestpage[100];

unsignedinti=0;

pt.pagenum=0;

pt.pagetablesize=3;

pt.head=(structpage*)malloc(sizeof(structpage));

pt.head->nextpage=pt.head->priorpage=NULL;

//从文件获取要读入的页面流

FILE*fp;

fp=fopen("IN.dat","r");

if(fp==NULL)

{printf("cannotopenfileIN.DAT!

");return;}

while(!

feof(fp))

{

fscanf(fp,"%d",&restpage[i]);

i++;

}

fclose(fp);

totalpagenum=i;

printf("thisprogramforfifo\n\n");

//打印要访问的页

for(i=0;i

{

printf("%2d",restpage[i]);

}

printf("\n");

//调用函数访问页

for(i=0;i

{

totalabsence+=access(&pt,restpage[i]);

}

printf("\nabsencetimes:

%d\ntotalaccesstimes:

%d\nabsenceratio:

%.2f%%\n",totalabsence,totalpagenum,totalabsence*100.0/totalpagenum);

getchar();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1