Paging-linear-translate.py

来源:互联网 发布:攻击根域名服务器 编辑:程序博客网 时间:2024/06/05 02:31

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 VA 0x00003229 0x00006229 valid 3 VA 0x00001369 invalid 1 VA 0x00001e80 invalid 1 VA 0x00002556 invalid 2 VA 0x00003a1e 0x00006a1e valid 3

验证结果:

这里写图片描述

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 VA 0x00003988 0x0000d988 valid 1 VA 0x00005367 invalid 2 VA 0x000064f4 invalid 3 VA 0x00000c03 invalid 0 VA 0x000003a0 0x0000d988 valid 1

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

这里写图片描述

2.2.4 使用-u参数

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

这里写图片描述

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

原创粉丝点击