1.作业包:relocation.py
2.作业说明:
通过程序 r e l o c a t i o n . p y relocation.py relocation.py,我们能够观察到地址转换与基地址寄存器、界地址寄存器的关系。
命令行参数解释如下:
- − h -h −h: 查看帮助信息以及退出
- − s -s −s: 随即因子
- − a -a −a: 逻辑地址空间大小
- − p -p −p: 物理地址空间大小
- − n -n −n: 逻辑地址个数
- − b -b −b: 基地址寄存器的值
- − l -l −l: 界地址寄存器的值
- − c -c −c:计算进程调度执行情况
逻辑地址空间布局简化为代码区、固定大小的栈区、向高地址增长的堆区,总长度为 7 K B 7KB 7KB,所以界地址寄存器保存 7 K B 7KB 7KB。
3.作业要求:
运行环境变更为 ubuntu20.04
,内置程序为 python3
,需要修改relocation.py
的 print ' '
为 print (' ')
(1) 分别用随机因子 1,2,3 生成一个进程的逻辑地址,判断是否越界,如果未越界输出转换结果。
答:下面以随机因子 1 为例:
python3 ./relocation.py -s 1 -c
逻辑地址空间大小为 1KB
,物理地址空间大小为16KB
,基地址寄存器为 0x0000363C(13884)
,界地址寄存器为 290
,其中第二个逻辑地址为 0x00000105(261)
,位于界地址寄存器的范围内,转换后结果为 0x00003741(14145)
。
(2) 使用参数 -s 0 -n 10
,如何使用-l
设置界地址寄存器的值,从而防止越界?
答:
随机因子为0时,每次产生的逻辑地址不变,最大的逻辑地址为 0x000003a1(929)
,所以设置界地址寄存器大于 929
即可。
python ./relocation.py -s 1 -l 930 -c
(3) 使用参数 --s 1 -n 10 -l 100
,基地址寄存器的最大值为多少?
答:设基地址寄存器的值为
b
a
s
e
base
base,界地址寄存器的值为
l
i
m
i
t
limit
limit,物理地址空间大小为
16
K
16K
16K,则
b
a
s
e
+
l
i
m
i
t
≤
16
K
=
16384
base+limit≤16K=16384
base+limit≤16K=16384 当
l
i
m
i
t
limit
limit 为
100
100
100 时`,
b
a
s
e
+
100
≤
16384
=
>
b
a
s
e
≤
16284
base+100≤ 16384\\ =>base ≤ 16284
base+100≤16384=>base≤16284
当 b a s e = 16284 base=16284 base=16284 时,部分逻辑地址仍然有效
当
b
a
s
e
=
16285
base=16285
base=16285 时,逻辑地址空间不适合该物理地址空间