前言
题目
某分页系统中,程序空间与物理空间都是2GB,页面大小为4KB。已知某进程的页表如下,请编写程序模拟分页系统的地址变换过程。要求分为公式法和硬拼法两种方式实现,并对比体会两种方法的差别。
要求:
(1)用户输入逻辑地址,程序输出对应物理地址
(2)用户输入的逻辑地址可以是十进制也可以是十六进制
(3)输出的物理地址可以是十进制也可以是十六进制
(4)对比公式法和硬拼法的计算结果,看看是否一致。
题目解析
物理地址 = 块号页面大小 + 块内地址 = 块号页面大小 + 页内地址
代码实现
#include<stdio.h>
int pageTable[10]={32102,443217,6723,8985,11238,
29065,234205,45812,240561,300451};
//PageSize
#define PageSize 4096
#define PageDigit 12
//virtual address
int formulaPaging(int VA) {
//virtual page number
int VPN = VA/PageSize;
//virtual page offset
int VPO = VA%PageSize;
//physical page offset
int PPN = pageTable[VPN];
//physical address
return PPN*PageSize + VPO;
}
int attachPaging(int VA) {
//virtual page number
int VPN = VA>>PageDigit;
//virtual page offset
int VPO = VA&((1<<(PageDigit))-1);
//physical page offset
int PPN = pageTable[VPN];
//physical address
return (PPN<<PageDigit) + VPO;
}
int main() {
int VA;
printf("请输入逻辑地址:");
scanf("%d",&VA);
printf("-----------------formulaPaging---------------------\n");
printf("物理地址为:%d\n",formulaPaging(VA));
printf("十六进制物理地址为:%x\n",formulaPaging(VA));
printf("-----------------attachPaging---------------------\n");
printf("物理地址为:%d\n",attachPaging(VA));
printf("十六进制物理地址为:%x\n",attachPaging(VA));
}