当前位置:首页 > 内存 > 正文

设计一个虚拟存储区和内存工作区

  • 内存
  • 2024-06-11 11:01:22
  • 8458

一、设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率:1.先进先出(FIFO)算法
#include
#include
#definemSIZE3
#pSIZE8的定义
staticintmemery[mSIZE]={0};
staticintprocess[pSIZE]={0};
//staticintprocess[pSIZE]={2,3,2,1,5,2,4,5,3,2,5,2};
//staticintprocess[pSIZE]={7,10,1,2,10,3,10,4,2,3,10,3,2,1,2,10,1,7,10,1};
voidbuild();//生成随机数序列
voidFIFO();//最近未使用的替换(LRU)算法
intmain(intargc,char*argv[])
{
printf("生成随机序列如下:\n");
build();
printf("先进先出(FIFO)页面替换算法\n");
FIFO();
system("PAUSE");
return0;
voidbuild()
{
inti=0;
for(i=0;i{
Process[i]=(int)(10.0*rand()/(RAND_MAX+1.0)+1);
printf("%d",process[i]);
printf("\n");
voidFIFO()
{
inttime[mSIZE]={0};
inti=0,j=0;
intm=-1,n=-1;
intmax=-1,maxtime=0;
intcount=0;
for(i=0;i{
//查找第一个空闲物理块
for(j=0;j{
if(memery[j]==0)
{
m=j;
break;

for(j=0;j{
if(memery[j]==process[i])
{
n=j;
//查找时间值最大的值
for(j=0;j{
if(time[j]>maxtime)
{
maxtime=time[j];
max=j;
}
if(n==-1)//同一个进程不存在
{
if(m!=-1)//有空闲物理块
{
memery[m]=process[i];
time[m]=0;
for(j=0;j<=m;j++)
{
time[j]++;
m=-1;
else//没有空闲物理块
{
内存[max]=process[i];
时间[max]=0;
for(j=0;j{
时间[j]++;
max=-1;
maxtime=0;
count++;
}
else//还有相同的进程
{
memery[n]=process[i];
for(j=0;j{
time[j]++;
n=-1;
for(j=0;j{
printf("%d",memery[j]);
printf("\n");
printf("页面转换次数为:%d\n",count);
2.未使用的最新算法(LRU)
#include
#include
#definemSIZE3
#definepSIZE8
staticintmemery[mSIZE]={0};
staticintprocess[pSIZE]={0};
//staticintprocess[pSIZE]={2,3,2,1,5,2,4,5,3,2,5,2};
voidbuild();//生成随机数序列
voidLRU();//最近未使用的替换(LRU)算法
intmain(intargc,char*argv[])
{
printf("随机序列生成如下:\n");
build();
printf("上次使用未使用"(LRU)替换算法\n");
LRU();
system("PAUSE");
return0;
voidbuild()
{
inti=0;
for(i=0;i{
操作[i]=(int)(10.0*rand()/(RAND_MAX+1.0)+1);
printf("%d",process[i]);
printf("\n");
voidLRU()
{
intflag[mSIZE]={0};
inti=0,j=0;
intm=-1,n=-1;
intmax=-1,maxflag=0;
intcount=0;
for(i=0;i{
//搜索关于第一个自由质量
for(j=0;j{
if(memery[j]==0)
{
m=j;
break;
//查找相同进程名
for(j=0;j{
if(memery[j]==process[i])
{
n=j;
//查找符号值最大的值
for(j=0;j{
if(flag[j]>maxflag)
{
maxflag=flag[j]
max=j;
if(n==-1)//相同操作不存在
{
if(m!=-1)//有空闲物理块
{
memery[m]=process[i];
flag[m]=0;
for(j=0);j<=m;j++)
{
flag[j]++;
m=-1;
else//无空闲物理块
{
memery[max]=process[i];
flag[max]=0;
for(j=0;j{
flag[j]++;
max=-1;
maxflag=0;
count++;
else//存在相同进程
{
memery[n]=process[i];
flag[n]=0;
if(m!=-1)//如果存在自由物理质量
{
flag[m]=0;
for(j=0;j{
flag[j]++;
max=-1;
maxflag=0;
n=-1;
for(j=0;j{
printf("%d",memery[j]);
printf("\n");
printf("页面转换次数为:%d\n",count);
3.最优替换算法(OPT)
抱歉,我不知道!