课堂练习4.1:段式内存管理

6fb09b2297eb4695aaf17bf4a696e2eb.png

4-1 课堂练习4.1:段式内存管理

段式内存管理以段为单位分配内存空间,段内连续,段间可以不连续。段可以很大,比如数据段、代码段、栈段等。本实训分析 Linux 0.11 的段式内存管理技术。

d997a78924304042a77e91c8d1dc788d.png

 

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

任务描述

本关任务调试版本 1.3 内核并回答问题:

  1. 1 号进程的函数调用 output_char() 所对应的第一条汇编指令的地址是多少?
  2. 1 号进程的 mynext 变量所在的段地址和段内偏移是多少?该段地址对应到几号描述符?存放在哪个段描述符表中(GDT/LDT)?
  3. 1 号进程的进程控制块中的 ldt 数组的起始地址是多少?其中 1 号和 2 号描述符里存放的段起始地址分别是多少?
  4. 1 号进程的 mynext 变量所在的线性地址是多少?

相关知识

为了完成本关任务,你需要掌握: 1.如何查看 1 号进程的函数调用 output_char() 所对应的汇编指令; 2.如何计算 1 号进程的 mynext 变量的逻辑地址(段地址:段内偏移); 3.段寄存器值(如 ds )的含义是什么; 4.如何查看进程的 LDT ; 5.如何从段描述符的值计算出段的起始地址。

环境准备

本实训 5 个关卡全部使用版本 1.3 内核进行调试,内核文件存放在/data/workspace/myshixun/exp1下。

实验过程及答案

实验过程

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

2747009b88eb4f4796330c7db24c33b5.png

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

5f0412a122c8491aba75762d9745f537.png

rm -rf cur
ln -s 1.3 cur
ls

56e29921a8614196b7760a913b7a3113.png

cd 1.3/linux
make

8ca61fc91296413aa4fe3c7ed4fdf283.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

9fc3ac92ce5c4b5b93732e516a449df9.png007b39f5d5e14818b1382c896e47ce72.pngdddc087fb7624fd489acc355a1a7aa76.png4008f34751494134ab522421a8c25dd2.png

答案

668c453d5e5b49afbd731313f6054ca4.png

 

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

任务描述

本关任务调试版本 1.3 内核回答问题:

  1. 0 号进程的函数调用 output_char() 所对应的第一条汇编指令的地址是多少?
  2. 0 号进程的 mynext 变量所在的段地址和段内偏移是多少?该段地址对应到几号描述符?存放在哪个段描述符表中(GDT/LDT)?
  3. 0 号进程的进程控制块中的ldt数组的起始地址是多少?其中 1 号和 2 号描述符里存放的段起始地址分别是多少?
  4. 0 号进程的 mynext 变量所在的线性地址是多少?

相关知识

为了完成本关任务,你需要掌握:

  1. 如何查看 0 号进程的函数调用 output_char() 所对应的汇编指令;
  2. 如何计算 0 号进程的 mynext 变量的逻辑地址(段地址:段内偏移);
  3. 段寄存器值(如 ds )的含义是什么;
  4. 如何查看进程的 LDT ;
  5. 如何从段描述符的值计算出段的起始地址。

编程要求

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

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

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

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

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

实验过程及答案

延用第一关配置,非必要不重新配置环境

实验过程

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

2747009b88eb4f4796330c7db24c33b5.png

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

5f0412a122c8491aba75762d9745f537.png

rm -rf cur
ln -s 1.3 cur
ls

56e29921a8614196b7760a913b7a3113.png

cd 1.3/linux
make

8ca61fc91296413aa4fe3c7ed4fdf283.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

5805997b1c8847d0aec1a9233450b16e.png4dd4e640c53d4c438d4e941909b442f5.png

答案

7811434c7aa04a9f93c21b4c0907df82.png

4-2 课堂练习4.1:段式内存管理

段式内存管理以段为单位分配内存空间,段内连续,段间可以不连续。段可以很大,比如数据段、代码段、栈段等。本实训分析 Linux 0.11 的段式内存管理技术。

5a025cd59d7f48698a76831b1f42b173.png

 

第1关0号进程和1号进程的mynext变量的取值变化

任务描述

本关任务调试版本 1.3 内核回答问题:

  1. 1 号进程的 output_char 函数调用会执行几次?
  2. 每次调用时,1 号进程和 0 号进程的 mynext 变量的值分别是多少?

相关知识

为了完成本关任务,你需要掌握:

  1. 如何查看 1 号进程的函数调用 output_char() 所对应的汇编指令;
  2. 在 gdb 中如何正确查看 1 号进程的 mynext 变量的值;
  3. 如何在断点被捕获时自动执行一组命令;
  4. 段寄存器值(如 ds )的含义是什么;
  5. 如何查看进程的 LDT 。

编程要求

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

  1. 1 号进程的 output_char 函数调用会执行几次?
  2. 每次调用时,1 号进程和 0 号进程的 mynext 变量的值分别是多少?

实验过程及答案

实验过程

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

2747009b88eb4f4796330c7db24c33b5.png

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

5f0412a122c8491aba75762d9745f537.png

rm -rf cur
ln -s 1.3 cur
ls

56e29921a8614196b7760a913b7a3113.png

cd 1.3/linux
make

8ca61fc91296413aa4fe3c7ed4fdf283.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

080f9a973c6e4aa890b62506a7c0e7d2.png

由前两关实验我们得到了0号进程和1号进程的线性地址668c453d5e5b49afbd731313f6054ca4.png668c453d5e5b49afbd731313f6054ca4.pngd242241fb57049b7ab0a4fa9d57fb27c.png10766f5081b148938d2052e9949cb87b.png717c47ce890f408f9635528cd702fc10.pngcb27d424173d40e58213dcc3b73c3edf.png93d5715cebe1487a86f648f6ea4b0fdb.png

答案

d53edc9ce61c460a99130e7ddb1aa8cc.png

 

第2关LDTR 寄存器

任务描述

本关任务调试版本 1.3 内核回答问题:

  1. 1 号进程(在用户态)运行时,LDTR 寄存器的值是多少?它指向 GDT 中的几号描述符?该段描述符内的段起始地址是多少?指向哪个进程的 ldt 数组?
  2. 0 号进程(在用户态)运行时,LDTR 寄存器的值是多少?它指向 GDT 中的几号描述符?该段描述符内的段起始地址是多少?指向哪个进程的 ldt 数组?

相关知识

为了完成本关任务,你需要掌握:

  1. 在 bochsdbg 中如何跟踪到 1 号进程(在用户态)运行时;
  2. 如何查看 1 号进程的函数调用 output_char() 所对应的汇编指令;
  3. 在 bochsdbg 中如何查看 LDTR 的值?其含义是什么?
  4. 段寄存器值(如 DS )的含义是什么;
  5. 如何查看进程的 LDT ;
  6. 如何从段描述符的值计算出段的起始地址。

编程要求

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

  1. 1 号进程(在用户态)运行时,LDTR 寄存器的值是多少?它指向 GDT 中的几号描述符?该段描述符内存的段起始地址是多少?指向哪个进程的 ldt 数组?
  2. 0 号进程(在用户态)运行时,LDTR 寄存器的值是多少?它指向 GDT 中的几号描述符?该段描述符内存的段起始地址是多少?指向哪个进程的 ldt 数组?

实验过程及答案

延用第一关配置,非必要不重新配置环境

实验过程

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

2747009b88eb4f4796330c7db24c33b5.png

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

5f0412a122c8491aba75762d9745f537.png

rm -rf cur
ln -s 1.3 cur
ls

56e29921a8614196b7760a913b7a3113.png

cd 1.3/linux
make

8ca61fc91296413aa4fe3c7ed4fdf283.png

cd ../..
./rundbg
a13ad711863b4ac6a19ddbfe95aadb46.png

 

abcb592c844b42f2bbbfc083a1d2112f.png82c2726f0e334fa0a2f6d915239d7ebb.pngad87ca1373d94424b253e991f156345d.png

答案

a2ba2816cccc44c08762275e199bf721.png

 第3关内核代码段和数据段的段基址

 

 

任务描述

本关任务调试版本 1.3 内核回答问题:

  1. 0 号进程执行到 sys_pause 时,默认数据段(CS)和默认数据段(DS)的值分别是多少?其基地址分别是多少?
  2. 1 号进程执行到 sys_pause 时,默认数据段(CS)和默认数据段(DS)的值分别是多少?其基地址分别是多少?

相关知识

为了完成本关任务,你需要掌握:

  1. 在 gdb 中如何查看全局描述符表;
  2. 在 Linux 0.11 中,内核程序运行时访问的线性地址空间是什么?;
  3. 在 bochsdbg 中如何查看 LDTR 的值?其含义是什么?;
  4. 段寄存器值(如 DS )的含义是什么;
  5. 如何从段描述符的值计算出段的起始地址。

编程要求

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

1.0 号进程执行到 sys_pause 时,默认数据段(CS)和默认数据段(DS)的值分别是多少?其基地址分别是多少? 2.1 号进程执行到 sys_pause 时,默认数据段(CS)和默认数据段(DS)的值分别是多少?其基地址分别是多少?

实验过程及答案

延用第一关配置,非必要不重新配置环境

实验过程

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

2747009b88eb4f4796330c7db24c33b5.png

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

5f0412a122c8491aba75762d9745f537.png

rm -rf cur
ln -s 1.3 cur
ls

56e29921a8614196b7760a913b7a3113.png

cd 1.3/linux
make

8ca61fc91296413aa4fe3c7ed4fdf283.png

 

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

c30b0199cd8f4c348fcfd92a76dddfdb.png167a80b6b0a24cc8b5ea18ac1a4475cf.png66d1fc8349a640d89f0c0791cc44a8bf.png3c90c7b150ff41afa007ae9f45775c33.png6dac6213e5a04949b2a8cf867e83e15b.png

答案

922ee3332c284709bd9e65a4e8e0646a.png

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ItsNorth

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

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

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

打赏作者

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

抵扣说明:

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

余额充值