【头歌】操作系统 课堂练习2.1:外部中断

该文详细描述了一个关于Linux0.11内核时钟中断的实践练习,包括如何使用gdb设置断点、观察jiffies计数、识别恢复点和断点指令地址,以及分析bochs虚拟机的输出。在不同阶段,文章指出了第一次和第六次时钟中断的特征,如恢复点和断点的地址,并解释了loop指令在循环控制中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

课堂练习2.1:外部中断

第1关:时钟中断的发生

第1关 任务描述

本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?
在这里插入图片描述

第1关 任务过程

1.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 os/linux-0.11-lab
./run

如果正常虚拟机在加载完毕之后将会出现如下画面:
在这里插入图片描述

1.2 关闭bochs虚拟机,输入以下命令
cd os/linux-0.11-lab
./rungdb
1.3 打开另一个终端,输入以下命令
cd os/linux-0.11-lab/
./mygdb

设置断点

b do_timer

一直按到第一行被0覆盖

display jiffies
c

在这里插入图片描述

1.4 最终运行结果如上图所示,此时jiffies为36
1.5 退出gdb调试,保证下一关环境正常运行
kill
y
quit

第2关:第一次时钟中断

第2关 任务描述

分析版本1内核,找到第一次时钟中断的恢复点地址。

第2关 任务过程

2.1 在终端中输入以下命令
cd os/linux-0.11-lab
./rungdb
2.2 打开另一个终端,输入以下命令
cd os/linux-0.11-lab
./mygdb
b do_timer
c
p jiffies
bt
finish
disas
si
si
disas
b *0x77dd
c
si
disas

找到箭头对应的地址:

0x0000769c(0x796c)
2.3 打开桌面文件夹workspace,找到目标文件【恢复指令地址.txt】并打开,将地址输入括号,保存即可完成

在这里插入图片描述
最后在gdb终端输入以下命令,保证下一关环境能够正常运行

kill
y

第3关:第六次时钟中断

第3关 任务描述

本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?此时 bochs 虚拟机输出的 0/1 字符串是什么?(忽略空格)

第3关 任务过程

3.1 在终端中输入以下命令
quit
./rungdb

【quit】退出gdb,保留第二关的环境。
若执行【./rungdb】提示错误请确保已经切换到目录~/os/linux-0.11-lab,再重复上述第二条命令。

cd os/linux-0.11-lab
./rungdb
3.2 打开另一个终端,输入以下命令
cd os/linux-0.11-lab
./mygdb
b do_timer
c
c
c

c
c
c
p jiffies
bt
finish
disas
si
si
disas
b *0x77dd
c
si
disas

找到箭头对应的地址:
恢复点位置为 0x00007982(0x7982),且该条指令为loop。
在这里插入图片描述
查看ecx寄存器,可知仍在循环中,其断点指令仍为loop指令,故断点地址恢复点地址均为

0x7982

说明

对于外部中断而言,恢复点指令是断点指令的后一条。需要说明的是,loop 指令的功能是先将 ecx 寄存器减一,然后检查其值,如果其值非 0 ,则继续循环,否则中止循环,执行下一条指令。其功能是:在地址0x796c处循环,每次 ecx 寄存器都减一,直到其值为 0 。因此,loop 指令的上一条有可能是它自己。

3.3 bochs 虚拟机输出的 0/1 字符串

此时虚拟机输出字符串为

0100

在这里插入图片描述

3.4 打开桌面文件夹workspace,找到目标文件【第三关.txt】并打开,将地址输入括号,保存即可完成

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值