页面置换算法

页面置换算法,第1张

最优置换算法Optimal

在未来最长时间不访问的页面

先进先出算法First-In First-Out

在内存驻留时间最长的页面

链表

最近最久未使用算法Least Recently Used

最长时间没有被引用的页面

链表、栈

clock

缺页时,指针每遇到一个使用位为1的页框,修改为0.

只有缺页的时候,指针才会动。

物理页帧数量为3,且初始时没有对应的虚拟页。虚拟页访问序列为 0,1,2,0,1,3,0,3,1,0,3,请问采用最优置换算法的缺页次数为() 

物理页帧数量为3,且初始时没有对应的虚拟页。虚拟页访问序列为 0,1,2,0,1,3,0,3,1,0,3,请问采用LRU置换算法的缺页次数为() 

物理页帧数量为3,且初始时没有对应的虚拟页。虚拟页访问序列为 0,1,2,0,1,3,0,3,1,0,3,请问采用FIFO置换算法的缺页次数为()

物理页帧数量为4,且初始时没有对应的虚拟页。虚拟页访问序列为 0,3,2,0,1,3,4,3,1,0,3,2,1,3,4 ,请问采用CLOCK置换算法(用1个bit表示存在时间)的缺页次数为()

物理页帧数量为4,且初始时没有对应的虚拟页。虚拟页访问序列为 0,3,2,0,1,3,4,3,1,0,3,2,1,3,4 ,请问采用CLOCK置换算法(用2个关联,bit表示存在时间,可以表示4,)的缺页次数为() s3

[x] 7

[ ] 8

[ ] 9

[ ] 10

7

物理页帧数量为4

0,3,2,0,1,3,4,3,1,0,3,2,1,3,4

1 0

0

f 1

0 01 0

1 00    <--

2 00

3 00

2 3

3,0

f 2

0 01 0

0 01 0

1 01 3

2 00    <--

3 00

3 2

2,3,0

f 3

0 01 0

1 01 3

2 01 2 

3 00  <--

4 0

2,3,0

f 3

0 10 0

1 01 3

2 00 2 

3 00  <--

5 1

1,2,3,0

f 4

0 10 0 <--

1 01 3

2 01 2 

3 01 1 

6 3

1,2,3,0

0 10 0 <--

1 10 3

2 01 2 

3 01 1 

7 4

f 5

round 1

0 01 0 <--

1 01 3

2 00 2 

3 00 1 

round 2

0 00 0

1 00 3

2 01 4 

3 00 1  <--

8 3

f

0 00 0

1 01 3

2 01 4 

3 00 1  <--

9 1

f

0 00 0

1 01 3

2 01 4 

3 01 1  <--

//熬夜弄出来的,记得加分哦

#include<stdio.h>

void Print(int bc[],int blockCount)

{

for(int i=0i<blockCounti++)

{

printf("%d ",bc[i])

}

printf("\n")

}

bool Travel(int bc[],int blockCount,int x)

{

bool is_found=false

int i

for(i=0i<blockCounti++)

{

if(bc[i]==x)

{

is_found=true

break

}

}

return is_found

}

void FIFO(int pc[],int bc[],int pageCount,int blockCount)

{

printf("0:FIFO置换算法\n")

int i

if(pageCount<=blockCount)

{

printf("缺页次数为0\n")

printf("缺页率为0\n")

}

else

{

int noPage=0

int p=0

for(i=0i<pageCounti++)

{

//printf("引用页:%d\n",pc[i])

if(!Travel(bc,blockCount,pc[i]))

{

if(i<blockCount)

{

bc[i]=pc[i]

}

else

{

if(p==blockCount)

{

p=0

}

bc[p]=pc[i]

p++

}

noPage++

//printf("物理块情况:\n")

//Print(bc,blockCount)

}

//printf("\n")

}

printf("FIFO缺页次数为:%d\n",noPage)

printf("FIFO缺页率为:%.2f%%\n",(float)noPage/pageCount*100)

}

}

int FoundMaxNum(int a[],int n)

{

int k,j

k=a[0]

j=0

for (int i=0i<ni++)

{

if(a[i]>=k)

{

k=a[i]

j=i

}

}

return j

}

void LRU(int pc[],int bc[],int pageCount,int blockCount)

{

printf("1:LRU置换算法\n")

if(pageCount<=blockCount)

{

printf("缺页次数为0\n")

printf("缺页率为0\n")

}

else

{

int noPage=0

int i,j,m

int bc1[100]

for(i=0i<blockCounti++)

{

bc1[i]=0

}

for(i=0i<pageCounti++)

{

// printf("引用页:%d\n",pc[i])

if(!Travel(bc,blockCount,pc[i]))

{

if(i<blockCount)

{

bc[i]=pc[i]

for(int p=0p<=ip++)

{

bc1[p]++

}

}

else

{

for(j=0j<blockCountj++)

{

bc1[j]++

}

int k=FoundMaxNum(bc1,blockCount)

bc[k]=pc[i]

bc1[k]=1

}

noPage++

//printf("物理快情况:\n")

//Print(bc,blockCount)

}

else if(Travel(bc,blockCount,pc[i]))

{

if(i<blockCount)

{

for(j=0j<=ij++)

{

bc1[j]++

}

for(m=0m<=im++)

{

if(bc[m]==pc[i])

{

break

}

}

bc1[m]=1

bc[m]=pc[i]

}

else

{

for(j=0j<blockCountj++)

{

bc1[j]++

}

for(m=0m<blockCountm++)

{

if(bc[m]==pc[i])

{

break

}

}

bc1[m]=1

bc[m]=pc[i]

}

}

//printf("\n")

}

printf("LRU缺页次数为:%d\n",noPage)

printf("LRU缺页率为:%.2f%%\n",(float)noPage/pageCount*100)

}

}

void Optiomal(int pc[],int bc[],int pageCount,int blockCount)

{

printf("2:最佳置换算法\n")

if(pageCount<=blockCount)

{

printf("缺页次数为0\n")

printf("缺页率为0\n")

}

else

{

int noPage=0

int i,j,k

for(i=0i<pageCounti++)

{

// printf("引用页:%d\n",pc[i])

if(!Travel(bc,blockCount,pc[i]))

{

if(i<blockCount)

{

bc[i]=pc[i]

}

else

{

int max=0

int blockIndex

for(j=0j<blockCountj++)

{

for(k=ik<pageCountk++)

{

if(bc[j]==pc[k])

{

break

}

}

if(k>=max)

{

max=k

blockIndex=j

}

}

bc[blockIndex]=pc[i]

}

noPage++

//printf("物理快情况:\n")

//Print(bc,blockCount)

}

//printf("\n")

}

printf("OPT缺页次数为:%d\n",noPage)

printf("OPT缺页率为:%.2f%%\n",(float)noPage/pageCount*100)

}

}

int main()

{

int pageCount,blockCount,i,pc[100]

printf("输入页面数\n")

scanf("%d",&pageCount)

printf("输入页面走向\n")

for(i=0i<pageCounti++)

{

scanf("%d",&pc[i])

}

blockCount=3//物理块数

int bc1[100]

printf("\n")

FIFO(pc,bc1,pageCount,blockCount)

int bc2[100]

printf("\n")

LRU(pc,bc2,pageCount,blockCount)

int bc3[100]

printf("\n")

Optiomal(pc,bc3,pageCount,blockCount)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7844170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存