《操作系统导论》实验七:模拟地址转换(段式)

1.作业包:segmentation.py
2.作业说明:

通过程序 s e g m e n t a t i o n . p y segmentation.py segmentation.py,我们能够观察到段式存储管理的地址转换。

命令行参数解释如下:

  • − h -h h: 查看帮助信息以及退出
  • − s -s s: 随即因子
  • − A -A A:逗号分隔的逻辑地址
  • − a -a a: 逻辑地址空间大小
  • − p -p p: 物理地址空间大小
  • − n -n n: 逻辑地址个数
  • − b -b b: 段0基地址寄存器的值
  • − l -l l: 段0界地址寄存器的值
  • − B -B B: 段1基地址寄存器的值
  • − L -L L: 段1界地址寄存器的值
  • − c -c c:计算地址转换结果

逻辑地址空间布局为2个段地址空间,段0向高地址增长,段1向低地址增长,逻辑地址最高为表示所在的段。
在这里插入图片描述

3.作业要求:

(1) 分别用随机因子 0,1,2 生成逻辑地址并转换为物理地址。
答:下面以随机因子 1 为例:

python ./segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 0 -c

在这里插入图片描述
逻辑地址空间大小 a s i z e asize asize 128 ( 2 7 ) 128(2^7) 128(27),逻辑地址长度为 7 7 7 位。当逻辑地址 d e c i m a l decimal decimal 作为带符号时,最高位 0 / 1 0/1 0/1 用于表示所处的段;而逻辑地址 d e c i m a l decimal decimal 作为无符号时,段 0 0 0 0 0 0~ 64 64 64 ,段 1 1 1 65 65 65~ 128 128 128

  • 根据逻辑地址 d e c i m a l decimal decimal 判断地址所处的段,段 0 0 0 0 0 0~ 64 64 64 ,段 1 1 1 65 65 65~ 128 128 128
  • 根据所在的段计算进程的长度 l e n len len,如果 l e n > l i m i t len>limit len>limit 的值则越界 l e n = { d e c i m a l + 1 段0:decimal 从0开始 a s i z e − d e c i m a l 段1:decimal 从asize开始 len= \begin{cases} decimal+1& \text{段0:decimal 从0开始}\\ asize-decimal& \text{段1:decimal 从asize开始} \end{cases} len={decimal+1asizedecimal0decimal 0开始1decimal asize开始
  • 未越界,则段 0 0 0 的物理地址为 l e n len len,段 1 1 1 的物理地址为 p s i z e − l e n psize-len psizelen

逻辑地址 d e c i m a l = 108 decimal=108 decimal=108 位于段 1 1 1,进程长度 l e n = 128 − 108 = 20 len =128-108=20 len=128108=20 未越界,物理地址 512 − 20 = 492 512-20=492 51220=492
逻辑地址 d e c i m a l = 108 decimal=108 decimal=108 位于段 1 1 1,进程长度 l e n = 128 − 97 = 31 len =128-97=31 len=12897=31 越界,其余同理

(2) 上题段0最高合法逻辑地、段1最低合法逻辑地址是多少?相应各自的最低非法逻辑地址和最高非法逻辑地址是多少?使用参数 -A 验证

答:段 0 0 0 的进程长度 l e n = d e c i m a l + 1 ≤ 20 len=decimal+1≤20 len=decimal+120,故最高合法逻辑地址为 19 19 19,相应最低非法逻辑地址为 20 20 20;段 0 0 0 的进程长度 l e n = a s i z e − d e c i m a l ≤ 20 len=asize-decimal≤20 len=asizedecimal20,故最高合法逻辑地址为 108 108 108,相应最高非法逻辑地址为 107 107 107。验证结果如下:

在这里插入图片描述
结果完全一致,逻辑地址 19 19 19 108 108 108可以访问, 逻辑地址 20 20 20 107 107 107越界。

(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 -b ? -l ? -B ? -L ? ?

答:逻辑地址 0 0 0 1 1 1 14 14 14 15 15 15 合法,其余逻辑地址非法,从而可知两个 l i m i t limit limit 都是 2 2 2,而段 0 0 0 b a s e base base 0 0 0,段 1 1 1 b a s e base base 16 16 16

python3 ./segmentation.py -a 16 -p 128 -A 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 -b 0 -l 2 -B 16 -L 2` 

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值