Я гуляв навколо і виявив, що більшість людей виступає за використання kmalloc
, оскільки ви гарантовано отримуєте суміжні фізичні блоки пам'яті. Однак це, здається, kmalloc
може не вдатися, якщо не вдасться знайти суміжний фізичний блок, який ви хочете.
Які переваги мати суміжний блок пам'яті? Зокрема, навіщо мені потрібно мати системний фізичний блок пам'яті в системному виклику ? Чи є якась причина, яку я не міг просто використати vmalloc
?
Нарешті, якщо я мав би виділяти пам'ять під час обробки системного дзвінка, я повинен зазначити GFP_ATOMIC
? Чи системний виклик виконується в атомному контексті?
GFP_ATOMIC
Виділення є пріоритетним і не спить. Це прапор для використання в обробниках переривань, нижній половині та інших ситуаціях, коли ви не можете спати.
GFP_KERNEL
Це звичайне виділення і може заблокувати. Це прапор, який слід використовувати в контекстному коді процесу, коли він не може спати.
vmalloc
швидше з ядром 5.2 (Q2 2019)