【问题标题】:two-byte operating system does not what I want两字节操作系统不是我想要的
【发布时间】:2013-09-01 17:34:12
【问题描述】:

我从example 创建了一个软盘启动映像,它应该:

  1. 禁用所有中断
  2. 重启

但是,一旦我用 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 我仍然认为这是话题。是你投票的吗?

标签: assembly bochs x86-16


【解决方案1】:

hlt 不重启;那不是它的用途。它会暂停处理器,直到中断到达,并且由于您已禁用中断,因此它将永远坐在那里无所事事。

至于模拟器为什么会消耗100%的CPU,那可能是模拟器实现方式的原因。在(某些版本的)Linux 上,hlt 用于使处理器空闲直到下一个时间片,因此它当然不会使处理器忙于等待。 :-)

【讨论】:

    【解决方案2】:

    CLI 不会禁用 NMI(不可屏蔽中断),因此,以下代码仍然更好:

    .loop:
        cli
        hlt
        jmp .loop
    

    不清楚为什么 Bochs 会提供 100% 的 CPU 负载。你是如何检查这个负载的?按实际 CPU 负载,还是 Bochs 有自己的虚拟 CPU 负载指示器?

    我建议尝试使用另一个虚拟机,例如 QEMU。

    所以,上面的代码将启动然后休眠。如果打算重启计算机,下面的代码应该做冷重启

        jmp $ffff:$0000
    

    对于热重启:

        mov  [$472], 1234h
        jmp  $ffff:$0000
    

    【讨论】:

    • 除了这段代码也没有做OP试图做的事情。
    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多