?? 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 + -