2014-03-13 1 views

Antwort

2

Kmalloc - weist zusammenhängende Bereiche dem physischen Speicher zu. Aber denken Sie daran, das Zuweisen und Freigeben von Speicher ist eine Menge Arbeit.

Kmem_cache_alloc - Hier werden einige Kopien der vordefinierten Größenobjekte gespeichert. Angenommen, Sie haben eine Struktur, von der Sie wissen, dass sie sehr häufig benötigt wird. Anstatt sie aus dem Hauptspeicher (kmalloc) zuzuweisen, wenn Sie sie benötigen, behalten Sie bereits mehrere Kopien davon & zugewiesen, wenn Sie möchten der Block bereits zugewiesen (spart viel Zeit). Ebenso, wenn Sie es freigeben, geben Sie es nicht zurück, es ist tatsächlich nicht frei, es geht zurück zum zugeteilten Pool, so dass, wenn ein Prozess erneut danach fragt, Sie diese Adresse des bereits zugeteilten zurückgeben können Struktur.

+0

was ist die Objektgröße? Wo ist Anrufer – Chinaxing

+0

Gewährleistet kmem_cache_alloc die Zuweisung an einer Seitengrenze, z. für den Zweck von DMA? – Mark

+0

@Mark. Das Flag [SLAB_CACHE_DMA] (http://www.makelinux.net/ldd3/chp-8-sect-2) weist Speicher in der DMA-Zone zu. –

1

kmalloc: Es verwendet die generischen Slab-Caches, die für jeden Kernel-Code verfügbar sind. Ihr Modul teilt also den Plattencache mit anderen Komponenten im Kernel.

kmem_cache_alloc: Es wird von kmem_cache_create erstellte Objekte aus einer eigenen Platte Cache zuweisen. Wenn Sie speziell ein besseres Platten-Cache-Management speziell für Ihr Modul wünschen, verwenden Sie auch für einen bestimmten Objekttyp kmem_cache_create gefolgt von kmem_cache_alloc. USB/SCSI-Treiber verwenden dies. kmem_cache_create nimmt die Größe Ihres Objekts an, das Sie erstellen möchten, einen Namen, der in/proc/slabinfo erscheint, und Flags, um das Verhalten Ihres Plattencaches zu bestimmen.

Ref: https://www.mail-archive.com/[email protected]/msg13191.html & LDD