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

📄 虚拟.cpp

📁 使用虚拟内存技术的操作系统课程实验,成功实现
💻 CPP
字号:
#include <iostream.h>
#include <fstream.h>
#define length 8
#define n 64

struct{
	int lnumber;
	int flag;
	int pnumber;
	int write;
	int dnumber;
}page[n];
int m;
int p[length];
int head;

void input()                                 //文件输入,初始化分配表
{
	m=0;
    fstream   file("table.txt",fstream::in); 
    if(!file)   cout<<"error"<<endl;  
	for(int i=0;i<length;i++)
	{
		file>>page[i].lnumber;
		file>>page[i].flag;
		if(page[i].flag==1)
		{
			p[m]=i;
			m++;
		}
		file>>page[i].pnumber;
		file>>page[i].dnumber;
		file>>page[i].write;
	}
	file.close;
}

void page_interrupt(int lnumber)
{
	int j;
	cout<<"发生缺页中断"<<lnumber<<endl;
	j=p[head];
	p[head]=lnumber;
	head=(head+1)%m;
	if(page[j].write==1)
		cout<<"将页"<<j<<"写入磁盘"<<page[j].dnumber<<endl;
	page[j].flag=0;
	page[lnumber].pnumber=page[j].pnumber;
	page[lnumber].flag=1;
	page[lnumber].write=0;
	cout<<"淘汰主存块"<<page[j].pnumber<<"中的页"<<j<<",从磁盘第"<<page[lnumber].dnumber<<"块中调入页"<<lnumber<<endl;
}

int  command(unsigned laddress, int write)
{
	unsigned paddress, ad, pnumber,lnumber;
kk:
	lnumber=laddress>>6;
	ad=laddress&0X3f;
	if((int)lnumber>=length)
	{
		cout<<"不存在此页"<<endl;
		return 0;
	}
	if(page[lnumber].flag==1)
	{
		pnumber=page[lnumber].pnumber;
		paddress=pnumber*64+ad;
		cout<<"逻辑地址是"<<laddress<<",对应的物理地址是"<<paddress<<endl;
		if(write==1)
			page[lnumber].write=1;
	}
	else
	{
		page_interrupt(lnumber);
		goto kk;
	}
}


void main()
{
	unsigned laddress;
	int write;
	input();
	cout<<"请输入指令的逻辑地址和操作类型(1-修改,0-不修改,其他结束)"<<endl;
	cin>>laddress>>write;
	while(write==0||write==1)
	{
		command(laddress,write);
		cout<<"请输入指令的逻辑地址和操作类型(1-修改,0-不修改,其他结束)"<<endl;
		cin>>laddress>>write;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -