第1关:第一次由时钟中断引发的进程调度
任务描述
本关任务回答问题: 第一次由时钟中断引发进程调度时: 1.当时 bochs 虚拟机输出的 0/1 字符串是什么?(忽略空格) 2.该次中断是第几次时钟中断?当时处于几号进程的上下文? 该进程的剩余时间片是多少? 3.1 号进程当时处于什么状态?1 号进程控制块的 alarm 成员的值是多少?该定时器截止时间到了吗?
相关知识
为了完成本关任务,你需要掌握: 1.如何跟踪到由时钟中断引发的进程调度; 2.如何查看进程的剩余时间片; 3.如何查看 1 号进程的信息; 4.进程控制块中的 alarm 成员的作用是什么?
实验准备
本关卡使用版本 1 内核进行分析,内核文件存放在/data/workspace/myshixun/exp1
中,使用 gdb 进行调试。
实验答案:
新终端
第2关:前三次进程调度
任务描述
本关任务回答问题:
-
第一次进程调度时,当前进程是几号进程?内核函数调用栈的栈底函数是什么?其上一层函数是什么?0 号进程处于什么状态?1 号进程处于什么状态?选中了几号进程?
-
第二次进程调度时,当前进程是几号进程?内核函数调用栈的栈底函数是什么?其上一层函数是什么?0 号进程处于什么状态?1 号进程处于什么状态?选中了几号进程?
-
第三次进程调度时,当前进程是几号进程?内核函数调用栈的栈底函数是什么?其上一层函数是什么?0 号进程处于什么状态?1 号进程处于什么状态?选中了几号进程?
相关知识
为了完成本关任务,你需要掌握: 1.Linux 0.11 的进程调度算法是怎样的; 2.在执行一次 pause 系统调用时,可能引发几次进程调度; 3.如何查看进程的剩余时间片; 4.如何查看 1 号进程的信息。
环境准备
本关卡使用版本 1 内核进行分析,可以直接使用上一关卡的环境,使用 gdb 进行调试。
答案
上一关不需要gdb调试,单独做先:
直接做:
新终端