3-3
进程是操作系统中一个非常重要的概念。程序的运行是通过进程来完成的。在层次结构的操作系统中,进程不仅是系统分配资源的基本单位,而且是 CPU 调度的基本单位。进程管理是操作系统最重要的功能之一。通过本实训将会学习到:Linux 0.11 的进程的创建方法。
第1关进程创建前后TR寄存器值的分析
任务描述
本关任务回答问题:
- 0 号进程的 fork 系统调用(main.c:147)中的陷入指令的地址是多少?
- 0 号进程执行 fork 系统调用之前,TR 寄存器的值为多少?
- 0 号进程刚执行完 fork 系统调用时,TR 寄存器的值为多少?
相关知识
为了完成本关任务,你需要掌握: 1.系统调用的处理过程; 2.TR 寄存器的作用; 3.在 0 号进程执行 fork 系统调用时,所用陷入指令的地址是多少; 4.0 号进程刚执行完 fork 系统调用是在什么时候; 5.在 bochsdbg 调试模式下,如何判断当前进程是几号进程; 6.在 bochsdbg 中如何查看寄存器的值; 7.在 bochsdbg 中如何反汇编; 8.在 bochsdbg 中如何单步执行。
准备阶段
本实训需要设置内核版本 1 为调试分析的对象,用 gdb 调试内核,内核版本 1 的压缩文件存放在/data/workspace/myshixun/exp1
中。
实验过程及答案
实验过程
ls /data/workspace/myshixun/exp1 cp /data/workspace/myshixun/exp1/1.tgz ~/os
cd os/linux-0.11-lab tar -zxvf ../1.tgz 1
rm -rf cur ln -s 1 cur ls
cd 1/linux make
cd ../.. ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb
答案
第2关1 号进程创建前后的GDT和PCB分析
任务描述
本关任务回答问题:
- 0 号进程的进程控制块的起始地址是多少?0 号进程的 TSS 的地址是多少?
- 在 1 号进程创建前,task 数组的前 2 项是多少?GDT 的 4~7 号描述符是多少?其中存储的段起始地址分别是多少?
- 在 1 号进程创建后,task 数组的前 2 项是多少?GDT 的 4~7 号描述符是(64位)多少?其中存储的段起始地址分别是多少?
- 1 号进程的进程控制块的起始地址是多少?1 号进程的 TSS 的地址是多少?1 号进程执行的第一条语句的地址是多少?
- 1 号进程的核心栈栈底的位置是多少?该位置距离 1 号进程的进程控制块的起始位置有多远(字节数)?
相关知识
为了完成本关任务,你需要掌握: 1.系统调用的处理过程; 2.TR 寄存器的作用; 3.如何查看任何一个现有进程的进程控制块; 4. 1 号进程所执行的第一条语句的地址; 5. 0 号进程执行 fork 系统调用时的陷入指令地址; 6.如何单步执行一条指令直到其运行结束(step over); 7.进程的核心栈与进程控制块之间的位置关系。
准备阶段
本实训需要设置内核版本 1 为调试分析的对象,用 gdb 调试内核,内核版本 1 的压缩文件存放在/data/workspace/myshixun/exp1
中。
实验过程及答案
实验过程
因为是和第一个是同时做的,所以不需要重新配置环境,如果重启释放环境,配置环境过程见下
ls /data/workspace/myshixun/exp1 cp /data/workspace/myshixun/exp1/1.tgz ~/os
cd os/linux-0.11-lab tar -zxvf ../1.tgz 1
rm -rf cur ln -s 1 cur ls
cd 1/linux make
cd ../.. ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb
答案
3-4
本实训分析 Linux 0.11 的进程创建过程,并练习相关系统调用的使用方法。
第1关系统调用fork和execve的跟踪分析
任务描述
本关任务:修改版本 0 内核,使每次进程创建时都输出父子进程的进程号,使每次执行可执行文件时,都输出可执行文件的名字和当前进程号。
相关知识
为了完成本关任务,你需要掌握: 1.系统调用的处理过程; 2.如何使每次进程创建时都输出父子进程的进程号; 3.如何使每次执行可执行文件时都输出可执行文件的名字和当前进程号。
准备阶段
本实训需要设置内核版本 0 为调试分析的对象,修改完毕之后请确认cur
指向链接是否正确,系统能否正常使用。
实验过程及答案
实验过程
打开桌面上的vscode 添加如下代码 添加如下代码
cd os/linux-0.11-lab/0/linux
cd ../.. ./run
第2关构建一个最小的可用操作系统
任务描述
本关任务:修改版本 0 内核和硬盘达到以下目标。
- 硬盘中的文件越少越好,且所有的文件都在根目录下;
- 用该内核和硬盘能够正常启动系统,没有错误提示,且依然能够运行ls、cat、rm 和 sync 命令。
- 系统启动后,自动执行命令
set
和ls -l /
。
相关知识
为了完成本关任务,你需要掌握: 1.如何修改硬盘镜像文件中的内容; 2.在修改了硬盘后,启动时报错怎么办; 3.系统启动时会执行哪些可执行文件。
实验过程及答案
实验过程
先把第一关改过的部分删掉,可能会影响评测
打开vscode
改成和我一样
评测即可成功