78 - 6.3.8 Adressbindung: Anhang zur Segmentierung [ID:18551]
50 von 307 angezeigt

Nun, ich möchte jetzt hier mit der Segmentierung und den verschiedenen Varianten, die es zur

der Segmentierung bei der Adressumsetzung gibt, noch mal einen Aspekt aufgreifen,

der zwar für die heutige Hardware, die Standard Hardware zumindest, nicht mehr so eine große

Bedeutung besitzt wie früher, aber dennoch ein wesentliches Konzept der Adressumsetzung,

unterstützt von Betriebssystemen in Zusammenhang mit entsprechenden Memory Management Units

bedeutet. Das ist die Segmentierung und die verschiedenen Varianten davon. Nun Segmentierung

hier mal dargestellt auf Basis einer typischerweise einstufigen Segmenttabelle, wobei die

Segmenttabelle als ein dynamisches Feld ausgelegt ist. Das ist schon mal ein großer Unterschied zur

Seitenadressierung, wo die Seitenadressierung Seitentabellen verwenden, die eigentlich immer

statische Felder denn repräsentieren. Nun diese Segmenttabelle hat an sich von Idee her folgt

die dem gleichen Ansatz wie bei der Seitenadressierung. Hier sind Diskriptoren drin gespeichert,

die letztendlich dazu beitragen eine Umwandlung von einer logischen virtuellen Adresse zu einer

entsprechenden realen Adresse zu machen. Nun man nennt diese Einträge hier die Segmentdiskriptoren,

weil der Diskriptor ein Segment beschreibt, keine Seite mehr und die Informationen, die Attribute,

die in diesen Segmentdiskriptoren enthalten sind, sind durchaus ähnlich zu den der

Segmentdiskriptoren. Man kann grob sagen, dass hier eine Komponente hinzukommt, nämlich die

Länge eines Segments. Der große Unterschied zwischen Segmentierung und Seitenadressierung

ist ja die, dass bei der Seitenadressierung die Objekte Seiten und Seitenrahmen immer

alle gleich groß sind, eine feste von der Hardware vorgegebenen Größe, wohingegen bei

der Segmentierung die Segmente sehr wohl unterschiedlich groß sein kann. Und wenn man mal

von dem Standardfall davon ausgeht, dass Segmente beidfolgen letztendlich repräsentieren,

dann würde die Längeninformation, die jetzt hier in diesem Teil dargestellt für in einem

Segmentdiskriptor gespeichert ist, einfach angeben, wie in welchen Bereichen sich praktisch

die Adresse innerhalb eines solchen Segments denn bewegen darf. Die Segmentname, wie hier

dargestellt, als eine wesentliche Komponente der logischen virtuellen Adresse ist ein Indexwert,

wird als Indexnummer halt verstanden, indiziert in die Segmenttabelle und wird dann also einen

Segmentdiskriptor auswählen, der genau zu diesem Segment S denn passt. Dieser Indexwert wird in

einem bestimmten Bereich liegen, der durch einen bestimmten Limitwert begrenzt ist. Die Segmenttabelle

hat für gewöhnlich eine dynamische Adresse im Hauptspeicher und die Hardware überprüft dann

letztendlich auch, ob denn dieser Indexwert, dieser Wert S, den man hier hat, gültig ist,

also ob der praktisch in dem Bereich 0 bis Limit denn sozusagen liegen würde, also ob dieser Wert S

hier einen gültigen, überhaupt einen gültigen Eintrag, einen Segmentdiskriptor in dieser

Segmenttabelle halt adressiert. Wenn ein Indexfehler auftritt, das wird, das ist eine

Grenzwertüberprüfung, wie eine Indexüberprüfung bei normalen Array Bounce Checks, dann wird eine

Ausnahmesituation ausgelöst. Im Gegensatz zur Seitentabelle, wo man so eine Art von,

sagen wir mal ungültigen Einträgen dadurch identifiziert, indem man hier ungültige Einträge

wirklich vornimmt in der Tabelle, weil die Tabelle ja immer statisch gleich groß ist,

hat man das hier nicht. Man wird die Segmenttabelle immer genau so auslegen, dass man hier genau die

Anzahl von Segmentdiskriptoren drin hat, die man für den logischen virtuellen Adressraum eines

Prozesses dann letztendlich benötigt. Dieser Wert von S, den man hat, das heißt die Anzahl

der Segmente, die man jetzt hier pro Adressraum definieren kann, ist hardwareabhängig, aber eben

auch vom Betriebssystem abhängig. Es kann ziemlich großer Wert sein, also 16 Bit, 20 Bit Werte,

Hardware, die diese Größenordnung haben, waren keine Seltenheit. Das heißt also, man kann hier

auf einer sehr durchaus feingranularen Ebene seinen Prozessadressraum oder letztendlich auch

das Maschinenprogramm in Segmente der unterschiedlichsten Art aufteilen, in

Kurzsegmenten, Datensegmenten, Stapelsegmenten letztendlich und die dann letztendlich über

diesen Wertebereich von S, den man da halt hatte, noch entsprechend eindeutig identifizieren. Nun

vielleicht der der Abbildungsvorgang, wie er denn jetzt wirklich geschieht. Also ich sagte ja schon,

der S-Bereich ist ein Index in diese Segmenttabelle, um dann halt ein Segmentdiskriptor zu wählen.

Hier wird jetzt zunächst der Indexbau, der einen Bounce-Check durchgeführt, ob die Adresse,

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:31:35 Min

Aufnahmedatum

2020-06-24

Hochgeladen am

2020-06-24 18:46:36

Sprache

de-DE

Tags

module programmstruktur Variablen Datentypen Preprozessor Gültigkeit
Einbetten
Wordpress FAU Plugin
iFrame
Teilen