Переключение контекста на определенный процесс после определенного ISR - PullRequest
0 голосов
/ 13 мая 2018

Существует ли какой-либо (грязный) метод, провоцирующий переключение контекста на конкретный процесс после определенного ISR?

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

Любой совет будет отличным.Спасибо!

1 Ответ

0 голосов
/ 13 мая 2018

Создайте свой драйвер таким образом, чтобы процесс блокировал поток на подходящем системном вызове (read(), ioctl()), когда ISR пробуждает этот поток (поскольку для read() стал доступен хотя бы один байт).

Затем убедитесь, что поток имеет максимально возможный приоритет и предпочтительно использует планировщик реального времени (SCHED_FIFO или SCHED_RR). На практике, если ваш процесс не запускается с привилегиями root, вам необходимо запустить службу с привилегиями root, настроить поток, а затем отбросить привилегии; или дать возможность двоичного исполняемого файла CAP_SYS_NICE через, например, setcap pe=CAP_SYS_NICE binary.

Технически возможно, что водитель также связался с расписанием, но я бы не стал этого делать. Все, что так критично ко времени, должно быть сделано вместо этого в ядре ISR.

Если вы хотите сделать это в пользовательском пространстве, потому что вы не хотите, чтобы ваш код был производным от ядра и, следовательно, под лицензией GPL, вы сами по себе.

...