Мне нужно написать модуль ядра, который имитирует «мультикастер» с использованием файловой системы / proc.
В основном необходимо поддерживать следующие сценарии:
1) разрешить один доступ на запись в файл / proc и несколько обращений на чтение в файл / proc.
2) Модуль должен иметь буфер содержимого последней успешной записи.
Каждая запись должна соответствовать чтению всех читателей.
Рассмотрим сценарий 2: писатель что-то написал, и есть два читателя (A и B), A прочитал содержимое буфера, а затем A попытался снова прочитать, в этом случае он должен перейти в wait_queue и ждать следующее сообщение должно не снова получить тот же буфер.
Мне нужно сохранить карту всех pid, которые уже читают текущий буфер, и в случае, если они попытаются прочитать снова, и буфер не был изменен, они должны быть заблокированы, пока не появится новый буфер. Я пытаюсь понять, что есть способ сохранить эту информацию без карты.
Я слышал, что в системе ввода-вывода есть несколько избыточных полей, которые я могу использовать для пометки процесса, если он уже читает текущий буфер.
Может кто-нибудь дать мне совет, где мне искать это поле? как я могу сохранить информацию о текущем процессе, не сохраняя «карту» pid и буферов?
Спасибо!