#include #include #include #include using namespace std; int BlockNum[100]; int stack[100],stack1[100]; char str[30]; typedef struct Memory { char PhysicalAddress[30]; char ActualAddress[30]; }memory; typedef struct Page { int BlockInPagenum; int table; }page; string BiteToBite0(int sum) { int i,j,k; char s[100]; char str[30]="\\0"; char str2[30]="\\0"; s['0']=0;s['1']=1;s['2']=2;s['3']=3; s['4']=4;s['5']=5;s['6']=6;s['7']=7; s['8']=8;s['9']=9;s['A']=10;s['B']=11; s['C']=12;s['D']=13;s['E']=14;s['F']=15; i=0; while(sum>0) { int t=sum%16; if(t>=10) { str[i++]=char(t-10+'A'); } else str[i++]=char(t+'0'); sum=sum/16; } for(j=i-1,k=0;k<=i-1,j>=0;k++,j--) str2[k]=str[j]; return str2; } string BiteToBite(char str[30],int a,int b) { int i,j,k,sum,length; char s[100]; char str2[30]="\\0"; s['0']=0;s['1']=1;s['2']=2;s['3']=3; s['4']=4;s['5']=5;s['6']=6;s['7']=7; s['8']=8;s['9']=9;s['A']=10;s['B']=11; s['C']=12;s['D']=13;s['E']=14;s['F']=15; length=strlen(str); k=1;sum=0;i=length-1; while(i>=0) { sum+=s[str[i]]*k; k=k*a; i--; } i=0; while(sum>0) { int t=sum%b; if(t>=10) { str[i++]=char(t-10+'A'); } else str[i++]=char(t+'0'); sum=sum/b; } for(j=i-1,k=0;k<=i-1,j>=0;k++,j--) str2[k]=str[j]; return str2; } int BiteToBite2(char str[30],int a) { int i,k,sum,length; char s[100]; s['0']=0;s['1']=1;s['2']=2;s['3']=3; s['4']=4;s['5']=5;s['6']=6;s['7']=7; s['8']=8;s['9']=9;s['A']=10;s['B']=11; s['C']=12;s['D']=13;s['E']=14;s['F']=15; length=strlen(str); k=1;sum=0;i=length-1; while(i>=0) { sum+=s[str[i]]*k; k=k*a; i--; } return sum; } void creatMap(int m[10][10]) { int i,j; srand(time(NULL)); for(i=0;i<10;i++) for(j=0;j<10;j++) m[i][j]=rand()%2; for(i=0;i<10;i++) { for(j=0;j<10;j++) cout< } int main() { int i,bnum,temp,In_page,yu_num,wu_num,m0; int j=0; int Block_Num; int Page_Num; int Block_Size; int m[10][10]; page PageNum[100],PageNum1[100]; bnum=0;temp=0; cout<<"**************欢迎使用**************"< cin>>Page_Num; cout<<"Page "<<"Table "< PageNum[i].BlockInPagenum=PageNum[i].table=0; printf("%2d %2d\ ;j++) if(m[i][j]==0) { BlockNum[bnum]=10*i+j; cout<<"第"< bnum++; } if(temp==1)break; } memory M[100]; float rate; char ch; float times; float part_times; int top=-1,BiaoZhi,k0; float que_ye; k0=j=0; part_times=times=0; cout< switch(ch) { case'a': while(1) { int temp1;int i=0;BiaoZhi=0; cout<<"输入逻辑地址(10进制):"; cin>>M[i].PhysicalAddress; In_page=BiteToBite2(M[i].PhysicalAddress,10); temp1=int(In_page/(Block_Size*1024)); yu_num=In_page%(Block_Size*1024); cout<<"16进制为:"< { cout<<"超出了页表个数!!!操作失败"< else { if(j wu_num=BlockNum[j] *(Block_Size)*1024+yu_num; PageNum[temp1].BlockInPagenum=BlockNum[j]; PageNum[temp1].table=1; cout<<"物理地址是: 十进制 十六进制"< printf("%2d %2d\ num; cout<<"物理地址是: 十进制 十六进制"< printf("%2d %2d\ geNum[i].BlockInPagenum,PageNum[i].table); } } else { PageNum[temp1].BlockInPagenum=PageNum[stack[0]].BlockInPagenum; PageNum[temp1].table=1; PageNum[stack[0]].BlockInPagenum=0; PageNum[stack[0]].table=0; for(i=0;i stack[i]=stack[i+1]; } stack[Block_Num-1]=temp1; wu_num=PageNum[temp1].BlockInPagenum *(Block_Size)*1024+yu_num; cout<<"物理地址是: 十进制 十六进制"< printf("%2d %2d\