【问题标题】:Top halves and bottom halves concept clarification上半部分和下半部分概念说明
【发布时间】:2017-12-19 03:04:16
【问题描述】:

根据上半部和下半部的指导方针,当任何中断发生时,它由两半处理。所谓的上半部分是实际响应中断的例程——你注册到 request_irq 的那个例程。下半部分是由上半部分安排的例程,稍后在更安全的时间执行。上半部分处理程序和下半部分之间的最大区别在于,在下半部分执行期间所有中断都被启用——这就是它在更安全的时间运行的原因。在典型场景中,上半部分将设备数据保存到特定于设备的缓冲区,调度其下半部分,然后退出:此操作非常快。然后下半部分执行任何其他需要的工作,例如唤醒进程、启动另一个 I/O 操作等等。此设置允许上半部分在下半部分仍在工作时服务新的中断。

但是如果中断是由下半部分在更安全的时间处理的,那么从逻辑上讲,当中断到来时,它必须等到下半部分找到一些更安全的时间来执行中断,这将限制系统并且必须等到中断处理完毕,例如:如果我正在做一个项目,以在温度高于特定限制时给出 LED 闪烁指示,在这种情况下,如果在一些安全时间可用时完成中断处理(根据下半部分概念),那么闪烁操作将被延迟...... .请澄清我的疑问,所有的中断是如何处理的????

【问题讨论】:

  • 这对于课堂/培训课程来说似乎是一个完美的问题,对于 SO 来说并不多。
  • 抱歉从我的问题@Gerhardh 中删除了“C”标签

标签: linux interrupt-handling top-halves


【解决方案1】:

当使用 top-half/bottom-half 中断架构时,通常会有一个高优先级的中断处理线程。

此中断处理线程的优先级高于系统中的其他线程(一些供应商 SDK 为此指定了“中断”优先级)。经常有一个队列,当队列中没有工作时线程休眠。这个线程/队列被设计成可以从中断上下文中安全地添加工作。

当调用 top-half 处理程序时,它将处理硬件操作,然后将 bottom-half 处理程序添加到中断队列中。上半部分处理程序返回并退出中断上下文。然后操作系统将检查下一个运行的线程。因为中断线程有可用的工作,并且因为它是最高优先级,所以接下来会运行。这可以最大限度地减少您担心的延迟。

自然会有一些延迟抖动,因为队列中可能有其他中断在 LED 之前触发(在您的示例中)。对此有不同的解决方案,具体取决于应用程序和实时要求。一种是有一个基于中断优先级的排序队列。这在排队操作时会产生额外的成本,但它也确保您的中断将按优先级处理。对于关键延迟,另一种选择是在上半部中断处理程序中完成所有工作。

牢记这种架构的目的很重要:

  1. 尽量减少在中断上下文中花费的时间,因为在您处理当前中断时(可能)会禁用其他中断,并且您正在增加处理它们的延迟
  2. 防止用户从中断上下文调用不安全的函数

我们仍然希望我们的下半部分处理程序尽快运行以减少延迟,因此当您说“等待更安全的时间”时,这意味着“在中断上下文之外”。

【讨论】:

    【解决方案2】:

    如果你的眨眼操作太重要而不能延迟,你可以把它放在上半部分,可能根本没有下半部分。但是,取决于您在上半部分所做的事情,它可能会也可能不会影响系统性能。

    我建议你为这两种情况编写代码并执行一些分析

    【讨论】:

      【解决方案3】:

      中断:中断是改变处理器执行指令顺序的事件,对应于 CPU 内部和外部硬件电路产生的电信号。

      当任何中断产生时,它由两半处理。

      1) 上半部分

      2) 下半部分

      上半部分:一旦 CPU 收到中断,上半部分就会执行。在上半部分,上下文中断和调度程序被禁用。这部分代码只包含关键代码。这段代码的执行时间应该尽可能短,因为此时中断被禁用,我们不想错过设备产生的其他中断。

      下半部分:下半部分的工作用于运行上半部分的剩余(延迟)工作。当这段代码被执行时,中断被启用并且调度程序被禁用。下半部分由 Softirqs 和 Tasklet 安排以运行延迟工作

      注意:上半部分代码应尽可能短或确定时间,并且不应包含任何阻塞调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        相关资源
        最近更新 更多