模拟操作系统的页面置换实验报告模板.docx

上传人:b****5 文档编号:3201470 上传时间:2022-11-20 格式:DOCX 页数:17 大小:145.05KB
下载 相关 举报
模拟操作系统的页面置换实验报告模板.docx_第1页
第1页 / 共17页
模拟操作系统的页面置换实验报告模板.docx_第2页
第2页 / 共17页
模拟操作系统的页面置换实验报告模板.docx_第3页
第3页 / 共17页
模拟操作系统的页面置换实验报告模板.docx_第4页
第4页 / 共17页
模拟操作系统的页面置换实验报告模板.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

模拟操作系统的页面置换实验报告模板.docx

《模拟操作系统的页面置换实验报告模板.docx》由会员分享,可在线阅读,更多相关《模拟操作系统的页面置换实验报告模板.docx(17页珍藏版)》请在冰豆网上搜索。

模拟操作系统的页面置换实验报告模板.docx

模拟操作系统的页面置换实验报告模板

 

一、综设计实验题目:

模拟操作系统的页面置换

二、中文摘要:

了解页面置换的概念。

理解页面置换的算法。

加深对页面置换算法的理解。

锻炼知识的运用能力和实践能力。

掌握用随机数生成满足一定条件的指令地址流的方法。

关键词:

页面置换先进先出置换算法(FIFO)OPT算法RLU算法C++

三、前言

实验目的

1、掌握操作系统的页面置换过程,加深理解页式虚拟存储器的实现原理。

2、掌握用随机数生成满足一定条件的指令地址流的方法。

3、掌握页面置换的模拟方法。

实验要求与内容

1、采用一种熟悉的语言,如C、PASCAL或C++等,编制程序,最好关键

代码采用C/C++,界面设计可采用其它自己喜欢的语言。

2、模拟操作系统采用OPT、FIFO和LRU算法进行页面置换的过程。

3、设程序中地址范围为0到32767,采用随机数生成256个指令地址,满

足50%的地址是顺序执行,25%向前跳,25%向后跳。

为满足上述条件,

可采取下列方法:

设d0=10000,第n个指令地址为dn,第n+1个指令地址

为dn+1,n的取值范围为0到255。

每次生成一个1到1024范围内的随机

数a,如果a落在1到512范围内,则dn+1=dn+1。

如果a落在513到768

范围内,则设置dn+1为1到dn范围内一个随机数。

如果a落在769到1024

范围内,则设置dn+1为dn到32767范围内一个随机数。

例如:

srand();初始化一个随机函数。

a[0]=10*rand()/32767*255+1;a[1]=10*rand()/32767*a[0]…语句可用来

产生a[0]与a[1]中的随机数。

或采用以下方式:

(1)通过随机数产生一个指令序列,共320条指令。

指令的

地址按下述原则生成:

A:

50%的指令是顺序执行的

B:

25%的指令是均匀分布在前地址部分

C:

25%的指令是均匀分布在后地址部分

具体的实施方法是:

A:

在[0,319]的指令地址之间随机选取一起点m

B:

顺序执行一条指令,即执行地址为m+1的指令

C:

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

D:

顺序执行一条指令,其地址为m'+1

E:

