Я googled вокруг и нашел большинство людей, выступающих за использование kmalloc
, так как вы гарантированно получите смежные физические блоки памяти. Однако также кажется, что kmalloc
может выйти из строя, если не удается найти непрерывный физический блок.
Каковы преимущества наличия непрерывного блока памяти? В частности, зачем мне нужно иметь непрерывный блок физический в системном вызове? Есть ли причина, по которой я не мог просто использовать vmalloc
?
Наконец, если я должен был выделить память во время обработки системного вызова, следует ли указывать GFP_ATOMIC
? Является ли системный вызов выполненным в атомном контексте?
GFP_ATOMIC
Распределение является приоритетным и не спит. Это флаг использовать в обработчиках прерываний, снизу половинки и другие ситуации, когда вы не может спать.
GFP_KERNEL
Это нормальное распределение и может блокироваться. Это флаг для использования в коде контекста процесса, когда безопасно спать.