Diplomarbeit - Operating Systems Group - Technische Universität ...
Diplomarbeit - Operating Systems Group - Technische Universität ...
Diplomarbeit - Operating Systems Group - Technische Universität ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
38 KAPITEL 4. IMPLEMENTIERUNG<br />
Adreßraum<br />
SCSI-Treiber<br />
0 16 MB 18 MB<br />
Übertragungspuffer<br />
dynamischer Speicher<br />
Programmtext/-daten 0<br />
0,25 GB 0,5 GB<br />
Stack<br />
<br />
Abbildung 4.3: Adreßraumstruktur<br />
1 GB 1,5 GB<br />
Heap<br />
Adreßraum<br />
Pager<br />
<br />
<br />
Adreßraum<br />
Dateisystem<br />
diversen Listen und Warteschlangen zu erleichtern. Um dies zu ermöglichen, wurde der Pager so erweitert,<br />
daß er pro Anwendung einen Speicherbereich verwaltet, dessen Größe dynamisch verändert werden<br />
kann. Dieser Bereich wird von einem Speicherverwaltungsalgorithmus verwendet, um der Anwendung dynamischen<br />
Speicher zur Verfügung zu stellen [Lea96]. Die Verwendung dieses Speichers erfolgt über die<br />
üblichen malloc-, free- und realloc-Funktionen.<br />
4.3.2 Pufferverwaltung<br />
Die zweite Aufgabe der Speicherverwaltung besteht in der Bereitstellung der für die Übertragung der Daten<br />
an die Anwendung erforderlichen Puffer. Die Verwaltungskomponente muß dabei zwei Bedingungen<br />
erfüllen:<br />
Die <br />
Die <br />
physische Adresse der Pufferbereiche muß bekannt sein. Dies ist erforderlich, da die Daten durch<br />
den SCSI-Treiber mittels DMA direkt in den Speicher geschrieben werden.<br />
Puffer sollten aus möglichst großen zusammenhängenden Speicherbereichen bestehen. Der SCSI-<br />
Treiber ist zwar durch Scattered Gathering in der Lage, Daten in verstreut liegende Speicherbereiche<br />
zu schreiben, die Verwaltung dieser Bereiche ist jedoch nur für eine kleine Anzahl einzelner<br />
Speicherabschnitte ausgelegt, so daß für die Puffer möglichst wenige getrennte Speicherbereiche<br />
verwendet werden sollten.<br />
Die Verwaltung der Puffer erfolgt in zwei Stufen. In der ersten Stufe wird durch einen separaten Thread im<br />
Pageradreßraum ein zusammenhängender Speicherbereich verwendet, der am Anfang in den Adreßraum<br />
so eingeblendet wird, daß die physischen und virtuellen Adressen übereinstimmen. Für die Organisation<br />
dieses Bereichs wird die in Abbildung 4.4 gezeigte Struktur verwendet.<br />
Für ein schnelles Allokieren der Speicherbereiche werden dynamisch erzeugte Freispeicherlisten verwendet.<br />
Zu Beginn existiert nur eine Liste mit einem Element, durch das der gesamte Speicherplatz beschrieben<br />
wird. Zur Allokation eines Speicherbereichs werden dann bei Bedarf größere Bereiche geteilt. Um ein<br />
schnelles Zusammenfassen der Speicherbereiche beim Freigeben zu gewährleisten und somit eine Fragmentierung<br />
des Speicherplatzes zu verhindern, werden die Speicherbereiche noch durch eine doppelt verkettete<br />
Liste verbunden, so daß die angrenzenden Speicherbereiche einfach zu ermitteln sind.<br />
Ausgehend von dieser Listenstruktur werden dann Anwendungen (in diesem Fall dem Dateisystem) Puffer<br />
zur Verfügung gestellt. Bei der Anforderung eines Puffers wird zunächst versucht, einen einzigen zusammenhängenden<br />
Speicherbereich für den Puffer zu verwenden, gelingt dies nicht, werden mehrere Bereiche