Nun, der logische Adressraum ermöglicht nun eine Abstraktion von der realen Adressraumbelegung und
damit letztendlich auch eine Abstraktion von diesem Adressraumbelegungsplan, den wir gerade
vorher so ein bisschen kennengelernt haben. Dieser logische Adressraum beschreibt letztendlich eine
geradlinige Beschaffenheit des Hauptspeichers, zumindestens für sogenannte schwergewichtige
Prozesse. Der Hauptspeicher wird damit linear adressierbar, auch wenn wir den Hauptspeicher
praktisch physisch über verschiedene reale Adressbereiche realisiert vorfinden. Je nach
Hardware-Konfiguration würde man in dem logischen Adressraum diesen gesamten Hauptspeicher denn in
einen Adressraum, diese verschiedenen Bereiche auf der realen Ebene, in diesen einen Adressraum
zusammenfassen und damit linear adressierbar machen. Soweit bezüglich Hauptspeicher. Man geht aber auch
durchaus auch noch darüber hinaus und nimmt zum Beispiel andere Hardware-Einheiten mit hinzu,
die denn adressierbar sein sollen, die über normale Speicheradressen adressierbar sein sollen,
bildet diese praktischen, diesen logischen Adressraum mit ab. Das sind sogenannte speicher
abgebildete Objekte der Hardware, Memory Mapped, I.O. etwa ist so ein typisches Beispiel, wo man
besondere Geräteregister halt hat für die Interaktion mit den jeweiligen Peripheriegeräten
und erlaubt, dass diese Geräteregister logische Adressen bekommen und damit praktisch wie mit
ganz normalen Leseschreiboperationen und auch anderen Operationen praktisch von den Prozessen
zusammen im Kontext eines solchen logischen Adressraums denn referenzierbar werden. Aber
der wichtige Punkt hier ist eigentlich der Hauptspeicher, der auch wenn er auf der realen
Ebene fragmentiert wäre, im Endeffekt, dass er hier zu einer gesamten linearen Einheit praktisch
zusammengefasst wird letztendlich. Und in diesem logischen Adressraum, insbesondere natürlich
denn in diesem Hauptspeicher, den man damit anbietet, werden denn alle Text- und Datenadressen,
die für den Prozess denn gültig sein sollen, zusammengefasst. Wie ich eingangs schon sagte,
basiert das dann eben vor allem eben auch da darauf, was das Programm aussagt, also welche
Anweisungen das Programm halt enthält, wie groß das Programm halt ist, mit welchen Eingabedaten
dieses Programm denn arbeiten soll. Und der Adresswertebereich, der da dann halt praktisch
zustande kommt, bezogen auf Text- und Datenadressen, der macht denn eigentlich diesen logischen
Adressraum aus. Auf der Programmiersprachen-Ebene sehen wir hier mindestens zwei Segmente. Wir
kennen schon den Begriff Textsegment und den Begriff Datensegment aus der Begrifflichkeit
eines Unix-Prozesses. Hier bezogen auf die Programmiersprachen-Ebene meinen wir damit
schlichtweg im Textsegment sind alle diese Maschinenanweisungen enthalten, Programmkonstanten
sind da letztendlich enthalten. Das ist normalerweise nur lesbar und man würde sagen, das sind die
ausführbaren Anteile eines Programms enthalten. Wohingegen die Daten, etwa initialisierte Daten,
die globale Variable, vielleicht die Halda, also der Hieb, halt ein eigenes anderes Datensegment
dann entsprechend eben aufmacht. Das ist eine logische Sicht, die auf der Programmiersprachen-Ebene
eingenommen wird und die Größe dieser Segmente, dieser Text- oder Datensegment, die man hat,
hängen auch sehr stark von der Größe der Programme letztendlich an. Dann haben wir auf der
Maschinenprogramm-Ebene mindestens ein weiteres Segment, nämlich den Stack, das Stapelsegment,
wo man für jeden Prozess sowas wie die lokalen Variablen, umfällige Hilfsparameter oder
Hilfsvariablen ablegt und dann für die Prozedur- und Funktionsaufrufe die aktuellen Parameter
letztendlich übergibt, zumindest für Stapelmaschinen. Des Weiteren gibt es dann auch andere Segmente,
die sich da so rumtummeln auf der Maschinenprogramm-Ebene, etwa Gemeinschaftsbibliotheken,
also die Shared Libraries, die dann erst in Erscheinung treten und sozusagen Text- und
Datensegmente denn noch ergänzen. Dieser logische Adressraum und wo da jetzt praktisch diese Text-
und Datensegmente oder diese Shared Libraries denn abgebildet werden als Segment, als logische
Segmente, das wird durch das sogenannte Adressraummodell des Betriebssystems halt vorgegeben. Das ist also
nicht etwa durch die Hardware vorgeschrieben. Da hat Linux ein anderes Modell als Mac OS, als Windows.
Das ist also im Betriebssystem dann letztendlich definiert und da würde das Betriebssystem festlegen,
wie man dann unter Zuhilfenahme entsprechender Hardware, nämlich der Memory-Management-Unit,
diesen logischen Adressraum und die darin befindlichen logischen Segmente abbildet auf
die entsprechenden physisch zur Verfügung stehenden Objekte. Und da kann dann praktisch
Presenters
Zugänglich über
Offener Zugang
Dauer
00:24:14 Min
Aufnahmedatum
2020-12-21
Hochgeladen am
2020-12-22 01:28:43
Sprache
de-DE