Was ist mit Segmenten innerhalb der globalen Deskriptorentabelle gemeint?



  • Habe ich es richtig verstanden? Über einen Segmentregister wird auf eine Deskriptorentabelle verwiesen. Und in der Deskriptorentabelle ist auch von Segmenten die Rede. Damit sind aber sicher nicht die Segmentregister gemeint, sondern wahrscheinlich Segmente des Arbeitsspeichers? Liege ich damit richtig?

    https://www.lowlevel.eu/wiki/Global_Descriptor_Table#Struktur



  • Wenn wir mal vom 32+ Bit Protected-Mode ausgehen...

    Ein "Segment" ist ein Bereich im Speicher.

    Ein "Deskriptor" beschreibt ein Segment (wo es startet, wie lange es ist, ob man reinschreiben oder nur lesen darf etc.; describe = beschreiben).

    Die Deskriptortabelle ist ein Array aus Deskriptoren.

    Ein Selektor ist vereinfacht gesagt ein Index in die Deskriptortabelle, er wählt also sozusagen einen Deskriptor aus (select = auswählen).

    Und ein Segmentregister ist letztlich ein Register in dem man Selektoren speichern kann, so dass die CPU auch weiss was sie damit anfangen soll. Also dass sie anhand des Selektors in der Deskriptortabelle nachschlagen muss, den entsprechenden Deskriptor laden und für alle Speicherzugriffe verwenden die "über" das jeweilige Segmentregister gemacht werden.


    D.h. das Wort "Segment" steht hier schon immer für das selbe Konzept. Nur speichert ein Segmentregister natürlich kein Segment. Aber es speichert den Selektor über den der Deskriptor gefunden wird der dann wiederrum das Segment beschreibt.



  • @hustbaer Danke erstmal 🙂 Will heißen, ich lege einen Deskriptor an, der einem bestimmten Speicherbereich (Segment) einen gewissen Zugriff erstattet. Dann nehme ich den Deskriptor in die Deskriptorentabelle auf. Wenn ich über einen Segmentregister auf den von mir erstellten Deskriptor verweise (Selektor) und später im Ring 3 über diesen Segmentregister auf die Speicherstelle zugreife, die ich zuvor im Deskriptor festgelegt habe, dann habe ich auf diesen Speicherbereich nur die von mir beschriebenen Zugriffsberechtigungen.



  • Ja vermutlich könnte man das so sagen. Wobei das mit Zugriffsberechtigungen etc. normalerweise nicht mehr über die Deskriptoren gemacht wird. Ebenso macht man üblicherweise auch keine unterschiedlichen Segmente mehr. Ausser vielleicht für so Sachen wie den Thread-Information-Block.

    Aktuelle OSe machen ein schickes Segment das den kompletten Adressraum beschreibt und alles erlaubt, und machen dann die diversen Beschränkungen über den Page-Table.



  • @hustbaer Mal aus Interesse, woher weißt du das jetzt, bzw. warum kannst du dich da so gut dran erinnern? Hast du damit beruflich zu tun?
    Bei mir ist es schon 15-20 Jahre her, dass ich mich damit befasst hatte, und ich glaube, du bist noch etwas älter ^^



  • @Mechanics
    Beruflich hab ich damit kaum zu tun. Maximal dass ich hin und wieder Assemblercode angucke (meist disassembliertes Zeugs), und da kann es dann interessant sein zu wissen was ein Zugriff über FS bzw. GS bedeutet. Wobei ich vermutlich auch ohne dieses Wissen gut arbeiten könnte, ich mach ja kein Reverse-Engineering oder sowas.

    So Zeuch interessiert mich halt 🙂 Also wie so ein Betriebssystem eigentlich tut um Speicher, Prozesse und Threads zu verwalten. Gibt aber genug was ich in dem Bereich nicht weiss, weil das Verhältnis Neugierde <-> Aufwand nicht gepasst hat.


Anmelden zum Antworten