1.在做地址转换之前,让我们用模拟器来研究线性页表在给定不同参数的情况下如何改变大小。在不同参数变化时,计算线性页表的大小。一些建议输入如下,通过使用-v 标志,你可以看到填充了多少个页表项。
首先,要理解线性页表大小如何随着地址空间的增长而变化:
paging-linear-translate.py -P 1k -a 1m -p 512m -v -n 0
paging-linear-translate.py -P 1k -a 2m -p 512m -v -n 0
paging-linear-translate.py -P 1k -a 4m -p 512m -v -n 0
然后,理解线性页面大小如何随页大小的增长而变化:
paging-linear-translate.py -P 1k -a 1m -p 512m -v -n 0
paging-linear-translate.py -P 2k -a 1m -p 512m -v -n 0
paging-linear-translate.py -P 4k -a 1m -p 512m -v -n 0
在运行这些命令之前,请试着想想预期的趋势。页表大小如何随地址空间的增长而改
变?随着页大小的增长呢?为什么一般来说,我们不应该使用很大的页呢?
线性页表大小随着地址空间增长的变化:
可以看到,随着地址空间的增大,填充的页表项的数量会随之增加;这是因为在页的大小不变的情况下,地址空间越大则对应更多的页数,页的数量增加,页表大小也随之增加
线性页面大小如何随页大小的增长而变化:
可以看到,随着页大小的增大,填充的页表项的数量是会随之减少的,也就是页表大小减小;这是因为在地址空间不变的情况下,页的大小越大,被分成的页数就越少,页表大小也随之减小
2.现在让我们做一些地址转换。从一些小例子开始,使用-u 标志更改分配给地址空间
的页数。例如:
paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 0
paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 25
paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 50
paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 75
paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 100
如果增加每个地址空间中的页的百分比,会发生什么?
*(1)百分比为0时: *
我们可以看到模拟程序中的几个虚拟地址均未转换成功,这是因为虚拟地址对应的VPN在地址空间中未分配页,无法查找到PTE,所以不能成功
(2)百分比为25时:
有一个转换成功
(3)百分比为50时:
有三个转换成功了
(4)百分比为75时:
全部都转换成功了
(5)百分比为100时:
也全部转换成功了
综上可以看出:增加每个地址空间中页的百分比,虚拟地址转换成物理地址的成功率就会越高。
3.现在让我们尝试一些不同的随机种子,以及一些不同的(有时相当疯狂的)地址空
间参数:
paging-linear-translate.py -P 8 -a 32 -p 1024 -v -s 1
paging-linear-translate.py -P 8k -a 32k -p 1m -v -s 2
paging-linear-translate.py -P 1m -a 256m -p 512m -v -s 3
哪些参数组合是不现实的?为什么?
这三个都存在正确的转换,因此都不能算错误。但是三个的组合都不太合理。
1和2:地址空间太小,只能容下4个页。
3:页大小有点大了。