#include<iostream>
using namespace std;
typedef int Status;
#define blocklength 10
#define OK 1
#define ERROR 0
#define OWERFLOW -1
//页表结构
typedef struct{
int page_num;
int status;
int block_num;
int address;
}PAGE;
PAGE page[7];
//初始化页表
Status Initpage(){
PAGE page[7]={
0,1,5,11,
1,1,8,12,
2,1,9,13,
3,1,1,21,
4,0,-1,22,
5,0,-1,23,
6,0,-1,121
};
return OK;
}
//地址转换程序
Status trans(int j,int k)
{
int physics_address;
physics_address=page[j].block_num*blocklength+k;
cout<<"该逻辑地址对应的十进制物理地址是:"<<physics_address<<endl;
return OK;
}
//页面中断机制
Status judge(int h,int f)
{
if (h>6||f>blocklength) cout<<"页面产生越界中断"<<endl;
else cout<<"页面未产生页面中断"<<endl;
return OK;
}
//地址转换机构
Status Transform(){
int logic_address;
cout<<"***本程序是实现逻辑地址到物理地址的转换,页面大小是128B,***";
cout<<"请输入四位的十进制的逻辑地址:"<<endl;
cin>>logic_address;
int m=logic_address/blocklength;
int n=logic_address%blocklength;
cout<<m<<" "<<n<<endl;
judge(m,n);//页面中断机制
if (page[m].status=1)
{
cout<<"该页表"<<m<<"在内存中"<<endl;
trans(m,n);//调用地址转换程序
}
else cout<<"*"<<m<<"不在内存中"<<endl;
/*Replace();//页表置换机构
trans(m,n);//在次调用地址转换程序*/
return OK;
}
/*//页表置换机构
Status Replace()
{
}*/
//主函数
int main()
{
Initpage();
Transform();
return 0;
}