Сигналы Linux / vxworks - PullRequest
       5

Сигналы Linux / vxworks

3 голосов
/ 09 мая 2011

В руководстве vxworks я натолкнулся на следующее, и мне было интересно, почему это так.

Какие типы сигналов делают сигналы, которые делают их нежелательными?сигналы являются наиболее подходящими для обработки ошибок и исключений, а не для связи между задачами общего назначения.

1 Ответ

3 голосов
/ 09 мая 2011

Основная проблема с сигналами заключается в том, что обработчики сигналов регистрируются для каждого процесса / пространства памяти (в vxWorks ядро ​​представляет одно пространство памяти, а каждый RTP - это отдельное пространство памяти).

Это означает, что независимо от контекста потока / задачи будет выполняться один и тот же обработчик сигнала (для данного процесса). Это может вызвать некоторые проблемы с побочными эффектами, если ваш обработчик сигнала не ведет себя хорошо.

Например, если ваш сигнал использует мьютекс для защиты общего ресурса, это может вызвать неприятные проблемы или, по крайней мере, непредвиденное поведение

  Task A                       Task B               Signal Handler
  Take  Mutex
   ...
   Gets preempted 
                                does something
                                 ....
                                <SIGNAL ARRIVES>----->Take Mutex  (blocks)
   resumes
   ....
   Give Mutex
                                                ----->Resumes Handler

Я не уверен, что приведенный выше пример действительно передает то, что я пытаюсь. Вот некоторые другие характеристики сигналов:

  • Обработчик не выполняется, пока не запланировано задание / процесс. То, что вы отправили сигнал, не означает, что обработчик будет выполнен сразу же
  • Нет гарантии, по какой Задаче / Потоку будет выполняться обработчик. Любой поток / задача в процессе может запустить его (какой поток / задача выполняется первым). У VxWorks есть способы обойти это.

Обратите внимание, что вышесказанное относится только к асинхронным сигналам, отправляемым через вызов kill.

Исключение сгенерирует синхронный сигнал, который будет выполнен сразу же в текущем контексте.

...