常用页面置换算法模拟实验.docx

上传人:b****2 文档编号:1931340 上传时间:2022-10-25 格式:DOCX 页数:13 大小:155.24KB
下载 相关 举报
常用页面置换算法模拟实验.docx_第1页
第1页 / 共13页
常用页面置换算法模拟实验.docx_第2页
第2页 / 共13页
常用页面置换算法模拟实验.docx_第3页
第3页 / 共13页
常用页面置换算法模拟实验.docx_第4页
第4页 / 共13页
常用页面置换算法模拟实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

常用页面置换算法模拟实验.docx

《常用页面置换算法模拟实验.docx》由会员分享,可在线阅读,更多相关《常用页面置换算法模拟实验.docx(13页珍藏版)》请在冰豆网上搜索。

常用页面置换算法模拟实验.docx

常用页面置换算法模拟实验

操作系统课程实验报告

实验地点

实验时间

实验课表现

出勤和个人表现Q1(15+15(组长评分)=30分)

得分:

实验

总分

(Q1+Q2+Q3+Q4)

实验完成情况Q2(45分(组长与教师评分的加权平均))

得分:

实验编号与实验名称:

第7次实验常用页面置换算法模拟实验

实验目的:

1.实验目的

通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。

实验内容及要求(详见实验讲义与实验指导书):

2.实验要求:

1)要求用你熟悉的程序设计语言编写和调试一个页面置换模拟程序;要求在主函数中测试。

2)实验报告中必须包括:

设计思想、数据定义(包括详细说明)、处理流程(详细算法描述和算法流程图)、源代码、运行结果、体会等部分。

3)必须模拟本实验内容中提到的算法中的至少2种页面置换算法。

4)比较不同页面置换算法的效率

3.实验内容

编写一个程序,使用以下页面置换算法中的某2种分别模拟一个分页系统,并统计同一个页面访问序列情况下不同页面置换算法引发的缺页中断次数。

1、第二次机会算法(SecondChance)

2、最近最少使用算法(LeastRecentlyUsed,LRU)

3、最不常用算法(NotFrequentlyUsed,NFU)

4、最近未使用算法(NotRecentlyUsed,NRU)

5、时钟页面置换算法

6、老化算法(aging)

页框的数量固定为4,虚拟页面数为8。

实验输入为访问页面序列,比如0,1,3,2,7,1

实验用到的软件(:

C-Free5

实验内容及关键步骤(代码)Q3(15分)

得分:

流程图:

代码:

#include

#include

#include

#definepage_frame_number4//页框数

#definevirtual_page_number8//虚拟页面数

intpage_id,counter=0;//输入id和计数器

charalgorithm[20];//算法选择

intpage_interrupt_number=0;

structPage_table{

intpage_id;//页号

intload_time;//装入时间

intlast_visit_time;//最后访问时间

}page_table[page_frame_number];

intcmp(constvoid*p,constvoid*q){

intc=(*(structPage_table*)p).load_time-(*(structPage_table*)q).load_time;

if(c>0)

return1;

else

return-1;

}

intcmp1(constvoid*p,constvoid*q){

intc=(*(structPage_table*)p).last_visit_time-(*(structPage_table*)q).last_visit_time;

if(c>0)

return1;

else

return-1;

}

voidinit(){//初始化

inti;

for(i=0;i

page_table[i].page_id=-1;

page_table[i].load_time=-1;

page_table[i].last_visit_time=-1;

}

}

voidprint(intx){//打印信息

inti,j;

switch(x){

case0:

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

printf("-");

printf("\t\t试验七常用页面置换算法模拟实验\n");

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

printf("-");

printf("\n");

printf("选择算法:

F/L(FIFO算法/LRU算法)\n");break;

case1:

printf("请输入访问页面的顺序,以“-1”结束:

\n");break;

case2:

printf("页表信息:

\n页号页框号装入时间最近访问时间\n");

for(j=0;j

printf("%4d%8d%7d%7d\n",page_table[j].page_id,j,page_table[j].load_time,page_table[j].last_visit_time);

};break;

case3:

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

printf("-");

printf("\t\tFIFO算法模拟过程\n");

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

printf("-");

printf("\n");break;

case4:

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

printf("-");

printf("\t\tLRU算法模拟过程\n");

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

printf("-");

printf("\n");

}

}

intjudge(){

inti;

for(i=0;i

if(page_table[i].page_id==-1||page_table[i].page_id==page_id)

returni;

}

return-1;

}

voidfifo(){

intj;

print(3);

print

(1);

while

(1){

scanf("%d",&page_id);

if(page_id==-1)

break;

j=judge();

if(j==-1){

qsort(page_table,page_frame_number,sizeof(structPage_table),cmp);//按照最后访问时间从小到大排序

page_table[0].page_id=page_id;

page_table[0].load_time=counter;

page_table[0].last_visit_time=counter;

page_interrupt_number++;

}

else{

if(page_table[j].page_id==-1){

page_table[j].page_id=page_id;

page_table[j].load_time=counter;

page_table[j].last_visit_time=counter;

page_interrupt_number++;

}

else{

page_table[j].last_visit_time=counter;

}

}

counter++;

print

(2);

}

printf("缺页中断次数:

%d\n",page_interrupt_number);

}

voidlru(){

intj;

print(4);

print

(1);

while

(1){

scanf("%d",&page_id);

if(page_id==-1)

break;

j=judge();

if(j==-1){

qsort(page_table,page_frame_number,sizeof(structPage_table),cmp1);//按照装入时间从小到大排序

page_table[0].page_id=page_id;

page_table[0].load_time=counter;

page_table[0].last_visit_time=counter;

page_interrupt_number++;

}

else{

if(page_table[j].page_id==-1){

page_table[j].page_id=page_id;

page_table[j].load_time=counter;

page_table[j].last_visit_time=counter;

page_interrupt_number++;

}

else{

page_table[j].last_visit_time=counter;

}

}

counter++;

print

(2);

}

printf("缺页中断次数:

%d\n",page_interrupt_number);

}

intmain(){

print(0);

init();

while

(1){

scanf("%s",algorithm);

if(strcmp(algorithm,"F")==0||strcmp(algorithm,"L")==0)

break;

else

printf("输入出错,请重新输入\n");

}

if(strcmp(algorithm,"F")==0){

fifo();

}

else{

lru();

}

system("pause");

return0;

}

FIFO算法运行结果

LRU算法运行结果

实验过程中遇到的问题解决办法与实验体会Q4(需手写,10分)

得分:

这次实验让我了解了内存页面置换的几种算法,通过代码,让我更加深刻了了解了fifo,lru,算法的核心思想

对于其他页面替换算法,也有初步的学习理解。

评阅教师特殊评语:

 

评阅教师:

日期:

如有侵权请联系告知删除,感谢你们的配合!

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

当前位置:首页 > 人文社科 > 法律资料

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

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