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

目录

  • 前言
  • 16.1
    • 题目描述
    • 分析及解答
  • 16.2
    • 题目描述
    • 分析及解答
  • 16.3
    • 题目描述
    • 分析及解答


前言

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

16.1

题目描述

【操作系统导论】第16章课后习题解答_第1张图片

分析及解答

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

【操作系统导论】第16章课后习题解答_第2张图片

从模拟结果中我们可以看到,虚拟地址空间大小为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查看模拟结果:

【操作系统导论】第16章课后习题解答_第3张图片

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

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

【操作系统导论】第16章课后习题解答_第4张图片

对于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查看模拟结果:

【操作系统导论】第16章课后习题解答_第5张图片

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

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

【操作系统导论】第16章课后习题解答_第6张图片

对于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章课后习题解答_第7张图片

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

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章课后习题解答_第8张图片

16.3

题目描述

【操作系统导论】第16章课后习题解答_第9张图片

分析及解答

查看英文原书可知,此处符号翻译有误:为指定的地址流生成以下转换结果:有效,有效,违规…违规,有效,有效
即,虚拟地址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
【操作系统导论】第16章课后习题解答_第10张图片

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

你可能感兴趣的:(操作系统,linux)