在未来最长时间不访问的页面
先进先出算法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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)