【问题标题】:Is os kernel event-based? Does the kernel multithreaded or multiprocess?操作系统内核是基于事件的吗?内核是多线程还是多进程?
【发布时间】:2020-03-21 18:33:39
【问题描述】:

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

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

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

【问题讨论】:

  • 问题太多在单个问题帖子中。此外,每个特定的操作系统内核都有自己的方式来处理中断和多线程/多进程方面。询问操作系统内核的这些方面一般有点道理:每个答案都是“视情况而定”。
  • 是的.. 操作系统设计人员/开发人员/测试人员/调试人员确保它在目标硬件上运行。这就是为什么操作系统开发很重要的原因。

标签: operating-system kernel


【解决方案1】:

1) 如果一个中断被触发并且其对应的内核例程仍在运行,那么由于某种原因另一个中断被触发;内核将如何响应?它在处理第一次中断时会掩盖第二次中断吗?还是第一个中断对应的程序被第二个中断了?

是的;不同的操作系统可能:

  • 在处理 IRQ 时屏蔽其他 IRQ

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

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

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

  • 不要使用多个 IRQ(例如,只使用计时器 IRQ,并轮询其他所有内容)

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多