操作系统实验指导 (1)(2)

2018-11-27 19:34

#具体的实施方法是:

A. B. C.

在[0,319]的指令地址之间随机选区一起点M; 顺序执行一条指令,即执行地址为M+1的指令;

在前地址[0,M+1]中随机选取一条指令并执行,该指令的地址

为M’; D. E. F.

顺序执行一条指令,其地址为M’+1;

在后地址[M’+2,319]中随机选取一条指令并执行; 重复A—E,直到执行320次指令。

2.指令序列变换成页地址流 设:(1)页面大小为1K;

(2) 用户内存容量为4页到32页; (3) 用户虚存容量为32K。

在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:

第0条—第9条指令为第0页(对应虚存地址为[0,9]); 第10条—第19条指令为第1页(对应虚存地址为[10,19]); 。。。。。。。。。。。。。。。。。。。。。

第310条—第319条指令为第31页(对应虚存地址为[310,319]); 按以上方式,用户指令可组成32页。

3. 计算并输出下述各种算法在不同内存容量下的命中率。

A. FIFO先进先出的算法 B. LRU最近最少使用算法

C.LFU最少访问页面算法

主要实验步骤

FiFo算法设计说明:按照所要求的产生随机指令序列,存放在order[320]这个数组中。

通过循环产生这些随机指令,每产生一条都要进行下列判断:是否和内存中即mem

_volume[4]中存放的页面相同,如果相同则不做任何操作,如果不相同,则产生缺页,相应的缺页次数加一,按照fifo将最先进入内存的页数淘汰,并将该页写到内存中去。

重复上面的操作直到完成这320条指令。 Fifo页面置换算法实现代码:

#include #include #include int main(void) {

int order[320],mem_volume[4]={100,100,100,100}; int l=0,i=0,j,num=0,cx,sign=0,add=0; float value=0,sum=0; srand(time(NULL)); for(cx=0;cx<10;cx++){ while(i<320){

order[i]=rand()20; //产生随机数放order中 for(j=0;j<4;j++)

if((order[i]+1)/10==mem_volume[j])

sign=1; //通过sign标识判断所调页数是否在内存块中

if(sign) sign=0; else{ l++;

if(mem_volume[3]==100)

mem_volume[3]=(order[i]+1)/10;// 保证第一次调入的页面都产生缺页

else{

mem_volume[num]=(order[i]+1)/10; //将所缺页调入到内存块中

num=(num+1)%4; //num值为下次所要置换出去的内存块中对应的页数 } } i++;

order[i]=rand()%(order[i-1]+2); for(j=0;j<4;j++)

if(order[i]/10==mem_volume[j]) sign=1; if(sign) sign=0; else { l++;

if(mem_volume[2]==100)

mem_volume[2]=order[i]/10; else{

mem_volume[num]=order[i]/10; num=(num+1)%4; } } i++;

order[i]=order[i-1]+1; for(j=0;j<4;j++)

if(order[i]/10== mem_volume[j]) sign=1; if(sign) sign=0; else{ l++;

if(mem_volume[1]==100)

mem_volume[1]=order[i]/10; else{

mem_volume[num]=order[i]/10; num=(num+1)%4; }} i++;

order[i]=rand()%(319-order[i-1]-2)+(order[i-1]+2); for(j=0;j<4;j++)

if(order[i]/10==mem_volume[0]) sign=1; if(sign) sign=0; else {

l++;

if(mem_volume[0]==100)

mem_volume[0]=(order[i]+1)/10; else{

mem_volume[num]=order[i]/10; num=(num+1)%4; }} i++; }

value=l/320.0*100; add=add+l; sum=sum+value; }

printf(\页面置换算法*******************\\2\\n\ printf(\最后一次指令序列************************\ for(i=0;i<320;i++){ if(i==0)

printf(\

printf(\ }

printf(\

printf(\

printf(\十次的平均缺页数为%d\\n\\t\\t十次的平均缺页率为%.3f%%\ return 0; }

LRU页面置换算法设计说明:

这个算法同FiFo算法的不同之处在于,每产生一条随机指令,如果和4个内存块中的某一个页数相同的话,就要对这4个内存块中的页数重新排序,将每次要置换出去的页数放在mem_volume[3]中,这样,在每次产生缺页的时候,都先将所缺页数写入到该内存块,然后再排序,将其放到mem_volume[0]中去。 LRU页面置换算法实现代码:

#include #include #include int main(void) {

int order[320],mem_volume[4]={100,100,100,100}; int l=0,i=0,j,cx;

intnum,temp=0,ex_chan=0,add=0; float value=0,sum=0; srand(time(NULL)); for(cx=0;cx<10;cx++){ while(i<320){

order[i]=rand()20;

if((order[i]+1)/10==mem_volume[0])

; //如果所调页数同第一个内存块中页数相同,则执行空操作

else if((order[i]+1)/10==mem_volume[1]){ temp=mem_volume[1];

mem_volume[1]=mem_volume[0];

mem_volume[0]=temp;//如果所调页数同第二个内存块相同,则排序只需交换一次

}

else if((order[i]+1)/10==mem_volume[2]){ for(j=2;j>0;j--){ temp=mem_volume[j];

mem_volume[j]=mem_volume[j-1]; mem_volume[j-1]=temp; } }

else if((order[i]+1)/10==mem_volume[3]){ for(j=3;j>0;j--){ temp=mem_volume[j];

mem_volume[j]=mem_volume[j-1]; mem_volume[j-1]=temp; }

} //如果所调页数同第3、4个内存块中页数相同,则通过循环进行排序

else{ l++;

if(mem_volume[3]==100)

mem_volume[3]=(order[i]+1)/10;//保证刚开始调入内存块中就产生缺页

else{

mem_volume[3]=(order[i]+1)/10; for(num=3;num>0;num--){ ex_chan=mem_volume[num];

mem_volume[num]=mem_volume[num-1];

mem_volume[num-1]=ex_chan; //写人后重新排序 }


操作系统实验指导 (1)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:一年级数学第一次月考试卷新人教版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: