模拟操作系统的页面置换实验报告模板Word文件下载.docx

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

模拟操作系统的页面置换实验报告模板Word文件下载.docx

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

模拟操作系统的页面置换实验报告模板Word文件下载.docx

为满足上述条件,

可采取下列方法:

设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%的指令是均匀分布在后地址部分

具体的实施方法是:

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

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

在前地址[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_t与queue_f对应为其后续页面访问序列出现的第一位置

五、实验实现

voidCMyDlg:

:

OnFIFO()

{

CStringstr1="

"

;

CStringstr2="

intb;

intm=0;

intas=0;

//置换页面计数

boolx;

//页面是否需要置换

if(m_capm<

count)//分配的页面数少于所需要访问的页面数

{

m_list.ResetContent();

UpdateData(0);

for(inti=0;

i<

count;

i++)

{

str1="

str2="

x=true;

for(intk=0;

k<

m_capm;

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<

m_capm)mm=m;

elsemm=m_capm;

for(intj=0;

j<

mm;

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;

}

else

MessageBox("

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

);

}

OnLRU()

inta,b;

intm=0;

{

queue_t[k]=0;

for(intj=0;

j++)

{

if(j!

=k)

queue_t[j]++;

//使物理块中的每个未使用页面的时间增一

}

m++;

if(x)

{

intc=0,d;

if((i-m)<

m_capm)

a=i-m;

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

else

d=queue_t[0];

for(inth=0;

h<

h++)

if(d<

queue_t[h])

{

d=queue_t[h];

c=h;

}

a=c;

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

//将其替换

queue_t[a]=0;

for(k=0;

if(k!

=a)

queue_t[k]++;

//使物理块中的每个未改变页面的时间增一

m_list.InsertString(-1,str1);

Onopt()

intopu;

//当前占有的页面数

opu=0;

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

if((x)&

&

(opu<

m_capm))//还有空位

queue_f[opu]=queue[i];

opu++;

(opu==m_capm))

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

for(intnumber=0;

number<

number++)

for(intnum=i;

num<

num++)

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

queue_t[number]=i;

if(num==count)

queue_t[nu

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

当前位置:首页 > 总结汇报 > 学习总结

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

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