title: 操作系统实验四
categories:
- 操作系统实验
tags:
作业
设计页表结构
设计地址重定位算法
有良好的人机对话界面
代码
#include <iostream>
#include <cmath>
using namespace std;
const int pagesize=2048;
const int pagetablelegth=64;
int pagetable[pagetablelegth]={0,42,29,15,45,31,44,43,
41,28,1,30,12,24,6,32,
14,27,13,46,7,33,10,22,
40,2,51,11,39,23,49,50,
26,16,25,4,47,17,3,48,
52,36,58,35,57,34,21,63,
5,37,18,8,62,56,20,54,
60,19,38,9,61,55,59,53};
void InputTwo()
{
long long int ErLogicAddress;
cout<<"请输入二进制的逻辑地址(地址最长为32位):";
cin>>ErLogicAddress;
int pageInsideNumber=0;
int middlepagesize=pagesize;
while(middlepagesize!=0)
{
middlepagesize=middlepagesize/2;
pageInsideNumber++;
}
long long int ErPpageInside=ErLogicAddress%(int)pow(10,pageInsideNumber);
long long int ErpageNumber=ErLogicAddress/pow(10,pageInsideNumber);
int SpageNumber=0;
int countwei=0;
while(ErpageNumber!=0)
{
int middle = ErpageNumber % 10;
SpageNumber+=middle*pow(2,countwei);
countwei++;
ErpageNumber=ErpageNumber/10;
}
int SPpagenumber = pagetable[SpageNumber];
long long int ErPpagenumber = 0;
int countwei2=0;
while(SPpagenumber>1)
{
int middle = SPpagenumber %2;
ErPpagenumber = ErPpagenumber+middle*pow(10,countwei2);
countwei2++;
SPpagenumber = SPpagenumber/2;
}
ErPpagenumber = ErPpagenumber*pow(10,pageInsideNumber)+ErPpageInside;
cout<<"转换为物理地址的二进制地址为:"<<ErPpagenumber;
}
void SjAddress()
{
int logicAddress;
cout<<"请输入十进制的逻辑地址为:";
cin>>logicAddress;
int pagenumber = logicAddress / pagesize;
int pageinsidesize = logicAddress % pagesize;
int physicsAddress = pagetable[pagenumber]*pagesize+pageinsidesize;
cout<<"十进制的物理的地址为:"<<physicsAddress;
}
int main()
{
cout<<"1.输入二进制地址\n2.输入十进制地址\n请输入:";
int options;
cin>>options;
switch(options)
{
case 1:{
InputTwo();
break;
}
case 2:{
SjAddress();
break;
}
}
return 0;
}