请求调页存储器管理方式的模拟.docx

上传人:b****7 文档编号:9186369 上传时间:2023-02-03 格式:DOCX 页数:19 大小:273.63KB
下载 相关 举报
请求调页存储器管理方式的模拟.docx_第1页
第1页 / 共19页
请求调页存储器管理方式的模拟.docx_第2页
第2页 / 共19页
请求调页存储器管理方式的模拟.docx_第3页
第3页 / 共19页
请求调页存储器管理方式的模拟.docx_第4页
第4页 / 共19页
请求调页存储器管理方式的模拟.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

请求调页存储器管理方式的模拟.docx

《请求调页存储器管理方式的模拟.docx》由会员分享,可在线阅读,更多相关《请求调页存储器管理方式的模拟.docx(19页珍藏版)》请在冰豆网上搜索。

请求调页存储器管理方式的模拟.docx

请求调页存储器管理方式的模拟

 

课程设计

 

课程设计名称:

计算机操作系统课程设计

专业班级:

计算机科学与技术班

学生姓名:

学号:

指导教师:

课程设计时间:

2010.12.20~2010.12.24

 

计算机科学与技术专业课程设计任务书

学生姓名

专业班级

学号

题目

请求调页存储管理方式的模拟2

课题性质

其它

课题来源

自拟课题

指导教师

同组姓名

主要内容

1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。

2)用C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。

在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。

如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。

如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。

在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。

3)置换算法:

最近最久未使用(LRU)算法。

 

任务要求

通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。

 

参考文献

任满杰等《操作系统原理实用教程》电子工业出版社2006

汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社2001

张尧学史美林《计算机操作系统教程》实验指导清华大学出版社2000

罗宇等《操作系统课程设计》机械工业出版社2005

审查意见

指导教师签字:

教研室主任签字:

年月日

 

一需求分析

请求调页存储管理方式的模拟是基于LRU算法的设计而设计的,通过学习计算机操作系统中的请求调页存储管理方式的几种算法,我选择了最近最久未使用算法即LRU算法实现请求调叶存储管理,通过具体的程序来模仿LRU的工作机制。

二概要设计

1.数据结构

依据给定的数据信息,数组必须以结构体实现,结构类型的层次结构如下:

typedefstructBLOCK//声明一种新类型——物理块类型

{

intpagenum;//页号

intaccessed;//访问字段,其值表示多久未被访问

}BLOCK;

2.函数原型清单:

Voidmain();//主函数

voidinit(intBsize);//程序初始化函数

intfindExist(intcurpage);//查找物理块中是否有该页面

intfindSpace(intBsize);//查找是否有空闲物理块

intfindReplace();//查找应予置换的页面

voiddisplay(intBsize);//显示

voidsuijishu(intr);//产生320条随机数,显示并存储到temp[320]

voidpagestring();//显示调用的页面队列

voidLRU(intBsize);//LRU算法

3.全局变量:

intBsize;

intpc;//程序计数器,用来记录指令的序号

intn;//缺页计数器,用来记录缺页的次数

staticinttemp[320];//用来存储320条随机数

BLOCKblock[Bsize];//定义一大小为4的物理块数组

三运行环境(软硬件环境)

硬件:

CPU,主板,内存,显示器,硬盘,显卡,键盘等等.

软件:

WINDOWSXP,Visualc++应用软件.

四开发工具和编程语言

开发工具:

Visualc++

编程语言:

c语言

五详细设计

#include

#include

#include

#include

 

typedefstructBLOCK//声明一种新类型——物理块类型

{

intpagenum;//页号

intaccessed;//访问字段,其值表示多久未被访问

}BLOCK;

intBsize;

BLOCKblock[32];//模拟内存块

intpc;//程序计数器,用来记录指令的序号

intn;//缺页计数器,用来记录缺页的次数

staticinttemp[320];//用来存储320条随机数

//*************************************************************

voidinit(intBsize);//程序初始化函数

intfindExist(intcurpage);//查找物理块中是否有该页面

intfindSpace(intBsize);//查找是否有空闲物理块

intfindReplace();//查找应予置换的页面

voiddisplay(intBsize);//显示

voidsuijishu(intr);//产生320条随机数,显示并存储到temp[320]

voidpagestring();//显示调用的页面队列

voidLRU(intBsize);//LRU算法

//*************************************************************

voidinit(intBsize)

