⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagedd.cpp

📁 题目:设计一个请求页式存储管理方案
💻 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 + -