目录
前言
内容仅作记录,请谨慎参考
18.1
题目描述
分析及解答
按照题目要求分别输入(项数太多,仅截图最后部分):
./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
可以看到,随着页大小的增大,填充的页表项的数量是会随之减少的,也就是页表大小减小;这是因为在地址空间不变的情况下,页的大小越大,被分成的页数就越少,页表大小也随之减小
18.2
题目描述
分析及解答
(1) 地址空间中页的百分比为0时:
输入命令:
./paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 0 -c
这里我们看到模拟程序中的几个虚拟地址均未转换成功,这是因为虚拟地址对应的VPN在地址空间中未分配页,无法查找到PTE,所以不能成功
(2) 地址空间中页的百分比为25时
输入命令:
./paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 25 -c
这时我们看到模拟程序中第二个虚拟地址成功转换为物理地址
11206对应二进制:10 1011 1100 0110 因为总共16个页,所以需要前四位作为VPN,即1010 对应[VPN 10],这时我们看到,在地址空间中该处分配了页表项,得到对应的PFN(16进制13,二进制10011),将10011<<10与1111000110相与得到100111111000110即4fc6(这里对地址转换机制做了详细解释,后续不再解释如此详细)
(3) 地址空间中页的百分比为50时
输入命令:
./paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 50 -c
[不会在CSDN里做表格,就截图了…小声比比]
可以看到,当地址空间中页的百分比为50时,有3个虚拟地址成功转换成物理地址
(4) 地址空间中页的百分比为75时
输入命令:
./paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 75 -c
可以看到,当地址空间中页的百分比为75时,模拟程序中所有的虚拟地址均成功转换为物理地址。
(5) 地址空间中页的百分比为100时
输入命令:
./paging-linear-translate.py -P 1k -a 16k -p 32k -v -u 100 -c
可以看到,当地址空间中页百分比为100时,模拟程序中所有的虚拟地址均成功转换为物理地址。
综上我们可以看到,增加地址空间中页的百分比,将会有更多的虚拟地址成功转换为物理地址。
18.3
题目描述
分析及解答
分别输入以下命令:
./paging-linear-translate.py -P 8 -a 32 -p 1024 -v -s 1 -c
./paging-linear-translate.py -P 8k -a 32k -p 1m -v -s 2 -c
./paging-linear-translate.py -P 1m -a 256m -p 512m -v -s 3 -c
产生的模拟结果如下图所示:
可以看到在三种情况下,模拟程序均能成功模拟,并且均有虚拟地址成功转换为物理地址
但是在前两种情况下,地址空间只能放下4个页,模拟程序可以这样,实际情况是不可能这么少的;在第三种情况下,一个页的大小为1m,这将会是非常耗费空间的,因此实际情况中也不会出现。
因此三种参数组合均是不现实的。