📄 address-translation.cpp
字号:
#include <iostream.h>
void main()
{
int num[5]={0,1,2,3,4};//段、页号
int phn[5]={2,6,9,11,13};//物理块号
int sbe[5]={210,2350,100,1350,1938};//段、页表起址
int sle[5]={500,20,90,590,95};//段、页表长度
int a;//选择0 1
cout<<"********************* Liz的操作系统课设*********************"<<endl;
cout<<"*******************1--进行地址转换0--退出********************"<<endl;
cin>>a;
while(a==1)
{
if(a==1)
{
int b;
cout<<"请选择存储管理方式:1:分页式;2:分段式;3:段页式;0:返回:"<<endl;
cin>>b;
while(b==1||b==2||b==3)
{
if(b==1)//页式
{
cout<<"页表为:";
cout<<"-----------------------------------------------------------------"<<endl;
cout<<"页表号:";
for(int n=0;n<=4;n++)
{
cout<<n<<'\t';
}
cout<<endl;
cout<<"特征位:";
for(int o=1;o<=5;o++)
{
cout<<1<<'\t';
}
cout<<endl;
cout<<"物理块:";
for(int p=0;p<=4;p++)
{
cout<<phn[p]<<'\t';
}
cout<<endl;
cout<<"-----------------------------------------------------------------"<<endl;
int W;
int d,P,D;
cout<<"请输入逻辑地址(小于5120的整数):"<<endl;
cin>>d;
P=d/1024;
D=d%1024;
if(P>=5)
cout<<"逻辑地址"<<"“"<<d<<"”"<<"为非法地址!"<<endl;
for(int e=0;e<=4;e++)
{
if(P==e)
{
W=phn[e]*1024+D;
cout<<"逻辑地址"<<"“"<<d<<"”"<<"所在页号为:"<<P<<endl;
cout<<"逻辑地址"<<"“"<<d<<"”"<<"页内位移为:"<<D<<endl;
cout<<"逻辑地址"<<"“"<<d<<"”"<<"转换为物理地址为:"<<W<<endl;
break;
}
}
}
if(b==2)//段式
{
cout<<"段表为:";
cout<<"-----------------------------------------------------------------"<<endl;
cout<<"段号:";
for(int q=0;q<=4;q++)
{
cout<<q<<" ";
}
cout<<endl;
cout<<"起址:";
for(int r=0;r<=4;r++)
{
cout<<sbe[r]<<'\t';
}
cout<<endl;
cout<<"段长:";
for(int s=0;s<=4;s++)
{
cout<<sle[s]<<'\t';
}
cout<<endl;
cout<<"-----------------------------------------------------------------"<<endl;
int W2;
int f,g;
cout<<"请输入逻辑地址的段号(0~4)、段内位移:"<<endl;;
cin>>f>>g;
if(f>=5)
cout<<"段号应为0,1,2,3,4!"<<endl;
for(int h=0;h<=4;h++)
{
if(f==h&&g<=sle[h])
{
W2=sbe[h]+g;
cout<<"逻辑地址"<<"("<<f<<","<<g<<")"<<"为合法地址,其对应的物理地址为:"<<W2<<endl;
break;
}
}
for(int x=0;x<=4;x++)
{
if(f==x&&g>sle[x])
{
cout<<"逻辑地址"<<"("<<f<<","<<g<<")"<<"发生地址越界!"<<endl;
break;
}
}
}
if(b==3)//段页式
{
cout<<"段页表为:"<<endl;
cout<<"-----------------------------------------------------------------"<<endl;
cout<<"段页表号:";
for(int y=0;y<=4;y++)
{
cout<<y<<'\t';
}
cout<<endl;
cout<<"页表始址:";
for(int z=0;z<=4;z++)
{
cout<<sbe[z]<<'\t';
}
cout<<endl;
cout<<"页表长度:";
for(int u=0;u<=4;u++)
{
cout<<sle[u]<<'\t';
}
cout<<endl;
cout<<"-----------------------------------------------------------------"<<endl;
cout<<"页表为:"<<endl;
cout<<"-----------------------------------------------------------------"<<endl;
cout<<"页表号:";
for(int t=0;t<=4;t++)
{
cout<<t<<'\t';
}
cout<<endl;
cout<<"特征位:";
for(int v=0;v<=4;v++)
{
cout<<1<<'\t';
}
cout<<endl;
cout<<"物理块:";
for(int w=0;w<=4;w++)
{
cout<<phn[w]<<'\t';
}
cout<<endl;
cout<<"-----------------------------------------------------------------"<<endl;
int W31,W32;
int h,i,j;
cout<<"请输入逻辑地址的段号(0~4)、段内页号(0~4)、页内位移:"<<endl;;
cin>>h>>i>>j;
if(h>=5)
cout<<"段号应为0,1,2,3,4!"<<endl;
if(i>=5)
cout<<"页号应为0,1,2,3,4!"<<endl;
for(int k=0;k<=4;k++)
{
if(h<=4&&i==k)
{
W31=phn[k];
W32=W31*1024+j;
cout<<"逻辑地址"<<"("<<h<<","<<i<<","<<j<<")"<<"对应的物理块号为:"<<W31<<endl;
cout<<"逻辑地址"<<"("<<h<<","<<i<<","<<j<<")"<<"对应的物理地址为:"<<W32<<endl;
break;
}
}
}
cout<<"请选择存储管理方式:1:分页式2:分段式3:段页式0:返回主界面"<<endl;;
cin>>b;
}
}
cout<<"*******************1--进行地址转换0--退出********************"<<endl;
cin>>a;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -