课堂练习3.1:进程的描述与状态

f0ec33f87cac408396ed5525cfb3314f.png

3-1

进程是操作系统中一个非常重要的概念。程序的运行是通过进程来完成的。在层次结构的操作系统中,进程不仅是系统分配资源的基本单位,而且是 CPU 调度的基本单位。进程管理是操作系统最重要的功能之一。 通过本实训将会学习到:Linux 0.11 的进程描述方法,包括进程控制块、任务状态段、核心栈等。

8c3edf3cc39f456999e57cd3a825bcae.png

 

第1关任务寄存器(TR)的分析

任务描述

分析版本1内核,回答下列问题:

  1. 1 号进程的任务状态段(TSS)的地址是多少?1 号进程的核心栈栈底的位置是多少?
  2. 1 号进程运行时,任务寄存器(TR)的值是多少?它指向的任务状态段描述符的值是多少?该描述符里记录的任务状态段起始地址是多少?

相关知识

为了完成本关任务,你需要掌握: 1.CPU 是如何找到当前进程的任务状态段的; 2.用 gdb 调试内核,跟踪到 main 函数入口; 3.如何查看 1 号进程的 TSS 和核心栈栈底的位置; 4.如何查看 1 号进程运行时 TR 寄存器的值; 5.如何查看 TR 寄存器指向的任务状态段描述符的值; 6.如何从段描述符的值计算出段的起始地址。

环境准备

本实训需要设置内核版本 1 为调试分析的对象,用 gdb 调试内核,内核版本 1 的压缩文件存放在/data/workspace/myshixun/exp1中。

实验过程及答案

实验过程

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

94131b9c442641aca067c450afc62e04.png

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

de0ebd3263cc4230a9de53bf430dcc0c.png

rm -rf cur
ln -s 1 cur
ls

f12d91d64d9c4b5db1cbd88daf504c59.png

cd 1/linux
make

ee35757477f1428b93032742a723085e.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

b3b3848e13f345249501761bb131b6a3.png

 

e23de0cb5a5646ebb9c0aac8572a9140.png1a50146d68eb4ea2b2666f9b1fdce949.png22e85856453542d8880fb13bc2a1c6f7.png7a9a6d2d947746918eaea231d6e40758.pngffe792f582fd482e8917b2d0a8acf09d.png42e984afcfaa4054a5ef79d84dad8670.png3f242562185c4b1aa54f5f910a228da7.pngede58d04149c4b44b217b07145f67375.pngade3df4a0b4d449ab6457d35c81290ee.png

答案

c37987d1dc6248e292923a79748e4a32.png

第2关1 号进程的状态变化

任务描述

本关任务根据相关知识回答问题: 1 号进程第一次由睡眠态变为就绪态时:

  • 系统处于几号进程的上下文(或者说,当前进程是几号进程)?
  • 内核的函数调用栈中的底层函数是什么?内核处于哪种控制流(选择:系统调用、中断、异常)?
  • 后续回到用户态时,恢复点的位置是什么?以前的断点位置是什么?

相关知识

为了完成本关任务,你需要掌握: 1.如何跟踪 1 号进程的状态变化; 2.如何知道内核函数调用栈中的底层函数是什么; 3.如何知道内核处于哪种控制流; 4.如何分析断点和恢复点的位置。

环境准备

本实训需要设置内核版本 1 为调试分析的对象,用 gdb 调试内核,内核版本 1 的压缩文件存放在/data/workspace/myshixun/exp1中。

实验过程及答案 

实验过程

因为是和第一个是同时做的,所以不需要重新配置环境,如果重启释放环境,配置环境过程见下

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

94131b9c442641aca067c450afc62e04.png

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

de0ebd3263cc4230a9de53bf430dcc0c.png

rm -rf cur
ln -s 1 cur
ls

f12d91d64d9c4b5db1cbd88daf504c59.png

cd 1/linux
make

ee35757477f1428b93032742a723085e.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

