分页地址变换模拟程序

前言

参考代码

题目

某分页系统中,程序空间与物理空间都是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));

}


代码运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值