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

课堂练习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 ../..
./run

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

1.2 关闭bochs虚拟机,输入以下命令
./rungdb
1.3 打开另一个终端,输入以下命令
cd os/linux-0.11-lab/
./mygdb
b do_timer 
//设置断点
display jiffies
c+回车 
//一直按到第一行被0覆盖

在这里插入图片描述

1.4 最终运行结果如上图所示,此时jiffies为36

最后在gdb终端输入以下命令,保证下一关环境

kill
y

第2关:第一次时钟中断

第2关 任务描述

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

第2关 任务过程

2.1 在终端中输入以下命令

quit
//退出gdb,保留第一关的环境
./rungdb
(							!!!若提示错误!!!
请确保已经切换到目录~/os/linux-0.11-lab	//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
//退出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+回车(总共6次)
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】并打开,将地址输入括号,保存即可完成

在这里插入图片描述

  • 22
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值