最近我读过一些关于os内核的书。我知道,当一个事件(如时钟滴答)发生时,它将触发中断,然后触发内核指定的例程响应。
因此,我的问题是:1)当中断被触发并相应的内核例程仍在运行时,由于某种原因又触发了另一个中断。内核将如何响应?当它处理第一次中断时,它会掩盖第二次中断吗?还是第一个中断的相应例程被第二个中断中断了?如果第二个条件为真,内核如何确保例程“重新进入”?
2)内核是多线程的还是多进程的?我的意思是,当事情像第一个问题一样,内核将使用CPU的额外核心来处理中断?如果是这样的话,内核如何确保一切正常运行,就像运行在单核CPU上一样?
发布于 2019-11-26 11:21:27
(
1)如果中断被触发,其相应的内核例程仍在运行,那么另一个中断将因某种原因而触发;内核将如何响应?当它处理第一次中断时,它会掩盖第二次中断吗?还是第一个中断的相应例程被第二个中断中断了?
是的;不同的操作系统可以:
H 111不使用多个IRQ(例如只使用计时器IRQ,轮询其他一切)H 212F 213
如果第二个条件为真,内核如何确保例程是“可重入的”?
如果OS设计人员决定(部分或全部)IRQ可能会打断其他人,那么他们将需要弄清楚在任何允许的情况下,重入是如何工作的。这可以是“不做会导致问题的事情”(例如,IRQ处理程序只向稍后执行实际工作的任务发送通知),也可以是进一步的限制(例如,暂时获取一个锁,防止IRQ处理程序中可能导致重入问题的部分进一步执行IRQ,而不是其他不需要重新进入的部分)。
2)内核是多线程还是多进程?我的意思是,当事情像第一个问题一样,内核将使用CPU的额外核心来处理中断?
是的;不同的操作系统可以使用多线程或多处理(或两者兼而有之);也可以使用或不使用其他内核来处理中断。
如果是
,那么内核如何确保一切正常工作,就像运行在单核CPU上一样?
如果内核确实使用其他内核来处理中断,那么它也会做一些事情来确保一切正常工作。“某样东西”可以是由锁、事务内存、无锁/无块算法组成的系统,也可以是“无共享”的方法,或者是这些东西的组合。
https://stackoverflow.com/questions/59049257
复制相似问题