3.3.3 Shared Memory

[gesichtete Version][gesichtete Version]
Keine Bearbeitungszusammenfassung
Zeile 67: Zeile 67:
</p>
</p>
<p>
<p>
Dieser Seitenrahmen kann nun sehr einfach in die virtuellen Adressräume der beteiligten Prozesse eingebunden werden. Nötig ist dazu allein ein entsprechender Eintrag in den betreffenden Seitentabellen.
Dieser '''eine''' Seitenrahmen kann nun sehr einfach in '''alle''' virtuellen Adressräume der beteiligten Prozesse eingebunden werden. Nötig ist dazu allein ein entsprechender Eintrag in '''allen''' betreffenden Seitentabellen.
</p>
</p>



Version vom 6. Dezember 2013, 12:50 Uhr

Der englische Begriff Shared Memory bedeutet übersetzt Gemeinsam genutzer Speicher. Mehrere Prozesse sollen also vom Betriebssystem die Möglichkeit zur Verfügung gestellt bekommen, dass bestimmte Speicherbereiche gemeinsam genutzt werden können.


Hinweis

Wer sich noch an das Kapitel Limitregister zum Speicherschutz erinnert, dem ist sicher auch noch bewußt, dass die Nutzung eines Speicherbereichs durch mehrere Prozesse eigentlich gar nicht erwünscht war, und unbedingt unterbunden werden sollte. (Was durch den Einsatz des Limitregisters ja auch realisiert wurde.)


Wenn also Shared Memory jetzt als Betriebssystemkonzept eingeführt wird, dann muss es dazu einen guten Grund geben.

Und in der Tat gibt es einen sehr guten Grund, der für den Einsatz von gemeinsam genutztem Speicher spricht:


RAM kann man nie genug haben

Der (physikalische) Arbeitsspeicher ist seit jeher eine knappe Ressource. Wenn es also Möglichkeiten gibt, durch geschickte Ausnutzung von Dingen, die sowieso vorhanden sind, "gefühlt mehr RAM" zur Verfügung zu haben, dann macht es Sinn, diese Möglichkeiten auch zu nutzen.

Ein Beispiel aus der Praxis:

Aus der Praxis

Wenn ein Programm gestartet, und dadurch zum Prozess wird, dann muss sein ausführbarer Maschinencode (der Programmtext) im (physikalischen) Speicher zur Verfügung stehen, damit er auf der CPU ausgeführt werden kann. (Durch die virtuelle Speicherverwaltung reicht es bekanntlich, dass nur ein Teil des Programmtextes eingelagert ist.)

Was passiert nun, wenn das gleiche Programm mehrmals gestartet wird?
Dann resultieren daraus auch mehrere Prozesse.

Wenn jetzt für jeden Prozess immer der gleiche Programmtext in unterschiedliche Bereiche des Hauptspeichers eingelagert werden müsste, so ergäbe sich eine Redundanz, die letztlich einer vermeidbaren Speicherverschwendung entspricht.


{{#index:DLL-Dateien|Dynamic Link Libraries|Shared Libraries}} Windows-User kennen vielleicht DLL-Dateien (Dynamic Link Libraries). Unter Unix/Linux gibt es etwas Gleichwertiges mit den sogenannten Shared Libraries.

In beiden Fällen enthalten diese Dateien ausführbaren Code, der von vielen Prozessen genutzt wird. Wenn dieser Code nur einmal im Hauptspeicher vorgehalten werden muss, dann wird eine signifikante Einsparung von benutztem Hauptspeicher erzielt.

Dabei ist die Umsetzung des Shared Memory Konzepts ganz einfach:


Realisiert durch Dinge, die sowieso vorhanden sind

Man nehme die virtuelle Speicherverwaltung mit ihren Seitentabellen. Das Betriebssystem kann dann für eine beliebige Anzahl (mindestens zwei) an Prozessen das Shared Memory Konzept durch geschickte Einträge in den Seitentabellen der beteiligten Prozesse realisieren.

Der gemeinsam genutzte Speicher entspricht dann einem bestimmten Seitenrahmen des physikalischen Speichers. Hier könnten beispielsweise DLL-Dateien oder Shared Libraries eingelagert sein.

Dieser eine Seitenrahmen kann nun sehr einfach in alle virtuellen Adressräume der beteiligten Prozesse eingebunden werden. Nötig ist dazu allein ein entsprechender Eintrag in allen betreffenden Seitentabellen.


Hinweis

Bedenke: Jeder Prozess besitzt seinen eigenen virtuellen Speicher und damit auch seine eigene Seitentabelle!


Wie einfach die Realisierung von Shared Memory tatsächlich ist, wird hoffentlich durch die folgende Aufgabe klar:


Aufgabe 1

Aufgabe

Fertige eine Skizze an.

Anhand der Skizze sollst du für zwei Prozesse mit ihren Seitentabellen erklären, wie ein physikalischer Seitenrahmen in den jeweiligen virtuellen Adressraum der beiden Prozesse eingebunden wird.

Warum eine Skizze? Weil ein Bild immer mehr sagt, als 1.000 Worte.

Erläutere deine Skizze!

Aber denke daran: Du brauchst keine 1.000 Worte mehr...


Aufgabe 2

Aufgabe

Was denkst du:

Können durch den Einsatz von Shared Memory Seitenfehler (Page faults) vermieden werden?

Erläutere deine Meinung!


Siehe Mandl 2013 Kap. 7.2.8



Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png