Ho cercato su Google e ho scoperto che la maggior parte delle persone ne sostiene l'uso kmalloc
, poiché è garantito che avrai blocchi fisici di memoria contigui. Tuttavia, sembra anche che kmalloc
possa fallire se un blocco fisico contiguo che desideri non può essere trovato.
Quali sono i vantaggi di avere un blocco di memoria contiguo? In particolare, perché dovrei avere un blocco fisico di memoria contiguo in una chiamata di sistema ? C'è qualche motivo per cui non potrei semplicemente usare vmalloc
?
Infine, se dovessi allocare memoria durante la gestione di una chiamata di sistema, dovrei specificare GFP_ATOMIC
? Una chiamata di sistema viene eseguita in un contesto atomico?
GFP_ATOMIC
L'assegnazione è ad alta priorità e non dorme. Questa è la bandiera da usare nei gestori di interrupt, nelle metà inferiori e in altre situazioni in cui non puoi dormire.
GFP_KERNEL
Questa è un'allocazione normale e potrebbe bloccarsi. Questo è il flag da utilizzare nel codice di contesto del processo quando è sicuro dormire.
vmalloc
è più veloce con Kernel 5.2 (Q2 2019)