Paging-linear-translate.py

1 作业要求

通过运行 paging-linear-translate.py 这个程序,来理解进程虚拟地址到物理地址的转换,通过不同的参数来对进程地址空间,页表进行修改。

2 具体操作

2.1 参数说明

Options:
-h, --help                        帮助信息
-s SEED, --seed=SEED              改变seed的值
-a ASIZE, --asize=ASIZE           改变虚拟地址大小
-p PSIZE, --physmem=PSIZE         改变物理地址大小
-P PAGESIZE, --pagesize=PAGESIZE  改变页大小
-n NUM, --addresses=NUM           测试的虚拟地址个数
-u USED, --used=USED              Page Table中有效页的个数
-v                                详细模式
-c                                计算结果

2.2 具体测试

2.2.1 使用默认地址大小

这里写图片描述
虚拟地址的大小为16k (14 bit)。page大小为4k(12bit)。因此还剩下2bit用作Page Table的索引。因此Page Table的大小应该为4。

物理地址的大小为64k(16bit)。因为page的大小为4k(12bit),因此还剩下4bit。我们可以选择最左边的那个bit用作标志位,该标志位用来判断当前的物理页是否有效。

我们来计算第一个Virtual Address:0x00003229

将地址拆分:11 0x229

最左边的2个bit为11,因此对应于第四个Page。查看最左边一位:1 。因此该物理页有效。选择其中最右边的4bit:0x6(0110),因此最后的物理地址为:0x6229。

计算第二个Virtual Address:0x00001369

将地址拆分:01 0x369

最左边的2个bit为01,因此对应于第二个Page。查看最左边一位:0 。因此该物理页无效。输出Invalid。

其它二个Virtual Address的结果分析类似。

因此最后结果为:

VA虚拟地址物理地址结果VPN
VA0x000032290x00006229valid3
VA0x00001369invalid1
VA0x00001e80invalid1
VA0x00002556invalid2
VA0x00003a1e0x00006a1evalid3

验证结果:

这里写图片描述

2.2.2 修改物理地址空间为32k,虚拟地址空间为64k,计算结果。

这里写图片描述

我们发现,程序运行报错。

查看程序的限制:

if psize <= 1:
    print 'Error: must specify a non-zero physical memory size.'
    exit(1)

if asize < 1:
    print 'Error: must specify a non-zero address-space size.'
    exit(1)

if psize <= asize:
    print 'Error: physical memory size must be GREATER than address space size (for this simulation)'
    exit(1)

if psize >= convert('1g') or asize >= convert('1g'):
    print 'Error: must use smaller sizes (less than 1 GB) for this simulation.'
    exit(1)

vabits   = int(math.log(float(asize))/math.log(2.0))
mustbepowerof2(vabits, asize, 'address space must be a power of 2')

pagebits = int(math.log(float(pagesize))/math.log(2.0))
mustbepowerof2(pagebits, pagesize, 'page size must be a power of 2')

我们发现它的限制为:物理地址和虚拟地址的大小必须大于1,小于1G,并且为2的k次方。并且物理地址的大小必须大于虚拟地址。

2.2.3 使用其它参数

-s 1 -a 64k -p 32k -P 8k -n 5

这里写图片描述

修改 虚拟地址大小为32k(15bit),物理地址大小为64k(16bit),Page大小为8k(13bit)。测试的虚拟地址数量为5。

计算结果:(过程省略,与上面的计算过程相同)

VA虚拟地址物理地址结果VPN
VA0x000039880x0000d988valid1
VA0x00005367invalid2
VA0x000064f4invalid3
VA0x00000c03invalid0
VA0x000003a00x0000d988valid1

验证:(-v是详细模式)

这里写图片描述

2.2.4 使用-u参数

-u参数可以改变Page Table中有效的物理页个数。默认的是50%。修改为100%

这里写图片描述

我们发现Page Table中所有的Page 都是有效的。这样最后所有的虚拟地址都能转换为物理地址。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机的小粽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值