Есть ли прямой механизм для определения того, вызывается ли данная функция в контексте прерывания или из контекста процесса. Это первая часть вопроса. Вторая часть: Как синхронизировать 2 процесса, один из которых находится в контексте прерывания, а другой - в контексте процесса. Если мое понимание правильное, мы не можем использовать мьютексы для процесса в контексте прерывания, поскольку ему не разрешено спать. С другой стороны, если я использую spinlocks, другой процесс будет использовать циклы CPU. Каков наилучший способ синхронизации этих двух процессов. Поправьте меня, если мое понимание совершенно неверно.В каком контексте данная функция вызывается в Linux Kernel
ответ
Вы можете определить, была ли функция выполнена как обработчик IRQ с использованием функции in_irq(). Но я не думаю, что это хорошая практика. Вы должны увидеть только код, в контексте которого выполняется ваша функция. В противном случае я бы сказал, что у вашего кода плохой дизайн.
Что касается механизма синхронизации - вы правы, вам нужно использовать spinlock, потому что вам нужно выполнить синхронизацию в атомном контексте (например, прерывание) - не то, чтобы у вас был большой выбор здесь. Вы также правы, что многие циклы процессора будут потрачены впустую при ожидании спин-блокировки, поэтому вы должны попытаться свести к минимуму количество вашего кода под блокировкой.
Добавление к ответу Сэма - вы должны спроектировать обработчик прерываний с нижней половиной и верхней половиной секций. Это позволяет вам иметь минимальный код (верхняя половина) в обработчике прерываний (который вы регистрируете при запросе irq в драйвере), а остальное (нижняя половина) вы можете планировать с помощью рабочей очереди. У вас может быть эта верхняя половина (где вы просто обрабатываете прерывание и выполняете минимальные красные/записи с устройства) внутри атомного контекста, защищенного спин-блокировкой, так что меньшее количество циклов процессора теряется в ожидании спин-блокировки.
- 1. В каком контексте Kernel Thread работает в Linux?
- 2. В каком контексте вызывается функция обратного вызова jQuery.post?
- 3. функция релиз вызывается в другом контексте процесса
- 4. В каком проекте Node.js используется данная зависимость?
- 5. В каком контексте вводится roboguice?
- 6. В каком контексте работает MSBUILD?
- 7. Linux Kernel- task_h_load
- 8. Linux Kernel mutex_lock_interruptible
- 9. В каком контексте выполняется Javascript для XUL?
- 10. Планирование политики в Linux Kernel
- 11. Атомная операция в Linux Kernel
- 12. WorkQueue реализация в Linux Kernel
- 13. Процесс в Linux Kernel space
- 14. В каком контексте инвентаризация изменяется в Netsuite
- 15. В каком контексте оператор удаления выдает ошибку?
- 16. Функция управления регистрами SDIO MODE в Linux Kernel
- 17. многозначной функция вызывается в контексте, который не может принимать множество
- 18. Изменить адрес I2C Linux kernel kernel
- 19. В каком контексте я должен использовать AlertDialog.Builder?
- 20. Lucene scoring: в каком контексте используется queryNorm?
- 21. В каком контексте находится путь относительно?
- 22. В каком контексте используются тесты Jest?
- 23. В каком контексте полезно использовать оператор typeof?
- 24. Знайте, в каком контексте работает DLL
- 25. Текстовые символы Linux Kernel
- 26. Встраиваемые Linux Kernel и Desktop Linux Kernel Difference
- 27. Linux Kernel Linking
- 28. linux kernel ota framework?
- 29. linux kernel debug log
- 30. Multicast + Linux Kernel