【问题标题】:Is there any other model than Interrupt driven architecture?除了中断驱动架构,还有其他模型吗?
【发布时间】:2012-09-20 20:59:22
【问题描述】:

我正在阅读有关操作系统如何使用中断与硬件通信的信息,只是想知道,除了中断驱动之外,是否还有其他架构?在 Robert Love 的 Linux 内核一书中,他说 Linux 处理的大部分架构都是中断驱动的,那么其他的呢?有人可以举个例子吗?谢谢。

【问题讨论】:

  • 我想是基于轮询的架构,即我们在完成最后一个刺激的一些工作后检查外部刺激
  • 轮询、消息传递是我能想到的仅有的两个,我不确定消息传递在某些时候是不是中断驱动的子集。

标签: architecture operating-system interrupt


【解决方案1】:

对您的问题的简短回答是,只有另一种模型,那就是轮询。在轮询模型中,系统反复询问硬件是否发生了任何事情。这种模型的缺点是 CPU 总是忙于询问,并且只有在询问时才能知道活动。如果它开始做其他事情,它可能会错过一个动作(因为它在动作时没有请求活动)。

更长的答案:

如果你仔细想想,实际上只有两种可能的系统:轮询(拉)和事件驱动(推)。在前者中,您询问硬件是否发生了任何事情,而在后者中,硬件会告诉您。换句话说:前者的代理是CPU/OS,后者是硬件。由于有两方,每一方都可以做两件事中的一件,这意味着我们只能有两种类型的系统(推/中断和拉/轮询),再加上一个混合系统(中断驱动和基于轮询的不同的时间或不同的环境)。

人们可以想象实现这三个系统中的任何一个的多种方法,并且可以将它们视为不同的模型,即使在幕后它们实际上是在实现其中一个可能的系统。不过,我想这并不是您真正想要的。

【讨论】:

    【解决方案2】:

    在低级别,轮询是主要的选择。然而,在架构上,主要方法是单片的,中断直接驱动设备驱动程序和微内核,其中设备驱动程序可能是在硬件事件发生时由内核通知的独立进程。中断仍然会发生,但它们由一个非常小的内核管理。我怀疑这是您的报价所指的差异。轮询不再很常见。 Minix 是最著名的基于微内核的操作系统之一,因为它用于教学。

    【讨论】:

      【解决方案3】:

      我猜,它是一些硬实时系统,系统不使用异步中断,而是在明确定义的时间(可能是周期性的)检查(轮询)I/O 设备的状态。如果设备未准备好或处于意外状态,系统会报告故障。

      【讨论】:

      • 不会采取性能或滞后(如果定期)或两者兼而有之???他们还在实施吗?
      • @howtechstuffworks 取决于您的目标应用程序,有时轮询会更快,即如果您只想同步处理队列(这就是您想要在硬件上做的所有事情),轮询更快/更简单而不是在处理新项目的过程中被打断
      • @howtechstuffworks 这些系统通常经过精心设计,可以满足特定目标,而不仅仅是抽象的快速或平均具有任意小的延迟。它们仍在制作中。
      • 一个通常没问题的轮询示例是自旋锁,当代码知道等待时间很短并且不想冒险使用更昂贵的同步原语时,它会在 MP OS 中使用。
      【解决方案4】:

      我将轮询架构等同于确定性进程导向,而中断驱动等同于随机进程导向。就其自身的优点而言,两者都不是更好的,而且两者都是普遍需要的。这取决于外部任务和接口。通常,系统必须允许许多进程的交互,并且计划架构以在进程的上下文中划分随机性是有益的,而不是在遇到必须定期服务且没有随机性的随机服务约束的同时满足要求。糟糕的设计会随机违反某些面向时序约束的服务,从而无法解决软件级别的功能困境。随机过程使用离散事件模拟建模以额外的复杂性建模,而确定性过程方向可以使用连续函数更简单地分析。

      【讨论】:

        最近更新 更多