Блокировка ресурсов в прерываниях

Это проблема, которая давно решена с помощью системного журнала (во всех его вариантах), но есть два инструмента, которые решат вашу конкретную проблему с минимальными усилиями.

Первое, более портативное, но менее универсальное решение - это регистратор (он необходим для любого инструментария администратора). Это простая утилита, копирующая стандартный ввод в системный журнал. (передавая ответственность и превращая ротацию файлов в проблему logrotate и syslog)

Вторым, более элегантным, но менее переносимым решением является syslog-ng, который помимо приема сообщений журнала от стандартных сокетов syslog может выполнять программы, вывод фильтруется через логгер. (Я еще не использовал эту функцию, но она выглядит идеально для того, что вы хотите сделать.)

1
22.12.2018, 01:28
1 ответ

В зависимости от того, что вы написали и какие структуры данных он использует, трудно сказать, но:

I read that interrupts can't sleep, does that mean I am guaranteed that my handlers (hooks and read handlers) will be executed one after the other, or do I need to use locks to prevent simultaneous access to the same resources from different functions?

Хотя это правда, что прерывания не могут находиться в спящем режиме, вы также должны учитывать, что прерывание, взаимодействующее с этой структурой данных, также может одновременно выполняться на другом ЦП, или другое прерывание может накладываться поверх вашего текущего прерывания., временно отключив его от процессора. В любом случае вам нужно обработать случай взаимоблокировки и случай, когда два потока конкурируют за запись/чтение.

Так что да, нет оснований полагать, что только на основании того, что вы написали, вам не нужен какой-то механизм синхронизации. В зависимости от вашего конкретного случая синхронизация может оказаться проще, если вы отключите дальнейшие прерывания на этом ЦП (, например. в случае переменных percpu ).

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

2
27.01.2020, 23:31

Теги

Похожие вопросы