Operating system 操作系统内核是基于事件的吗?内核是多线程的还是多进程的?

Operating system 操作系统内核是基于事件的吗?内核是多线程的还是多进程的?,operating-system,kernel,Operating System,Kernel,最近我读了一些关于操作系统内核的书。我知道当一个事件(比如时钟滴答声)发生时,它会触发一个中断,然后是内核指定的例程响应 因此,我的问题是: 1) 当一个中断被触发并且其对应的内核例程仍在运行时,由于某种原因,另一个中断被触发。内核将如何响应?在处理第一次中断时,它会屏蔽第二次中断吗?或者第一个中断的相应例程被第二个中断了?如果第二个条件为真,内核如何确保例程“可重入” 2) 内核是多线程的还是多进程的?我的意思是,当事情像第一个问题那样发展时,内核将使用CPU的额外内核来处理中断?如果是这样,

最近我读了一些关于操作系统内核的书。我知道当一个事件(比如时钟滴答声)发生时,它会触发一个中断,然后是内核指定的例程响应

因此,我的问题是: 1) 当一个中断被触发并且其对应的内核例程仍在运行时,由于某种原因,另一个中断被触发。内核将如何响应?在处理第一次中断时,它会屏蔽第二次中断吗?或者第一个中断的相应例程被第二个中断了?如果第二个条件为真,内核如何确保例程“可重入”

2) 内核是多线程的还是多进程的?我的意思是,当事情像第一个问题那样发展时,内核将使用CPU的额外内核来处理中断?如果是这样,内核如何确保一切正常工作,就像在单核CPU上运行一样

1) 如果一个中断被触发,而其相应的内核例程仍在运行,那么出于某种原因会触发另一个中断;内核将如何响应?在处理第一次中断时,它会屏蔽第二次中断吗?或者第一个中断的相应例程被第二个中断了

对,;不同的操作系统可以:

  • 在处理IRQ时屏蔽其他IRQ

  • 允许不同的IRQ嵌套(相互中断)

  • 允许所有IRQ嵌套(包括中断自身的同一IRQ)

  • 屏蔽一些IRQ并允许其他IRQ嵌套

  • 不得使用多个IRQ(例如,仅使用计时器IRQ,并轮询其他所有IRQ)

如果第二个条件为真,内核如何确保例程是“可重入的”

如果操作系统设计者决定(部分或全部)IRQ可能会中断其他IRQ;然后,他们需要弄清楚,在他们允许的任何情况下,重入将如何工作。这可能是“不做任何导致问题的事情”(例如,可能IRQ处理程序只是向稍后执行实际工作的任务发送通知),也可能是进一步的限制(例如,临时获取一个锁,以防止IRQ处理程序中可能导致重入问题的部分出现进一步的IRQ,而不是其他不存在问题的部分)

2) 内核是多线程的还是多进程的?我的意思是,当事情像第一个问题那样发展时,内核将使用CPU的额外内核来处理中断

对,;不同的操作系统可能使用多线程或多处理(或两者都使用或两者都不使用);并且可能使用或不使用其他内核来处理中断

如果是这样,内核如何确保一切正常工作,就像在单核CPU上运行一样


如果内核确实使用其他内核来处理中断;它还将确保一切正常工作。“某物”可能是一个锁系统,或事务内存,或无锁/无块算法,或“无共享”方法,或这些东西的组合。

单个问题帖子中的问题太多。此外,每个特定的操作系统内核都有自己处理中断和多线程/多进程方面的方法。一般来说,询问操作系统内核的这些方面有一点道理:每个答案都是“视情况而定”。是的。。操作系统设计者/开发者/测试者/调试器确保所有这些都能在目标硬件上工作。这就是为什么操作系统开发非常重要。