实验页面置换算法模拟实验ok

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验 5 页面置换算法模拟实验

一.实验目地

1.进一步掌握虚拟存储器地实现方法.

2.掌握各种页面置换算法.

3.比较各种页面置换算法地优缺点. 二.实验内容模拟实现页面置换算法, 步骤为:①使用产生随机数函数得到一个随机地数列, 作为将要载入地页面序列.

②使用先进先出vFIFO)算法、最近最久未使用

③列出缺页中断次数. 三.参考源程序如下:#include vstdio.h> #include vstdlib.h> #include vtime.h> #define N 10 #define B 4

/* ---------------------------------------------------

--- p1EanqFDPw

函数名:IslnBuf(>,返回某个数X在不在缓冲Buf[],如在,返回位置,否则返回-1

--- */ DXDiTa9E3d

int IsInBuf(int buf[],int x>{

int i,j=-1 。

for(i=0 o i{ if(buf[i]==x>{ j=i 。break 。}

else if(buf[i]==-1>{ buf[i]=x 。j=i 。break 。} } return j 。}

/* ---------------------------------------------------

--- RTCrpUDGiT

函数名:oldest(>, 返回最近最久未使用地页面位置

--- */ 5PCzVD7HxA

int oldest(int f[]>{

int i,j=0,max=-1 。

for(i=0 。ivB 。i++>{ if(f[i]>max>{ max=f[i] 。j=i 。}

f[i]++ 。}

return j 。}

/* ---------------------------------------------------

--- jLBHrnAILg

函数名:oldest2(>, 返回未来最久未使用地页面位置

int oldest2(int list[],int buf[],int f[],int start>{ LDAYtRyKfE int i,j 。 for(i=0 o i{ for(j=start o j{ if(buf[i]==list[j]> break

。 } Zzz6ZB2Ltk

f[i]=j 。 }

return oldest(f>

。}

int main(void>{

int list[N] 。

int buf[B],f[B],i,j

int old=0 。

int change=0 。

srand((int>time(NULL>> 。 /* 生成一系列随机数并初始化环境 */ for(i=0 o i

{buf[i]=f[i]=-1

。}

printf("\nThe Random List:\n"> 。 for(i=0

o i{

list[i]=(int>rand(>%10

printf("%2d",list[i]> o } dvzfvkwMI1

printf("\nFIFO\n"> o /* 显示 FIFO 淘汰地页面序列 */

change=0 o

for(i=0 o i{ j=IsInBuf(buf,list[i]> o if(j==-1>{

printf("%2d",buf[old]> buf[old]=list[i] old=(old+1>%(int>B

change++ o

}else printf(" "> o } printf("\n changes %2d\n",change> o /*

显示有多少个缺页中断 */

printf("\nLRU\n"> 。 /*显示LRU 淘汰地页面序列*/

change=0。

for(i=0 o i {buf[i]=f[i]=-1 o }

for(i=0 o i{

j=IsInBuf(buf,list[i]> o

old=oldest(f> o if(j==-1>{

printf("%2d",buf[old]>

o

buf[old]=list[i] f[old]=0 o change++

o }

else{ f[j]=0 o printf(" ">

printf("\n changes %2d\n",change> printf("\nOPT\n">

。/*显示OPT 淘汰地页

面序列*/

change=0。

for(i=0 o i {buf[i]=f[i]=-1

。 }

o } } /* 显示有多少个缺页中断 */

.

(1>.在一个请求分页存储管理系统中

,一个作业地页面走向为

4、3、2、1、4、3、

5、4、3、

2、1、5,当分配给该作业地物理块数分别为

4时,试计算采用先进先岀淘汰算法时

地缺页率(假

设开始执行时主存中没有页面

>,并将所得结果填表 .EmxvxOtOco

走向

4

3

2

1 「4 3

5

4

3

2

1

5

块1

块2

块3

块4

缺页

缺页率为: 【答案】

根据所给页面走向,使用先进先岀页面淘汰算法时,页面置换情况如下: 走向 4 3 2 1 4

3 5

4 3 2 1

5 块1 4

4 4 4

5 5 5 5 1 1 块2 3

3 3

3 4 4 A 4 5 块3

2

2

2 2

3 3 3 3 块4

1

1

1

1

2

2

2

缺页

:缺 缺 缺

缺 「缺 缺

缺页率为:10 /12

走向 4 3 2 1 「4 3 5

4

3

2 1

5

块1

4

4

4

1

1

1

5

5

5

for(i=0 o i{ j=IsI nBuf(buf,list[i]> if(j==-1>{ old=oldest2(list,buf,f,i> prin tf("%2d",buf[old]> buf[old]=list[i] f[old]=0 change++ else{ f[j]=0

o

o

} printf(" prin tf("\n cha

nges %2d\n",cha nge> getch(> o return

0 。}

<假设当前随机产生地页面序列为:

">

} }

/*显示有多少个缺页中断

*/

>rqyn14ZNXI