Предположим, что мы хотим поддерживать пул памяти в драйвере или модуле устройства. Как этот пул может быть создан и доступен для нескольких процессов, скажем, 4 процесса, обращаясь к этому драйверу/модулю.
Предположим, что в пуле установлено 1 МБ памяти.
Когда я читал LDD, я наткнулся на api mempool_create(), но затем там также kmalloc.
Если кто-то сделал такую вещь, любезно поделитесь знаниями.
Мой первоначальный подход заключается в том, чтобы выделять с помощью kmalloc(), а затем поддерживать начальные и конечные указатели в частном объекте для каждого процесса, который открывает модуль.
EDIT: Спасибо @kikigood за то, что потратили некоторое время на это. Поэтому, основываясь на ваших комментариях, я делаю что-то вроде этого.
Предположим, что я выделил 1 МБ памяти во время init. И я хочу ограничить количество процессов до 4, поэтому я сохраняю счет. Увеличьте это количество при каждом
atomic_t count =0;
open()
{
if(count >4)
return -ENOMEM;
count++;
}
Также я поддерживаю буфер внутри моей частной структуры устройства для каждого процесса.
Как назначить некоторую память из пула в этот буфер.