【操作系统导论】第16章课后习题解答


前言

内容仅作记录,请谨慎参考

16.1

题目描述

在这里插入图片描述

分析及解答

(1) 输入命令./segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 0
得到如下模拟程序:

在这里插入图片描述

从模拟结果中我们可以看到,虚拟地址空间大小为128,物理地址空间大小为512
同时物理空间被分成了两个段,其中第一个段segmentation 0的基址为0,大小为20,正向增长;第二个段segmentation 1的基址为512,大小为20,反向增长。
由于有两个段,分析后将虚拟地址转化的二进制的最高两位作为段的判断,00表示在segmentation 0而01表示在segmentation 1
对于VA 0(108):将其转化为二进制为:01101100,段(01),偏移量(101100即-20)
故其对应segmentation 1这个段,物理地址为512+(-20)=492;
对于VA 1(97):将其转化为二进制为:01100001,段(01),偏移量(100001即-31)
由于段的大小为20,故超出了限制,段错误;
对于VA 2(53):将其转化为二进制为:00110101,段(00),偏移量(110101即-11)
segmentation 0为正向增长的段,偏移量不能为负,段错误;
对于VA 3(33):将其转化为二进制为:00100001,段(00),偏移量(100001即-31)
segmentation 0为正向增长的段,偏移量不能为负,段错误;
对于VA 4(65):将其转化为二进制为:01000001,段(01),偏移量(000001即1)
segmentation 1为反向增长的段,偏移量不能为正,段错误;

输入命令./segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 0 -c查看模拟结果:

在这里插入图片描述

可以看到与上述分析是一致的

(2) 输入命令./segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 1
得到如下模拟程序:

在这里插入图片描述

对于VA 0(17):将其转化为二进制为:00010001,段(00),偏移量(010001即17)
故其对应segmentation 0这个段,物理地址为:0+17=17;
对于VA 1(108):将其转化为二进制为:01101100,段(01),偏移量(101100即-20)
故其对应segmentation 1这个段,物理地址为512+(-20)=492;
对于VA 2(97):将其转化为二进制为:01100001,段(01),偏移量(100001即-31)
由于段的大小为20,故超出了限制,段错误;
对于VA 3(32):将其转化为二进制为:00100000,段(00),偏移量(100001即-32)
segmentation 0为正向增长的段,偏移量不能为负,段错误;
对于VA 4(63):将其转化为二进制为:00111111,段(00),偏移量(111111即-1)
segmentation 0为正向增长的段,偏移量不能为负,段错误;

输入命令./segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 1 -c查看模拟结果:

在这里插入图片描述

可以看到与上述分析是一致的

(3) 输入命令./segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 2
得到如下模拟程序:

在这里插入图片描述

对于VA 0(122):将其转化为二进制为:01111010,段(01),偏移量(111010即-6)
故其对应segmentation 1这个段,物理地址为:512+(-6)=506;
对于VA 1(121):将其转化为二进制为:01111001,段(01),偏移量(111001即-7)
故其对应segmentation 1这个段,物理地址为:512+(-7)=505;
对于VA 2(7):将其转化为二进制为:00000111,段(00),偏移量(000111即7)
故其对应segmentation 0这个段,物理地址为:0+7=7;
对于VA 3(10):将其转化为二进制为:00001010,段(00),偏移量(001010即10)
故其对应segmengtation 0这个段,物理地址为:0+10=10;
对于VA 4(106):将其转化为二进制为:01101010,段(01),偏移量(101010即-22)
由于段的大小为20,故超出了限制,段错误;

输入命令./segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 2 -c查看模拟结果:

在这里插入图片描述

可以看到与上述分析是一致的。

16.2

题目描述

在这里插入图片描述

分析及解答

由于段0(正向增长)的基址为0,size为20:
故段0的最高合法虚拟地址为19;
由于段1(反向增长)的基址为512,size为20:
故段1的最低合法虚拟地址为108;
整个地址空间中最低和最高的非法地址是0和127
使用-A设定特殊的虚拟地址:19,20,107,108,0,127,128测试结果的正确性:
在这里插入图片描述

16.3

题目描述

在这里插入图片描述

分析及解答

查看英文原书可知,此处符号翻译有误:为指定的地址流生成以下转换结果:有效,有效,违规…违规,有效,有效
即,虚拟地址0,1和14,15可以转换成功,那么只需确保两个段的size为2,同时二者的基址相差至少为4即可:
例如可以这样设置:
./segmentation.py -a 16 -p 128 -A 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
–b0 0 --l0 2
–b1 4 --l1 2 -c
在这里插入图片描述

当然,符合题意得组合还有很多,在此不一一列出了。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鱼树C

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

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

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

打赏作者

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

抵扣说明:

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

余额充值