第1关:第二次进程切换过程分析
任务描述
本关任务回答问题:
在第二次进程切换时:
1.是从几号进程切换到几号进程?0 号进程和 1 号进程的剩余时间片分别是多少?
2.在(ljmp)切换前,寄存器对 CS:EIP 的值是多少?1 号进程的 TSS 中的字段对 cs:eip 的值是多少?0 号进程的 TSS 中的字段对 cs:eip 的值是多少?
3.在(ljmp)切换后,寄存器对 CS:EIP 的值是多少?其上一条指令的地址是多少?1 号进程的 TSS 中的字段对 cs:eip 的值是多少?0 号进程的 TSS 中的字段对 cs:eip 的值是多少?
4. 0 号进程是在执行哪一条指令时首次切换到 1 号进程的?当 0 号进程后来恢复运行时,是从哪一条指令开始执行的?
实验准备
本关卡使用版本 1 内核,使用 gdb 调试分析。
代码及答案
1.首先配置环境
cp /data/workspace/myshixun/exp1/1.tgz ~/os/
cd os/linux-0.11-lab
tar zxvf ../1.tgz
rm -rf cur
ln -s 1 cur
cd 1/linux/
make
cd ../..
./rungdb
打开mygdb,新建一个终端,输入以下内容
//在另一个终端里切换到目录~/os/linux-0.11-lab
cd os/linux/0.11-lab
./mygdb
2.创建断点并跟踪到switch to语句
反汇编找到指令
再跟踪到该指令
上图可以看到0号进程和1号进程的剩余时间片。
下面查看在(ljmp)切换前,0号进程和1号进程对TSS的值( cs:eip 和 ss:esp)
用si单步执行ljmp指令切换进程,并查看此刻寄存器 CS:EIP 和 SS:ESP 的值
(这里简写输入为“info reg”也可以)
在(ljmp)切换后,进程对TSS的值:
3.填写txt,准备测评
(gdb 调试过程中输入单词请一次输入正确,如果字母输入错误请重新输入整条命令,否则会影响评测结果!!!) 通过 gdb 调试查找答案,将第三关的答案填写在/data/workspace/myshixun/第三关.txt
中。