一、总体思路
首先让用户自行输入页表。而后根据用户输入的逻辑地址判断是否出现越界,若越界,则进行提示;否则根据页表对应的物理块号计算其对应的物理地址。(注:在实际的OS中,实现逻辑地址到物理地址的转换是由专门的硬件来完成,以下只是用代码模拟实现)
二、基本流程图
三、代码实现
#include<stdio.h>
#define pagesize 1024 //假设页面大小为1k
int main()
{
int num,log,phy,flag;//分别定义页表表项数、逻辑地址、物理地址及退出标志
printf("请输入页表表项数:");
scanf("%d", &num);
int table[2][num];//定义页表
printf("请输入页表内容(页号在前,物理块号在后):\n");
//用户输入页表
for(int i=0;i<num;i++)
{
for(int j=0;j<2;j++)
{
scanf("%d",&table[i][j]);
}
}
//计算物理地址
do
{
printf("请输入要计算的逻辑地址:");
scanf("%d",&log);
int page=log/pagesize;
//判断是否出现越界错误
if( page> (num-1) )
{
printf("越界错误\n");
}
else
//计算物理地址
{
int x=log%pagesize;
phy=( x + pagesize*table[page][1]);
printf("逻辑地址 %d 对应的物理地址为 %d \n",log,phy);
}
printf("是否继续计算(1--继续 0--退出):");
scanf("%d",&flag);
}while(flag==1);
return 0;
}