📄 pagedd.cpp
字号:
// pagedd.cpp : Defines the entry point for the console application.
//用FIFO算法用于替换页面
#include "stdafx.h"
#include"queue.h"
#include"iostream.h"
#include"string.h"
#include"fstream.h"
# define MAXL 11
int enterA(int *mms);
int main(int argc, char* argv[])
{
int mms[MAXL];
int fsize,tsize;
int temp,fn,ea;
int sumA=0,i;
//设置页面的大小和页表大小
cout<<"输入两个数,设置页面的大小和页表大小"<<endl;
cin>>fsize>>tsize;
//输入地址流;
sumA=enterA(mms);
/*cout<<"输入地址流.(输入-1表示结束)"<<endl;
while(1){
cin>>temp;
if(temp==-1) break;
mms[sumA]=temp;
sumA++;
}*/
Alist fifo(tsize);
cout<<"输入的逻辑地址流如下:"<<endl;
for(i=0;i<sumA;i++)
cout<<mms[i]<<"\t";
//总结果
cout<<"\n\n利用FIFO算法得到的结果如下:"<<endl;
for(i=0;i<sumA;i++){
fn=mms[i]/fsize;
ea=mms[i]%fsize;
cout<<"开始执行地址为"<<mms[i]<<"的指令,"
<<"其对应页号为:"<<fn
<<",页内偏移地址为:"<<ea<<endl;
//结果
cout<<"----因此其结果为:"<<endl;
if(fifo.isexist(fn))
cout<<"\t命中。"<<endl;
else if(fifo.insert(fn))
cout<<"\t从辅存中把页面"<<fn<<"装人内存。"<<endl;
else{
fifo.rem_ins(temp,fn);
cout<<"\t利用FIFO算法做替换,用"
<<fn<<"替换掉"<<temp<<endl;
}
cout<<"----此时页表如下:"<<endl;
fifo.print();
}
return 0;
}
//函数说明
///*
int enterA(int *mms){
int i=0;
ifstream myinf("fmms.txt",ios::in | ios::nocreate);
if(myinf.fail()){
cerr<<"error opening file wenfa\n";
return 0;
}
while(!myinf.eof()){
myinf>>mms[i];
i++;
}
/*int temp;
while(1) {
myinf>>temp;
if(temp==-1) break;
mms[i]=temp;
i++;
}*/
return i;
}//*/
bool Alist::insert(int n){
if(sum>=size) return false;
mmb[fence]=n;
fence=(fence+1)%size;
sum++;
return true;
}
bool Alist::rem_ins(int &n,int p){
n=mmb[fence];
mmb[fence]=p;
fence=(fence+1)%size;
return true;
}
void Alist::print(){
int i;
cout<<"\t物理块\t页号"<<endl;
for(i=0;i<sum;i++)
cout<<"\t"<<i<<"\t"<<mmb[i]<<endl;
for( ;i<size;i++)
cout<<"\t"<<i<<"\t(空)"<<endl;
}
bool Alist::isexist(int n){
for(int i=0;i<sum;i++)
if(mmb[i]==n)
return true;
return false;
}
/*//输入
cout<<"输入地址流.(输入-1表示结束)"<<endl;
while(1){
cin>>temp;
if(temp==-1) break;
mms[sumA]=temp;
sumA++;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -