1.先让我们用一个小地址空间来转换一些地址。这里有一组简单的参数和几个不同的随机种子。你可以转换这些地址吗?
segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 0
segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 1
segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 2
随机种子0:
这里可以看到逻辑地址空间是128(2的7次方),划分成了两段,所以第一位为段选位
第一段:0~64 正向增长,第二段65~128 反向增长,Limit都是20
VA0:位于段1 偏移量为108-128=-20 物理地址为:512-20=492
VA1:位于段1 偏移量为 97-128=-31 31>20 超出限制
VA2:位于段0 偏移量为53 53>20 超出限制
VA3:位于段0 偏移量为33 33>20 超出限制
VA4:位于段1 偏移量为65-128=-63 63>20 超出限制
这里查看答案
随机种子1:
这里可以看到逻辑地址空间是128(2的7次方),划分成了两段,所以第一位为段选位
第一段:0~64 正向增长,第二段65~128 反向增长,Limit都是20
VA0:位于段0 偏移量为 17 物理地址为:0+17=17
VA1:位于段1 偏移量为 108-128=-20 物理地址为:512-20=492
VA2:位于段1 偏移量为 97-128=-31 31>20 超出限制
VA3:位于段0 偏移量为 32 32>20 超出限制
VA4:位于段0 偏移量为 63 63>20 超出限制
这里查看答案
随机种子2:
这里可以看到逻辑地址空间是128(2的7次方),划分成了两段,所以第一位为段选位
第一段:0~64 正向增长,第二段65~128 反向增长,Limit都是20
VA0:位于段1 偏移量为 122-128=-6 物理地址为:512-6=506
VA1:位于段1 偏移量为 121-128=-7 物理地址为:512-7=505
VA2:位于段0 偏移量为 7 物理地址为:0+7=7
VA3:位于段0 偏移量为10 物理地址为:0+10=10
VA4:位于段1 偏移量为106-128=-22 22>20 超出限制
这里查看答案
2.现在,让我们看看是否理解了这个构建的小地址空间(使用上面问题的参数)。段 0 中最高的合法虚拟地址是什么?段 1 中最低的合法虚拟地址是什么?在整个地址空间中,最低和最高的非法地址是什么?最后,如何运行带有-A 标志的 segmentation.py 来测试你是否正确?
段0最高的合法虚拟地址是20-1=19;段1最低的合法虚拟地址是128-20=108
整个地址空间中,最低的合法地址是0,最高的合法地址是127;
用-A验证:
3.假设我们在一个 128 字节的物理内存中有一个很小的 16 字节地址空间。你会设置什么样的基址和界限,以便让模拟器为指定的地址流生成以下转换结果:有效,有效,违规…违规,有效,有效?假设用以下参数:
segmentation.py -a 16 -p 128 -A 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
–b0 ? --l0 ? --b1 ? --l1 ?
有了前两道题的铺垫,可知分两段即可,第一段正向增长,第二段反向增长
0,1有效;14,15有效,其他都是违规,所以说两段的limit都是2