在后地址[m'+2,319]中随机选取一条指令并执行

F:

重复步骤A-E,直到320次指令

(2)将指令序列变换为页地址流

设:

页面大小为1K;

用户内存容量4页到32页;

用户虚存容量为32K。

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

存放方式为:

第0条-第9条指令为第0页(对应虚存地址为[0,9])

第10条-第19条指令为第1页(对应虚存地址为[10,19])

第310条-第319条指令为第31页(对应虚存地址为[310,319])

按以上方式,用户指令可组成32页。

4、页面大小的取值范围为1K,2K,4K,8K,16K。

按照页面大小将指令

地址转化为页号。

对于相邻相同的页号,合并为一个。

四、实验设计

1.产生访问页面的序列,保存在数组queue中

2.FIFO(先进先出)算法

数组queue_f表示物理内存中的内容

As为页面置换计数器

图1

3.LRU(最近最久未使用)算法

数组queue_f表示物理内存中的内容

数组queue_t与queue_f对应为其进入内存未使用的时间标志

As为页面置换计数器

图2

4.Opt算法

数组queue_f表示物理内存中的内容

数组queue_t与queue_f对应为其后续页面访问序列出现的第一位置

As为页面置换计数器

五、实验实现

voidCMyDlg:

:

OnFIFO()

{

CStringstr1="";

CStringstr2="";

intb;

intm=0;

intas=0;//置换页面计数

boolx;//页面是否需要置换

if(m_capm

{

m_list.ResetContent();

UpdateData(0);

for(inti=0;i

{

str1="";

str2="";

x=true;

for(intk=0;k

{

if(queue[i]==queue_f[k])

{

x=false;//判断物理块中是不是有跟当前须替换的页面

break;

}

}//如果没有且无空闲的页面,则需要置换

if(x)

{

inta;

a=(i-m)%m_capm;

queue_f[a]=queue[i];

as++;

}

else

m++;

intmm;

if(m

elsemm=m_capm;

for(intj=0;j

{

b=queue_f[j];

str2.Format("%d",b);

str1=str1+""+str2;

}

m_list.InsertString(-1,str1);

}

m_zhihuanshu=as;

m_zhihuanlv=(double)as/count;

if((as-m_capm)<=0)

{

m_queyeshu=0;

m_queyelv=0;

}

else

{

m_queyeshu=as-m_capm;

m_queyelv=(double)(as-m_capm)/count;

}

UpdateData(0);

}

else

MessageBox("页面总数小于物理块,不需要进行交换操作!

");

}

voidCMyDlg:

:

OnLRU()

{

intas=0;//置换页面计数

boolx;//页面是否需要置换

inta,b;

intm=0;

CStringstr1="";

CStringstr2="";

if(m_capm

{

m_list.ResetContent();

UpdateData(0);

for(inti=0;i

{

str1="";

str2="";

x=true;

for(intk=0;k

{

if(queue[i]==queue_f[k])

{

queue_t[k]=0;

for(intj=0;j

{

if(j!

=k)

queue_t[j]++;//使物理块中的每个未使用页面的时间增一

}

x=false;//判断物理块中是不是有跟当前须替换的页面

m++;

break;

}

}//如果没有且无空闲的页面,则需要置换

if(x)

{

intc=0,d;

if((i-m)

{

a=i-m;

}//当前物理页面未填满时直接装入

else

{

d=queue_t[0];

for(inth=0;h

{

if(d

{

d=queue_t[h];

c=h;

}

}

a=c;//找出物理块中最久未使用的页面号

}

queue_f[a]=queue[i];//将其替换

queue_t[a]=0;

for(k=0;k

{

if(k!

=a)

queue_t[k]++;//使物理块中的每个未改变页面的时间增一

}

as++;

}

intmm;

if(m

elsemm=m_capm;

for(intj=0;j

{

b=queue_f[j];

str2.Format("%d",b);

str1=str1+""+str2;

}

m_list.InsertString(-1,str1);

}

m_zhihuanshu=as;

m_zhihuanlv=(double)as/count;

if((as-m_capm)<=0)

{

m_queyeshu=0;

m_queyelv=0;

}

else

{

m_queyeshu=as-m_capm;

m_queyelv=(double)(as-m_capm)/count;

}

UpdateData(0);

}

else

MessageBox("页面总数小于物理块,不需要进行交换操作!

");

}

voidCMyDlg:

:

Onopt()

{

intas=0;//置换页面计数

boolx;//页面是否需要置换

intopu;//当前占有的页面数

opu=0;

intb;

intm=0;

CStringstr1="";

CStringstr2="";

if(m_capm

{

m_list.ResetContent();

UpdateData(0);

for(inti=0;i

{

str1="";

str2="";

x=true;

for(intk=0;k

{

if(queue[i]==queue_f[k])

{

x=false;//判断物理块中是不是有跟当前须替换的页面

break;

}

}

if((x)&&(opu

{

queue_f[opu]=queue[i];opu++;

}//如果没有且无空闲的页面,则需要置换

if((x)&&(opu==m_capm))

{//找最晚出现的页面号

for(intnumber=0;number

{

for(intnum=i;num

{

if(queue_f[number]==queue[i])

queue_t[number]=i;

}

if(num==count)

queue_t[nu

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

当前位置:首页 > 高等教育 > 经济学

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

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