Я googled вокруг и нашел большинство людей, выступающих за использование kmalloc
, так как вы гарантированно получите смежные физические блоки памяти. Тем не менее, также кажется, что kmalloc
может выйти из строя, если не найден нужный физический блок.
Каковы преимущества наличия непрерывного блока памяти? В частности, зачем мне нужно иметь смежный физический блок памяти в системном вызове ? Есть ли причина, по которой я не мог просто использовать vmalloc
?
Наконец, если бы я должен был выделить память во время обработки системного вызова, должен ли я указывать GFP_ATOMIC
? Является ли системный вызов выполненным в атомном контексте?В чем разница между vmalloc и kmalloc?
GFP_ATOMIC
Распределение является высоким приоритетом и не спит. Это флаг для использования в обработчиках прерываний, внизу половинки и другие ситуации, когда вы не можете спать.
GFP_KERNEL
Это нормальное распределение и может блокироваться. Это флаг для использования в коде контекста процесса, когда он безопасен для сна.
Хорошая статья о vmalloc и kmalloc [http://learnlinuxconcepts.blogspot.in/2014/02/linux-memory-management.html](http://learnlinuxconcepts.blogspot.in/2014/02/linux- memory-management.html) – JIN007 2014-02-15 15:35:13