05.08.2013 Aufrufe

Diplomarbeit - Operating Systems Group - Technische Universität ...

Diplomarbeit - Operating Systems Group - Technische Universität ...

Diplomarbeit - Operating Systems Group - Technische Universität ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!