3-9 课堂练习3.4:进程的切换
进程切换是支持多进程的一个关键环节,涉及到 CPU 现场的保存和恢复,本实训分析 Linux 0.11 的进程切换过程。
第1关第一次进程切换过程分析
任务描述
本关任务回答问题: 在第一次进程切换时: 1.是从几号进程切换到几号进程?0 号进程和 1 号进程的剩余时间片分别是多少? 2.在(ljmp)切换前,寄存器对 CS:EIP 和 SS:ESP 的值是多少?其下一条指令的地址是多少?0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少? 3.在(ljmp)切换后,寄存器对 CS:EIP 和 SS:ESP 的值是多少?0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?
相关知识
为了完成本关任务,你需要掌握: 1.Linux 0.11 的进程调度算法是怎样的; 2.在 Linux 0.11 中,进程是如何切换的; 3.如何跟踪到引发进程切换的 ljmp 指令; 4.如何查看寄存器的值; 5.如何查看一个进程的 TSS 的值。
实验准备
本关卡对版本 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关第一进程切换时TR寄存器的变化分析
任务描述
本关任务回答问题: 1.第一次进程切换前,CPU 中 TR 寄存器的值是多少?它所指向的 GDT 描述符中的段起始地址是多少?是几号进程的 TSS 地址? 2.第一次进程切换后,CPU 中 TR 寄存器的值是多少?它所指向的 GDT 描述符中的段起始地址是多少?是几号进程的 TSS 地址?
相关知识
为了完成本关任务,你需要掌握: 1.CPU 是如何找到当前进程的任务状态段的; 2.如何查看 TR 寄存器的值; 3.如何查看进程 TSS 的地址; 4.Linux 0.11 的进程调度算法是怎样的; 5.在 Linux 0.11 中,进程是如何切换的; 6.如何跟踪到引发进程切换的 ljmp 指令。
实验准备
本关卡实验版本 1 内核进行修改,使用 gdb 和 dbg 共同调试分析。
实验过程及答案
本关卡实验版本 1 内核进行修改,可以直接沿用第一关
实验过程
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 ../.. ./rundbg
利用第一关得到的ljmp的地址0x6f33
ljmp的下一条指令的地址0x6f37
答案
3-10 课后作业3.4:进程的切换
进程切换是支持多进程的一个关键环节,涉及到 CPU 现场的保存和恢复,本实训分析 Linux 0.11 的进程切换过程。
第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.Linux 0.11 的进程调度算法是怎样的; 2.在 Linux 0.11 中,进程是如何切换的; 3.如何跟踪到引发进程切换的 ljmp 指令; 4.如何查看寄存器的值; 5.如何查看一个进程的 TSS 的值; 6.如何知道当前指令的上一条是什么。
实验准备
本关卡使用版本 1 内核,使用 gdb 调试分析。
实验过程及答案
实验过程
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