#include<stdio.h>
#include<time.h>
#include<time.h>
using namespace std;
#define MaxNum 320;//指令数
#define M 5;//内存容量
int PageOrder[MaxNum];//页面请求
int Simulate[MaxNum][M];//页面访问过程
int PageCount[M],LackNum;//PageCount用来记录LRU算法中最久未使用时间,LackNum记录缺页数
float PageRate;//命中率
bool IsExit(int i){//FIFO算法中判断新的页面请求是否在内存中
bool f=false;
for(int j=0;j<M;j++){
if(Simulate[i-1][j]==PageOrder[i]){//在前一次页面请求过程中寻找是否存在新的页面请求
f=true;}
}
return f;
}
int IsExitLRU(int i){//LRU算法中判断新的页面请求是否在内存中
int f=-1;
for(int j=0;j<M;j++){
if(Simulate[i-1][j]==PageOrder[i]){
f=j;
}
}return f;
}
int Compare(){//LRU算法找出内存中需要置换出来的页面
int p,q;
p=PageCount[0];
q=0;
for(int i=1;i<M;i++){
if(p<PageCount[i]){
p=PageCount[i];
q=i;
}
}return q;
}
void Init(){ //初始化页框
for(int k=0;k<MaxNum;k++){
int n=rand()%320;//随机数产生320次指令
PageOrder[k]=n/10;//根据指令产生320次页面请求
}
for(int i=0;i<MaxNum;i++){//初始化页面访问过程
for(int j=0;j<M;j++){
Simulate[i][j]=-1;
}
}
for(int q=0;q<M;q++){//初始化最久未使用数组
PageCount[q]=0;
}
}
void OutPut(){
int i,j;
printf("页面访问序列:/n");
for(j=0;j<MaxNum;j++)
{
printf("%d",PageOrder[j]);
}
printf("\n");
printf("页面访问过程(只显示前10个):");
for(i=0;i<10;i++){
for(j=0;j<M;j++){
if(Simulate[i][j]==-1)
printf(" ");
else
printf("%d",Simulate[i][j]);
}
printf("/n");
}
printf("缺页数= /n",LackNum);
printf("命中率= /n",PageRate);
printf("--------------------------------------------------------------/n");
}
void FIFO(){
int j,x=0,y=0;
LackNum=0,
Init();
for(j=0;j<M;j++){
for(int k=0;k<=j;k++)
{
if(j==k)
Simulate[j][k]=PageOrder[j];
else
Simulate[j][k]=Simulate[j-1][k];
}
LackNum++;
}
for(x=M;x<MaxNum;x++){
for(int t=0;t<M;t++){
Simulate[x][t]=Simulate[x-1][t];
}
if(!IsExit(x)){
LackNum++;
Simulate[x][y%5]=PageOrder[x];
y++;
}
}
PageRate=1-((float)LackNum/(float)MaxNum);
OutPut();
}
void LRU(){
int j,x=0,y=0;
LackNum=0,
Init();
for(j=0;j<M;j++){
for(int k=0;k<=j;k++)
{
PageCount[k]++;
if(j==k)
Simulate[j][k]=PageOrder[j];
else
Simulate[j][k]=Simulate[j-1][k];
}
LackNum++;
}
for(x=M;x<MaxNum;x++){
for(int t=0;t<M;t++){
Simulate[x][t]=Simulate[x-1][t];
}
int p=IsExitLRU(x);
if(p==-1){
int k;
k=Compare();
for(int w=0;w<M;w++)
{
if(w!=k)
PageCount[w]++;
else
PageCount[k]=1;
}
Simulate[x][k]=PageOrder[x];
LackNum++;
}
else{
for(int w=0;w<M;w++){
if(w!=p)
PageCount[w]++;
else
PageCount[p]=1;
}
}
}
PageRate=1-((float)LackNum/(float)MaxNum);
OutPut();
}
后续链接地址:http://zhidao.baidu.com/question/283941463.html
报200多处错误。不知道是不是因为编译工具的问题。这个应该是c++的程序,但是编译的时候连using namespace std; 都报错,可能是当成c程序编译了 编译工具是Dev-C++
报的错基本上都是 缺少这个“;” 或者什么地方不识别 之类的。程序本身应该没有错,如果能运行通,请把运行的工具发给我。要稍微轻量级的。。不要航母