Как я могу установить связь между потоками ядра? - PullRequest
3 голосов
/ 11 августа 2011

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

Есть ли другой способ, который я мог бы принять во внимание? Что является наиболее распространенным стандартом в коде ядра?

1 Ответ

2 голосов
/ 12 августа 2011

Вы не говорите, под какой операционной системой вы программируете. Я предполагаю, что Linux является самой распространенной системой Unix.

Есть несколько хороших книг по программированию ядра Linux. Драйверы устройств Linux доступны онлайн, а также на бумаге. Глава 5 имеет дело с параллелизмом; Вы можете сразу перейти к главе 5, хотя лучше сначала просмотреть хотя бы главы 1 и 3. В последующих главах также есть соответствующие разделы (в частности, очереди ожидания обсуждаются в главе 6 ).

Модель параллелизма ядра Linux построена на общих переменных. Существует широкий спектр методов синхронизации: атомарные целочисленные переменные, блокировки взаимного исключения (спин-блокировки для неблокирующих критических секций, семафоры для блокировки критических секций), блокировки чтения-записи, условные переменные, очереди ожидания,…

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