【发布时间】:2013-09-01 17:34:12
【问题描述】:
我从example 创建了一个软盘启动映像,它应该:
- 禁用所有中断
- 重启
但是,一旦我用 bochs 启动它,它会消耗 100% 的 CPU,直到我杀死它。
这是软盘图片:
$高清软盘.img 00000000 fa f4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |......| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |......| * 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |......................U.| 00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |......| * 00168000拆解图:
$ objdump -b 二进制 -D floppy.img -m i386 floppy.img:文件格式二进制 .data 部分的反汇编: 00000000 : 0:fa cli 1:f4 hlt ... 1fe: 55 推送 %ebp 1ff: aa stos %al,%es:(%edi)Bochs output(粘贴箱)。
bochsrc.txt:
romimage:文件=/usr/share/bochs/BIOS-bochs-latest,地址=0xe0000 vgaromimage: 文件=/usr/share/bochs/VGABIOS-lgpl-latest 软盘:1_44=软盘.img,状态=插入 引导:一个 日志:OSDev.log 鼠标:启用=0 兆:32 显示库:sdl我是这样运行 bochs 的:
但是,一旦我用 bochs 启动它,它会消耗 100% 的 CPU,直到我杀死它。
$ bochs -f bochsrc.txt
Bochs 版本:2.4.6-4,在 ubuntu 12.04 i686 上运行。
我做错了什么?
【问题讨论】:
-
重启后会发生什么?再次重启?
-
hlt不会重新启动。那不是它的用途。它会暂停处理器直到中断到达,并且由于您已禁用中断...... -
@ChrisJester-Young 那么为什么模拟器会消耗 100% CPU?
-
@JanDvorak 大概是因为模拟器是这样实现的。我认为如果您在真正的 CPU 上执行此操作,它不应该忙循环;我知道(某些版本的)Linux 使用
hlt来空闲处理器。 -
@ChrisJester-Young 我仍然认为这是话题。是你投票的吗?