16d96c505aee47d1a6bd54cc7bc3bb28.png545610c314cf4e46b19c6971ce95d4ee.pngcfeaa1e13729490d9af6e35f937adde6.pngce4413dbce9e460eaa877aae521f21d5.png8b1fd3f3d33f4dbbb57c9655780ee12a.pngcd510bd94af2421191eed4b3433024c0.pngf6540b6f89d6421e98ddda8edfb24f81.png03d8fe4748924a18b5547c0ac38a38f9.png0013b46b44a741e7bf15fc2fe99aa97c.png2732f08ac7cc4e32be2d75e8f0faa2c2.pngd93336e9f4dc46a29190cc63ecb7b131.png4cb311403dc54393bae0d670174102c7.png

答案

59e116fe791a4ce1a29bf5e3de09d292.png

3-2

本实训学习Linux 0.11 的进程描述方法,包括进程控制块、任务状态段、核心栈等;同时巩固学习中断/异常的处理过程。

448cf322e2434c51977dda2b09a014ed.png

 

第1关1 号进程的核心栈内容分析

任务描述

分析版本1内核,回答下列问题:

  1. 1号进程的核心栈栈底的位置是多少?
  2. 1号进程(用 si)执行函数 task1 中的第一个 int 0x81 指令后,核心栈栈顶的位置是多少?从栈底到栈顶依次放了哪些内容?

相关知识

为了完成本关任务,你需要掌握: 1.CPU 是如何找到当前进程的任务状态段的; 2.如何查看 1 号进程的核心栈栈底的位置; 3.如何查看栈里的内容。

环境准备

本实训需要设置内核版本 1 为调试分析的对象,用 gdb 调试内核,内核版本 1 的压缩文件存放在/data/workspace/myshixun/exp1中。

实验过程及答案

实验过程

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

94131b9c442641aca067c450afc62e04.png

 

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

de0ebd3263cc4230a9de53bf430dcc0c.png

rm -rf cur
ln -s 1 cur
ls

f12d91d64d9c4b5db1cbd88daf504c59.png

cd 1/linux
make

ee35757477f1428b93032742a723085e.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

 79a0544cb2414b1bb21965b443226e54.png7d4d2041f38e446c97dcd0b67545cb47.pngfe93745629de47518830ef72976320b2.png

答案

61edacfb97a4499b867b5cfdd4807b40.png

 

第2关0 号进程的核心栈内容分析

任务描述

分析版本1内核,回答下列问题:

  • 0 号进程的核心栈栈底的位置是多少?
  • 0 号进程(用 si)执行了 fork 系统调用中的陷入指令后,核心栈栈顶的位置是多少?从栈底到栈顶依次放了哪些内容?

相关知识

为了完成本关任务,你需要掌握: 1.CPU 是如何找到当前进程的任务状态段的; 2.如何跟踪到 0 号进程执行 fork 系统调用之前; 3.如何查看 0 号进程的核心栈栈底的位置; 4.如何查看栈里的内容。

环境准备

本实训需要设置内核版本 1 为调试分析的对象,用 gdb 调试内核,内核版本 1 的压缩文件存放在/data/workspace/myshixun/exp1中。

 实验过程及答案

实验过程

因为是和第一个是同时做的,所以不需要重新配置环境,如果重启释放环境,配置环境过程见下

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

94131b9c442641aca067c450afc62e04.png

 

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

de0ebd3263cc4230a9de53bf430dcc0c.png

rm -rf cur
ln -s 1 cur
ls

f12d91d64d9c4b5db1cbd88daf504c59.png

cd 1/linux
make

ee35757477f1428b93032742a723085e.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

 66f65d9589c046af9f6eb8e26d145d64.png

9ca9d992c1234d5a95e2518f13d4cea2.png

578556c64d6f4743a844acd854dd08f6.pngc298e3dd14a244d1aaf8f03a5f25fd7c.png

答案

acb3a5e514884c9687e79f51f2e39c73.png

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ItsNorth

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

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

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

打赏作者

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

抵扣说明:

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

余额充值