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

📄 address-translation.cpp

📁 操作系统
💻 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 + -