- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三页面置换算法实验
《操作系统原理》
实验报告
实验三 页面置换算法实验
专业:计算机科学与技术
学号:030840204
姓名:简郸
实验日期:2010-5-22
一、实验目的
通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
二、实验要求
设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。
1.最佳淘汰算法(OPT)
2.先进先出的算法(FIFO)
3.最近最久未使用算法(LRU)1.假设分给一作业的内存块数为 4 ,每条指令占一个存储单元,每个页面中可存放 10 条指令;
2.设计一个程序,模拟一作业的执行过程。设该作业共有 160 条指令,即它的地址空间为16页,最初作业的所有页面都还未调入内存。在模拟过程中,如果所访问的指令已经在内存,则显示其物理地址,并转下一条指令。如果所访问的指令尚未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果 4 个内存块中均已装入该作业的虚页面,则需进行页面置换;在所有 160条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。
3 .作业中指令的访问次序要求按下述原则生成:
具体的实施办法是:
(1)在[0,159]之间随机选取一条起始执行指令,其序号为 m ;
(2)顺序执行两条指令,即序号为 m+1、m+2 的指令;
(3)通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为 m1 ;
(4)顺序执行两条指令,即序号为 m1+1 ,m1+2的指令;
(5)通过随机数,跳转到后地址部分 [m1+3,159] 中的某条指令处,其序号为 m2 ;
(6)顺序执行两条指令,即序号为 m2+1,m2+2 的指令;若m2+2159只执行一条指令;
(7)重复“跳转到前地址部分、顺序执行、跳转到后地址部分、顺序执行”的过程,直至执行完全部160条指令#includestdlib.h
#includeiostream.h
#includetime.h
#includestdio.h
#define total_instruction 200 /*指令流长*/
#define M 16 /*实际页数*/
#define N 4 //可用页面数
struct Pro
{int num,time;
};
int a[total_instruction];
int page[N];
void Input(Pro p[total_instruction])
{
int m,i,m1,m2;
srand( (unsigned int )time(NULL));
m=rand( )%160; //
for(i=0;itotal_instruction;) /*产生指令队列*/
{
if(m0||m159)
{
printf(When i==%d,Error,m==%d\n,i,m);
exit(0);
}
a[i]=m; /*任选一指令访问点m*/
a[i+1]=a[i]+1;
a[i+2]=a[i]+2; /*顺序执行两条指令*/
int m1=rand( )%m; /*执行前地址指令m1 */
a[i+3]=m1;
a[i+4]=m1+1;
a[i+5]=m1 + 2;/*顺序执行两条指令*/
// s=(158-a[i+5])*rand( )/32767/32767/2+a[i+5]+2;
m2 = rand()%(157-m1)+m1+3;
a[i+6]=m2;
if( (m2+2) 159 )
{
a[i+7] = m2+1;
i +=8;
}
else
{
a[i+7] = m2+1;
a[i+8] = m2+2;
i = i+9;
}
m = rand()%m2;
}
for (i=0;itotal_instruction;i++) /*将指令序列变换成页地址流*/
{
p[i].num=a[i]/10;
p[i].time = 0;
}
}
void print(Pro *page1)//打印当前的页面
{
Pro *page=new Pro[N];
page=page1;
for(int i=0;iN;i++)
coutpage[i].num ;
coutendl;
}
文档评论(0)