3

据我所知,在 Linux 中实现底半部分的机制有很多:

  • 软中断
  • 任务组
  • 工作队列
  • 线程中断 ( request_threaded_irq() )

它们在可调度性方面都有其特点。我无法从文献中得到的是他们的先发制人的可能性。什么样的任务可以抢占各种不同的下半部分实现?

更具体地说,我对线程中断和工作队列感兴趣。一个线程 irq 或工作队列在完成之前不会被抢占,即一次运行,有多少人可以确信?哪些类型的任务能够抢占它们?

例如,Robert Love 的 Linux Kernel Development 指出只有上半部分可以抢占软中断,所以我会说软中断在大多数情况下都是一次性完成的(或者如果它们被抢占,它只会在很短的时间内完成)。

我的目标是定性评估同一线程 irq 或工作队列中两个操作之间的时间。特别是 i2c 数据读取和系统时钟读取之间的时间。

谢谢。

4

1 回答 1

1

工作队列和线程 IRQ 处理程序在进程上下文中运行并且可以被抢占。它们何时可以被抢占实际上取决于您的内核配置(CONFIG_PREEMPTCONFIG_PREEMPT_VOLUNTARY)以及您在处理线程上设置的实时优先级。

你不能假设你的工作队列或你的下半部分不会被打断。这意味着如果您与上半部分共享资源,则必须使用适当的锁定。

于 2015-10-18T11:53:59.633 回答