第1关:时钟中断的发生
任务描述
本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?
相关知识
为了完成本关任务,你需要掌握:
1.设置版本 1 内核为分析对象;
2.开始用 gdb 调试内核;
3.跟踪分析时钟中断。
作答要求
根据相关知识进行实际操作,一直输入 c 直到 0/1 将第一行完全填满。
回答问题:当第一行 0/1 字符全部输出完毕的时候一共发生了几次时钟中断,即第一行完全填满时 jiffies 记录的已发生次数为多少?
答案
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
打开另一个终端输入
cd os/linux-0.11-lab/
./mygdb
b do_timer
display jiffies
一直输入c并回车直到0跑到第二行
然后输入kill,按y并回车退出gdb防止影响下一关
第2关:第一次时钟中断
关闭其他终端,重新打开一个终端,重新来一遍
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
打开另一个终端输入
cd os/linux-0.11-lab/
./mygdb
b do_timer
c
p jiffies
bt
finish
disas
si
si
disas
b *0x77dd
c
si
disas
输入完成最后一步的终端
上图的箭头所指即为答案,最后记得kill退出gdb
第3关:第六次时钟中断
任务描述
本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?此时 bochs 虚拟机输出的 0/1 字符串是什么?(忽略空格)
相关知识
为了完成本关任务,你需要掌握:
1.使用 gdb 调试内核;
2.跟踪分析时钟中断。
编程要求
根据相关知识,完成断点指令和恢复点指令的分析,回答问题:
1.断点指令和恢复点指令的地址是多少?
2.此时 bochs 虚拟机输出的 0/1 字符串是什么?(只填写数字,不填写空格!!!)
将答案填写在/data/workspace/myshixun/第三关.txt
中。
答案
保留上一关的环境,输入./rungdb
打开另一终端,输入
cd os/linux-0.11-lab/
./mygdb
gdb里输入
b do_timer
c
c
c
c
c
c
finish
si
si
disas
b *0x77dd
c
si
disas
info reg
箭头所指就是答案