Schnellreferenz

Die folgenden Funktionen und Symbole gehören zum Bereich der Allokation von Speicher:

#include <linux/malloc.h>, void *kmalloc(size_t size, int flags);, void kfree(void *obj);

Die am häufigsten verwendeten Funktionen zum Allozieren von Speicher.

#include <linux/mm.h>, GFP_KERNEL, GFP_ATOMIC, _ _GFP_DMA, _ _GFP_HIGHMEM

_ _GFP_DMA und _ _GFP_HIGHMEM sind kmalloc-Flags, die entweder mit GFP_KERNEL oder mit GFP_ATOMIC ODER-verknüpft werden.

#include <linux/malloc.h>, kmem_cache_t *kmem_cache_create(char *name, size_t size, size_t offset, unsigned long flags, constructor(), destructor());, int kmem_cache_destroy(kmem_cache_t *cache);

Dienen zum Erzeugen bzw. Zerstören eines Slab-Caches. Der Cache kann zur Allokation mehrerer Objekte der gleichen Größe verwendet werden.

SLAB_NO_REAP, SLAB_HWCACHE_ALIGN, SLAB_CACHE_DMA

Flags, die beim Erzeugen eines Caches angegeben werden können.

SLAB_CTOR_ATOMIC, SLAB_CTOR_CONSTRUCTOR

Flags, die der Allokator an die Konstruktor- und Destruktor-Funktionen übergeben kann.

void *kmem_cache_alloc(kmem_cache_t *cache, int flags);, void kmem_cache_free(kmem_cache_t *cache, const void *obj);

Dienen zum Allozieren und Freigeben eines einzelnen Objekts im Cache.

unsigned long get_zeroed_page(int flags);, unsigned long _ _get_free_page(int flags);, unsigned long _ _get_free_pages(int flags, unsigned long order);, unsigned long _ _get_dma_pages(int flags, unsigned long order);

Die seitenorientierten Allokationsfunktionen. get_zeroed_page gibt eine mit Nullen gefüllte Seite zurück. Alle anderen Versionen initialisieren den Inhalt der zurückgegebenen Seite(n) nicht. _ _get_dma_pages ist ab Linux 2.2 nur ein Kompatibilitätsmakro (Sie können statt dessen __GFP_DMA verwenden).

void free_page(unsigned long addr);, void free_pages(unsigned long addr, unsigned long order);

Diese Funktionen geben seitenorientierte Allokationen frei.

#include <linux/vmalloc.h>, void * vmalloc(unsigned long size);, void vfree(void * addr);, #include <asm/io.h>, void * ioremap(unsigned long offset, unsigned long size);, void iounmap(void *addr);

Diese Funktionen allozieren zusammenhängenden virtuellen Adreßraum oder geben ihn wieder frei. ioremap greift auf physikalischen Speicher über virtuelle Adressen zu, während vmalloc freie Seiten alloziert. Mit ioremap abgebildete Bereiche werden mit iounmap freigegeben, während mit vmalloc geholte Seiten mit vfree freigegeben werden.

#include <linux/bootmem.h>, void *alloc_bootmem(unsigned long size);, void *alloc_bootmem_low(unsigned long size);, void *alloc_bootmem_pages(unsigned long size);, void *alloc_bootmem_low_pages(unsigned long size);

Erst ab Version 2.4 des Kernels. Speicher kann mit diesen Funktionen bereits beim Booten alloziert werden. Dies kann nur von Treibern verwendet werden, die direkt in das Kernel-Image gelinkt sind.