操作系统头歌21级实验2:外部中断-(实操实验)

准备工作

ln -s 1 cur #让cur指向1

./rungdb
./mygdb
#连接bochs虚拟机

细说

#跟踪分析时针中断:
(gdb) b #打断点,break
# do_timer -- 这是某个函数,功能应该是得到点位
(gdb) b do_timer #给出来的点打断,也就是打断点的意思吧

(gdb) c #应该是下一个/继续的意思,类比continue

(gdb) display jiffies #展示断点
#关于jiffies上网查了下:jiffies是记录着从电脑开机到现在总共的时钟中断次数

(gdb) p jiffies # print 打印值

(gdb)bt #查看各级函数的调用与参数

timer_interrupt #时间中断
startup #启动

#iret指令,也即为中断前的最后一次指令

si #执行iret指令
disas # 反汇编命令
finish #执行完当前函数

找出断点恢复点的步骤:

(gdb)b do_timer
(gdb)display jiffies
(gdb)c
(gdb)p jiffies
(gdb)finish #执行完函数
(gdb)disas #查看

操作系统头歌21级实验2:外部中断-(实操实验)_第1张图片
输入disas后展示图中结果,表示到此中断
(gdb)si
在这里插入图片描述

切到这一步来了
(gdb)si
操作系统头歌21级实验2:外部中断-(实操实验)_第2张图片

如图所示,跳到ret_from_sys_call来了。
再si
操作系统头歌21级实验2:外部中断-(实操实验)_第3张图片

跳到task0中断点的恢复点这里来了
可以在这里找信息了。

loop

对于外部中断而言,恢复点指令是断点指令的后一条。需要说明的是,loop 指令的功能是先将 ecx 寄存器减一,然后检查其值,如果其值非 0 ,则继续循环,否则中止循环,执行下一条指令。以如下指令为例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqYkOJSx-1666625148342)(https://data.educoder.net/api/attachments/3746257?type=image/png)]

其功能是:在地址 0x7977 处循环,每次 ecx 寄存器都减一,直到其值为 0 。因此,loop 指令的上一条有可能是它自己。
在 gdb 中查看寄存器值的命令是 info reg:
操作系统头歌21级实验2:外部中断-(实操实验)_第4张图片

如这样,前面的是断点指令,后面的是恢复点指令

最后

(gdb) kill
(gdb) quit
退出~

你可能感兴趣的:(头头操作系统做题记录,linux)