码迷,mamicode.com
首页 > 编程语言 > 详细

设计一个程序,有一个虚拟存储区和内存工作区,实现下述三种算法中的任意两种,计算访问命中率(命中率=1-页面失效次数/页地址流长度)。附加要求:能够显示页面置换过程。算法包括:先进先出的算法(FIFO)、最少使用算法(LFU)、最近未使用算法(NUR)

时间:2017-10-27 23:08:49      阅读:829      评论:0      收藏:0      [点我收藏+]

标签:fine   未使用   算法   内存   arc   状态   部分   build   计算   

第一部分。。。

#include <cstdlib>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define bsize 4 //物理块大小
#define psize 16 //进程大小
typedef struct page
{
int num; /*记录页面号*/
int time; /*记录调入内存时间*/
}Page; /* 页面逻辑结构,结构为方便算法实现设计*/
Page b[bsize]; /*内存单元数*/
int c[bsize][psize]; /*暂保存内存当前的状态:缓冲区*/
int queue[100]; /*记录调入队列*/
int K; /*调入队列计数变量*/
int phb[bsize]={0}; //物理块标号
int pro[psize]={0}; //进程序列号
int flag[bsize] = {0}; //进程等待次数(存放最久未被使用的进程标志)
int i = 0, j = 0,k = 0; //i表示进程序列号,j表示物理块号
int m = -1, n = -1; //物理块空闲和进程是否相同判断标志
int max = -1,maxflag = 0; //标记替换物理块进程下标
int count = 0; //统计页面缺页次数
//随机产生序列号函数
int* build()
{
printf("随机产生一个进程序列号为:\n");
int i = 0;
for(i=0; i<psize; i++)
{
pro[i] = 10*rand()/(RAND_MAX+1)+1;
printf("%d ",pro[i]);
}
printf("\n");
return(pro);
}
//查找空闲物理块

int searchpb()
{
for(j=0; j<bsize; j++)
{
if(phb[j] == 0)
{
m = j;
return m;
break;
}
}
return -1;
}
//查找相同进程

int searchpro()
{
for(j = 0; j < bsize; j++)
{
if(phb[j] == pro[i])
{
n = j;
return j;
}
}
return -1;
}
//初始化内存
void empty()
{
for(i=0;i<bsize;i++)
phb[i]=0;
count=0; //计数器置零
}
//先进先出页面置换算法
void FIFO()
{
for(i = 0; i<psize; i++)
{
m=searchpb();
n=searchpro();
//找flag值最大的
for(j = 0; j < bsize;j++)
{
if(flag[j]>maxflag)
{
maxflag = flag[j];
max = j;
}
}
if(n == -1) //不存在相同进程
{
if(m != -1) //存在空闲物理块
{
phb[m] = pro[i]; //进程号填入该空闲物理块
count++;
flag[m] = 0;
for(j = 0;j <= m; j++)
{
flag[j]++;
}
m = -1;
}
else //不存在空闲物理块
{
phb[max] = pro[i];
flag[max] = 0;
for(j = 0;j < bsize; j++)
{
flag[j]++;
}
max = -1;
maxflag = 0;
count++;
}
}
else //存在相同的进程
{
phb[n] = pro[i];
for(j = 0;j < bsize; j++)
{
flag[j]++;
}
n = -1;
}
for(j = 0 ;j < bsize; j++)
{
printf("%d ",phb[j]);
}
printf("\n");
}
printf("缺页次数为:%d\n",count);
printf("缺页率为:%16.6f",(float)count/16);
printf("\n");
}
/*初始化内存单元、缓冲区*/
void Init(Page *b,int c[bsize][psize])
{
int i,j;
for(i=0;i<psize;i++)
{
b[i].num=-1;
b[i].time=psize-i-1;
}
for(i=0;i<bsize;i++)
for(j=0;j<psize;j++)
c[i][j]=-1;
}

设计一个程序,有一个虚拟存储区和内存工作区,实现下述三种算法中的任意两种,计算访问命中率(命中率=1-页面失效次数/页地址流长度)。附加要求:能够显示页面置换过程。算法包括:先进先出的算法(FIFO)、最少使用算法(LFU)、最近未使用算法(NUR)

标签:fine   未使用   算法   内存   arc   状态   部分   build   计算   

原文地址:http://www.cnblogs.com/lozjl/p/7745491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!