{

inti;

for(i=0;i

{

block[i].pagenum=-1;

block[i].accessed=0;

pc=n=0;

}

}

//-------------------------------------------------------------

intfindExist(intcurpage,intBsize)

{

inti;

for(i=0;i

{

if(block[i].pagenum==curpage)

returni;//检测到内存中有该页面,返回block中的位置

}

return-1;

}

//-------------------------------------------------------------

intfindSpace(intBsize)

{

inti;

for(i=0;i

{

if(block[i].pagenum==-1)

returni;//找到空闲的block,返回block中的位置

}

return-1;

}

//-------------------------------------------------------------

intfindReplace(intBsize)

{

inti,pos=0;

for(i=0;i

{

if(block[i].accessed>block[pos].accessed)

pos=i;//找到应予置换页面,返回BLOCK中位置

}

returnpos;

}

//-------------------------------------------------------------

voiddisplay(intBsize)

{

if(Bsize==4)

{

inti;

for(i=0;i

{

if(block[i].pagenum!

=-1)

{printf("%02d",block[i].pagenum);

}

}

printf("\n");

}

}

//-------------------------------------------------------------

voidsuijishu(intr)

{

inti,flag=0;

pc=r;

printf("****按照要求产生的320个随机数:

*******\n");

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

{

temp[i]=pc;

if(flag%2==0)pc=++pc%320;

if(flag==1)pc=rand()%(pc-1);

if(flag==3)pc=pc+1+(rand()%(320-(pc+1)));

flag=++flag%4;

printf("%03d",temp[i]);

if((i+1)%10==0)printf("\n");

}

}

//-------------------------------------------------------------

voidpagestring()

{

inti;

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

{

printf("%02d",temp[i]/10);

if((i+1)%10==0)printf("\n");

}

}

//-------------------------------------------------------------

voidLRU(intBsize)

{

intexist,space,position;

inti,j,curpage;

init(Bsize);

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

{

pc=temp[i];

curpage=pc/10;

exist=findExist(curpage,Bsize);

if(exist==-1)

{

space=findSpace(Bsize);

if(space!

=-1)

{

block[space].pagenum=curpage;

display(Bsize);

n=n+1;

}

else

{

position=findReplace(Bsize);

block[position].pagenum=curpage;

display(Bsize);

n++;

}

}

elseblock[exist].accessed=-1;//恢复存在的并刚访问过的BLOCK中页面accessed为-1

for(j=0;j<4;j++)

{block[j].accessed++;}

}

if(Bsize==4)

printf("(LRU)算法在不同内存容量下的命中率为\n");

printf("内存容量为%d",Bsize);

printf("的缺页次数:

%d",n);

printf("缺页率:

%f",(n/320.0)*100);

printf("%%");

printf("命中率:

%f",(1-n/320.0)*100);

printf("%%");

printf("\n");

}

//-------------------------------------------------------------

//*************************************************************

voidmain()

{

intt,i,j=1,select;

printf("请输入第1条指令号(0~320):

");

scanf("%d",&i);

while(i>320||i<0)

{

printf("你输入有误,请重新输入!

\n");

printf("请输入第1条指令号(0~320):

");

scanf("%d",&i);

}

while(i>=0&&i<=320)

{

suijishu(i);

printf("*****对应的调用页面队列*******\n");

pagestring();

printf("******************************\n");

init(i);

printf("最近最久未使用置换算法LRU:

\n");

printf("******************************\n");

for(t=4;t<=32;t++)

LRU(t);

j=j+1;

printf("请输入第%d条指令号(0~320)[输入-1结束]:

",j);

scanf("%d",&i);

}

}

六调试分析

(1).刚开始进行编译时,出现了86个错误和警告,吓了自己一跳,于是就静下心来一点一点分析程序,发现自己竟然那么粗心,不是少了括号就是少了分号,还有一些语法错误,经过慢慢的修改,程序最终顺利运行出来.

(2).在调试过程中,有时会显示没有错误和警告,但程序会无法执行,或执行到中间就无法在执行了,于是我就用F10进行调试,发现可能出错的子函数,然后进行仔细分析改正,调试成功.

七测试结果

图1输入错误数字的提示信息

图2随机产生的320个数

图3对应的调用页面的队列

 

图4LRU算法

(1)

 

图5LRU算法

(2)

 

图6LRU算法(3)

 

图7LRU算法(4)

 

图8LRU算法(5)和计算最近最少使用(LRU)算法在不同内存容量下的命中率

八参考文献

[1]谭浩强《C程序设计》第三版北京清华大学出版社

[2]丁华伟《C语言程序设计系统》第三版北京清华大学出版社

[3]严蔚敏《数据结构》C语言版北京清华大学出版社

 

课程设计总结

本程序能通过输入第一条指令号(用3位整数代表指令号),产生320个随机数,并以每行10个显示出来。

再把这320个随机数转换成对应的页面号,并以每行10个显示出来。

然后,通过输入选择键,分别执行三个置换算法。

各个置换算法能显示页面置换的情况,缺页次数,和缺页率。

基本实现了对请求调页存储器管理方式的模拟。

本程序的另一个亮点是使用getch()使程序的执行过程能够暂停。

本程序的不足之处是未实现地址转换功能的显示,自我感觉程序不够精练,可读性不高,还要进一步改进。

由于时间问题,只能留待课程结束后修改。

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

当前位置:首页 > 经管营销 > 销售营销

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

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