Operating system 为什么启动加载程序会禁用中断?

Operating system 为什么启动加载程序会禁用中断?,operating-system,qemu,Operating System,Qemu,我正在修操作系统课程。我正在将jos os引导到qemu x86 PC模拟器上。我读到BIOS查找可引导设备并将引导加载程序从可引导设备的第一个扇区加载到内存中的0x7c00 引导加载程序中的第一条指令是禁用中断,即cli 我了解了cli,即它清除eflags寄存器中的启用中断标志。我从维基百科上读到,这样做是为了避免内核代码和中断处理程序之间的竞争条件。请解释什么是竞赛条件,这里存在什么样的竞赛条件 我还是不明白为什么会这样?有人能详细说明一下吗?我正在考虑在我的操作系统课程中使用JOS,可能

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

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

我了解了cli,即它清除eflags寄存器中的启用中断标志。我从维基百科上读到,这样做是为了避免内核代码和中断处理程序之间的竞争条件。请解释什么是竞赛条件,这里存在什么样的竞赛条件


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

我正在考虑在我的操作系统课程中使用JOS,可能最早在2016年冬季学期。cli问题虽然很有趣,因为它阻止了什么,但在国际海事组织,它比这个问题稍微不那么有趣:

何时再次启用中断


您可以使用中描述的加载git用于实验室的说明,然后查看boot和kern目录中的序列。

我正在考虑在我的操作系统类中使用JOS,可能最早在2016年冬季学期。cli问题虽然很有趣,因为它阻止了什么,但在国际海事组织,它比这个问题稍微不那么有趣:

何时再次启用中断


您可以使用中描述的加载git的指南,然后查看引导和kern目录中的序列。

在引导加载程序中执行此操作的原因不止一个。请分享源代码的链接好吗?内核bootloader的全部源代码都在repo中。请看这里:感谢@cad引用Griwes编写的答案。这是一个很棒的回答。我还想知道赛车是如何导致中断失效的。好吧,一般而简单的答案是,进程和ISR可以访问公共变量。如果读写操作不是原子操作,则会发生竞争条件。一个具体的例子是:在引导加载程序中这样做的原因不止一个。请分享源代码的链接好吗?内核bootloader的全部源代码都在repo中。请看这里:感谢@cad引用Griwes编写的答案。这是一个很棒的回答。我还想知道赛车是如何导致中断失效的。好吧,一般而简单的答案是,进程和ISR可以访问公共变量。如果读写操作不是原子操作,则会发生竞争条件。一个具体案例是: