头歌操作系统 课堂练习4.1:段式内存管理 答案

第1关:1 号进程 mynext 变量的逻辑地址与线性地址

编程要求

根据相关知识,修改版本 1.3 内核回答问题: 通过 gdb 调试查找答案,将第一关的答案填写在/data/workspace/myshixun/第一关.txt中。

  1. 1 号进程的函数调用 output_char() 所对应的第一条汇编指令的地址是多少?

  2. 1 号进程的 mynext 变量所在的段地址和段内偏移是多少?该段地址对应到几号描述符?存放在哪个段描述符表中(GDT/LDT)?

  3. 1 号进程的进程控制块中的 ldt 数组的起始地址是多少?其中 1 号和 2 号描述符里存放的段起始地址分别是多少?

  4. 1 号进程的 mynext 变量所在的线性地址是多少?

#配置1.3内核环境
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os/
cd ~/os/linux-0.11-lab/
tar -zxvf ../1.3.tgz
rm -rf cur
ln -s 1.3 cur
cd 1.3/linux
make
cd ../..

 

 开启gdb调试器,在内输入:


b 155 
c
p &mynext #查看变量mynext所在的段内偏移
x/6i $eip #反汇编
p/x $ds
p $ds>>3
p/x current->ldt #查看进程的LDT
p &current->ldt

 第一关文档答案:

 

第2关:0号进程 mynext 变量的逻辑地址与线性地址

编程要求

根据相关知识,修改版本 1.3 内核回答问题: 通过 gdb 调试查找答案,将第二关的答案填写在/data/workspace/myshixun/第二关.txt中。

  1. 0 号进程的函数调用 output_char() 所对应的第一条汇编指令的地址是多少?

  2. 0 号进程的 mynext 变量所在的段地址和段内偏移是多少?该段地址对应到几号描述符?存放在哪个段描述符表中(GDT/LDT)?

  3. 0 号进程的进程控制块中的 ldt 数组的起始地址是多少?其中 1 号和 2 号描述符里存放的段起始地址分别是多少?

  4. 0 号进程的 mynext 变量所在的线性地址是多少?

版本1.3内核环境配置与第一关相同,这里不再赘述。

打开gdb调试器,并键入:

b 172
c
x/6i $eip
p &mynext
p/x current->ldt
p &current->ldt

 运行效果截图如下:

第二关文档答案: 

  • 29
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值