📄 虚拟.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 + -