【发布时间】: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