UVM ist eine komplette Neufassung des NetBSD Speichersystems,
welches sich als wesentlich besser als das Mach VM System herausgestellt hat.
UVM unterstützt fortgeschrittene Eigenschaften wie z. B.
Page Loanout und wird zur Entwicklung eines vereinheitlichten Buffer und Page
Cache für NetBSD genutzt. Eine detaillierte Beschreibung können Sie
auf der
UVM Webseite
finden.
Chuck Cranor hat UVM entworfen und implementiert. Matthew
Green schrieb das Swap Subsystem und befasste sich mit Integrationsaspekten,
Chuck Silvers schrieb den Anonymous Memory Object Pager (wodurch
Unterstützung von mehrfach genutztem Speicher möglich wurde), und
viele andere Entwickler haben die entsprechenden Übertragungen
vorgenommen. Andrew Brown veränderte UVM um top down Speicherverwaltung zu
ermöglichen.
UVM benutzt träge Zuweisung; dies bedeutet, dass
Programme mehr virtuellen Speicher als vorhanden benutzen können. Stellt
UVM einen vollen virtuellen Speicher fest und wird ein Bit
aus der trägen Zuweisung angesprochen, so wird der anfordernde Prozeß
geKILLt und das System arbeitet normal weiter. Des Weiteren besteht ein
kleiner Puffer mit Pages, die für den Gebrauch des Paging Systems
reserviert sind. Dadurch kann der Pagedaemon bequem weiter funktionieren,
selbst wenn kein freier Arbeitsspeicher mehr vorhanden ist. Der Grossteil
dieser Arbeit wurde von Chuck Silvers erledigt.
UVM war ehemals Teil eines anderen Projektes von Chuck
Cranor, welches mit einem 'U' (für 'universal', also 'universell')
anfing. Dieses Projekt mutierte jedoch in UVM, so dass das
'u' eigentlich für gar nichts steht: "UVM" ist bloss ein
Name der sich von "vm" unterscheidete und gleichzeitig daran angelehnt bleibt.
Der virtuelle Speicher in UVM ist gleich der Grösse
Ihres physischen RAM (minus Kernel Overhead) plus der Grösse jeder
Swap-Partition. Oder anders ausgedrückt, physischer Speicher ist nicht
auf ein Paging Device angewiesen.
Hierdurch werden Speicherallokationen, die durch einen mmap(2) Aufruf
erfolgen und keine spezielle Addresse beanspruchen so arrangiert, dass sie
direkt unter dem Stack anfangen und sich von dort von oben nach unten arbeiten
(also ``top down''), anstelle von der Mitte aufwärts. Dadurch wurden die
Bereiche, die für heap growth und für mmap(2) Allokationen
reserviert sind zusammengelegt, was bedeutet, dass ein Prozess grössere
oder mehrere Objekte mmap(2)en, oder aber den heap grösser
wachsen lassen kann. Für interne Speicherverwaltung nutzt der Kernel
noch immer das traditionelle ``bottom up'' Schema.
Momentan wird die top down Speicherverwaltung als Kernel
Option in den i386 und PowerPC Ports (
bebox,
macppc,
mvmeppc,
ofppc,
pmppc,
prep, und
sandpoint) genutzt. Es
wird erwartet, dass letztendlich alle Ports top down nutzen
werden. Sehen Sie auch die
options(4)
Manual Page für weitere Informationen.