next up previous contents
Nächste Seite: vmem Aufwärts: Allgemeine DDE Funktionalität Vorherige Seite: Allgemeine DDE Funktionalität   Inhalt

Speichermanagement

Gerätetreibern unter Linux stehen diverse Funktionen zur Allokation und Freigabe von Speicherblöcken mit festgelegten Eigenschaften und unterschiedlicher Granularität zur Verfügung.


Tabelle 3.2: Speichermanagement unter Linux
Granularität Anordnung phys. Seiten Schnittstelle Bezeichnung
unbestimmt fortlaufend kmalloc() kernel memory
kfree() (kmem)
$2^n$ Speicherseiten fortlaufend get_pages() kernel memory pages
free_pages()
unbestimmt fortlaufend kmem_cache_alloc() kernel memory cache
kmem_cache_free() (slabs)
unbestimmt unbestimmt$\!^a$ vmalloc() virtual kernel memory
vfree() (vmem)


Nach Tab. 3.2 können Seiten von Speicherbereichen, die mit vmalloc() allokiert wurden, frei im physischen Speicher verteilt sein, solange sie virtuell fortlaufend sind. Die virtuellen Speicherblöcke können aufgrund dieser Eigenschaft nicht für DMA verwendet werden.

Kernel Memory hingegen kann für DMA-Transfers genutzt werden. Somit müssen die verbleibenden drei Gruppen Blöcke allokieren, die fortlaufend im physischen Adreßraum auch über Seitengrenzen hinaus sind. Weiterhin muß ein schneller Weg existieren, eine virtuelle in eine physische Adresse und umgekehrt umzusetzen, da Peripheriegeräte nicht mit virtuellen Adressen umgehen können.

Ich werde hier nicht näher auf die slabs eingehen, welche eine spezielle Funktionalität zur Verfügung stellen, die selten direkt genutzt wird. Slabs werden in [Bon94] genau beschrieben, hier nur soviel: Slabs implementieren einen Objekt-Cache, sind also eine Optimierung für gleichförmige Speicherallokationen3.3.

Da die Schnittstelle zum Speichermanagement von Linux vorgegeben wird, bleibt nun noch zu klären, welchen Weg das DDE einschlägt um die genannten Anforderungen zu erfüllen.

Abbildung 3.2: Speicherpools und Dataspaces (nach [L$^+$99] Abb. 4)
\resizebox*{.75\textwidth}{!}{\includegraphics{mempools.eps}}



Unterabschnitte
next up previous contents
Nächste Seite: vmem Aufwärts: Allgemeine DDE Funktionalität Vorherige Seite: Allgemeine DDE Funktionalität   Inhalt
Christian Helmuth 2001-12-11