为什么linux决定标准信号的优先级高于rt信号?

时间:2011-06-14 01:53:25

标签: signals

  

如果是标准信号和实时信号   等待进程,POSIX   留下未指明的是   首先交付。 Linux,和许多人一样   其他实现,          在这种情况下,优先考虑标准信号。

从字面上看,实时信号有这个名字,因为它需要尽快处理,几乎是实时的。

但为什么linux的优先级低于标准信号?

2 个答案:

答案 0 :(得分:2)

可能因为实时信号排队,所以给它们较低的优先级会降低你“错过”信号的可能性。

答案 1 :(得分:1)

这可能与实时信号排队而非常规信号排队的事实有关。这意味着如果两个实时信号快速连续激活(在它可以被操作之前),你的信号处理程序将被调用两次。

如果这种情况发生在常规信号上,那么就会“迷失”(虽然这很容易让周围的人工作)。

我认为目的是保持两种类型的信号不同。为POSIX.4构建的应用程序很可能会尽可能地使用实时中断,为退出条件等罕见事件留下常规中断。

换句话说,您将不再使用USR1进行配置重新加载(如某些程序那样),但会为此选择一个较低优先级的实时中断。

使用实时信号可以为您提供正确实时应用所需的信息:

  • 没有遗失事件。
  • 优先级顺序,因此应用程序可以确保重要事项优先于不太重要的事情发生 - 我相信这个是实时方面,类似于确保优先级较高的线程始终优先于较低优先级。
  • 复用信号(用信号发送附加数据)。

实时信号背后的部分原理可以在MichaelGonzálezHarbour等人撰写的白皮书中找到,题为“实时POSIX:概述”。提取如下:

POSIX.1中定义的信号机制允许通知系统中发生的事件,但对于实时应用程序并不完全令人满意。信号没有排队,因此某些事件可能会丢失。信号没有优先级,这意味着紧急事件的响应时间更长。而且,相同类型的事件产生具有相同数量的信号,这些信号是难以区分的。由于许多实时系统严重依赖于事件的快速交换 在系统中,POSIX.4扩展了信号接口,实现了以下功能:

  • 实时信号排队,因此事件不会丢失
  • 使用信号编号作为优先级,将待处理的实时信号按优先级顺序出列。这样可以设计应用程序,使其能够更快地响应紧急事件。
  • 实时信号包含一个附加数据字段,应用程序可以使用该数据字段在信号发生器和信号处理程序之间交换数据。例如,该数据字段可用于识别信号源。
  • 扩展了应用程序可用的信号范围。