【问题标题】:Why are interrupts disabled by the boot loader?为什么引导加载程序禁用中断?
【发布时间】:2015-08-25 15:31:38
【问题描述】:

我正在学习操作系统课程。我正在将 jos os 引导到 qemu x86 PC 模拟器。我读到 BIOS 找到可引导设备并将引导加载程序从可引导设备的第一个扇区加载到内存中的 0x7c00。

引导加载程序中的第一条指令是禁用中断,即cli。

我阅读了有关 cli 的信息,即它清除了 eflags 寄存器中的启用中断标志。我从 Wikipedia 中了解到,这样做是为了避免内核代码和中断处理程序之间的竞争条件。请解释一下什么是竞态条件以及这里存在什么样的竞态条件。

我还是不明白为什么会这样?有人可以详细说明一下吗?

【问题讨论】:

  • 在引导加载程序中执行此操作的原因不止一个。能否分享一下源代码的链接?
  • 整个内核源码,bootloader在thisrepo。
  • 感谢@cad 参考 Griwes 写的答案。那是一个很棒的答案。我仍然想知道赛车是如何禁用中断的原因之一。
  • 嗯,一般而简单的答案是进程和 ISR 可以访问公共变量。如果读写操作不是原子的,就会出现竞争条件。一个具体案例是:stackoverflow.com/questions/20769768/…

标签: operating-system qemu


【解决方案1】:

我正在考虑将 JOS 用于我的操作系统课程,可能最早在 2016 年冬季学期。cli 问题虽然因为它阻止了什么而有趣,但与这个问题相比,IMO 有点不那么有趣:

何时再次启用中断?

可以使用http://pdos.csail.mit.edu/6.828/2014/labs/lab1/ 中描述的为实验室加载 git 的说明,然后查看 boot 和 kern 目录中的序列。

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2015-05-30
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多