Autor Thema: paging oder segmentation?  (Gelesen 8529 mal)

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« am: 03. August 2005, 21:35 »
ich wollte mal fragen wer von euch welches benutzt und vor allem weshalb?

damit dieser thread nicht verschoben wird noch ne frage dazu:
wenn ich segmentierung nehmen möchte und nun in einer datei 2 data segmente habe, wie wird dass ganze gemanaged? sollte ich ein eintrag in der ldt für beide zusammen machen, oder sie trennen? wenn ich sie trenne, wie kann gcc wissen, was er inst ds laden muss? mit 2 data segmenten meine ich data und bss, oder auch rodata

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 03. August 2005, 21:41 »
Mit GCC lässt sich Segmentierung nicht so gut realisieren.
GCC verändert DS überhaupt nicht, da er davon ausgeht in einem flachen Speichermodell zu arbeiten.

ausserdem musst du beim Linken aufpassen, wenn Data und Codesegment unterschiedliche Basisaddressen haben.

Segmentation eignet sich meiner Meinung nach nicht so gut wie Paging um eine virtuellen Addressraum zu ermöglichen.
Der physikalische Speicher eines Programms muss bei der Segmentierung immer aneinander liegen, was Sachen wie allocieren von Speicher schwerer macht.

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #2 am: 04. August 2005, 10:05 »
nun ist die frage wieso so viele systeme segmentation nutzen? bsw. geekos;

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 04. August 2005, 13:34 »
Das in jedem OS für x86 Segmentierung benutzt wird liegt größtenteils daran, dass man auf x86 Prozessoren die Segmentierung nicht ausschalten kann ;-). Aber mal Spaß bei Seite, es kommt doch drauf an was man damit macht. Paging wird ja benutzt um jedem Programm einen eigenen virtuellen Speicherbereich zu verschaffen und so die einzelnen Programme voneinander und vom Kernel abzuschotten. Dazu "hebelt" man die Segmentierung aus indem man alle Segmente über den gesamten Adressraum setzt, und nur das Minimum an Segmenten, sprich Kernel-Code, Kernel-Daten, User-Code und User-Daten setzt. Wenn man jedoch aus irgendwelchen Gründen kein Paging implementieren möchte, kann man die virtuellen Adressbereiche und die damit verbundene Sicherheit auch mit Segmentierung simulieren, indem man jedem Programm ein Code und Daten Segment gibt. Diese zeigen jedoch für jedes Programm auf denselben Speicherabschnitt. Also findet aus Sicht des Programmes garkeine Segmentierung statt. Aus Sicht des Kernels müssen halt nur beim Taskwechsel andere Segmente geladen werden und es ist ein wenig mehr Verwaltungsaufwand für die Segmente nötig.
Bei der richtigen Segmentierung teilst du hingegen dein Programm in mehrere Segmente auf, mit unterschiedlichen Segmentbasisadressen und -gnenzen, und das macht heut wirklich fast keiner mehr und das wird auch nicht vom GCC unterstützt, liegt wohl auch daran dass dies fast nur von x86 Prozzis unterstützt wird.
Agieren statt Konsumieren!

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #4 am: 04. August 2005, 13:38 »
(muss immer das letzte wort haben  :wink: )

naja, dass es kaum genutzt wird ist klar, aber in den meisten tutorials über memory management erklärt der autor dass er segmentation lieber nutzt, deshalb die frage(n)

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 04. August 2005, 13:41 »
Leider sagen ja auch viele das sie mit Paging nicht zurecht kommen :(, daher rührt warscheinlich auch diese Meinung ;-)
Agieren statt Konsumieren!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 04. August 2005, 14:09 »
wenn ich die amd64 manuals richtig interpretiere, wird segmentation bei 64bittern (im 64 bit modus) nicht mehr unterstützt. paging ist also zukunftssicherer. ;)
Dieser Text wird unter jedem Beitrag angezeigt.

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 04. August 2005, 14:14 »
Ja, AMD64er haben im 64bit Modus eine ziemliche Bastard Implementation von Segmentierung intus, man muss Code und Daten Segmente festlegen, kann aber nicht bestimmen wo sie losgehen oder enden, außer bei GS, da gibt es dann sogar ein eigenes Register für die Basisadresse. Was so alles passieren kann wenn man während der Designphase zu wenig schläft ;-)
Agieren statt Konsumieren!

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #8 am: 04. August 2005, 14:38 »
haben sie keine gründe dafür genannt??? was ne verarschung :? , ...

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 04. August 2005, 14:48 »
der grund ist, dass segmentierung nicht mehr wirklich ausgenutzt wird. siehe die ganzen unix-derivate und windows. steht glaub ich nicht im manual selbst, sondern hab ich in irgendeinem artikel über die architektur mal gelesen.
Dieser Text wird unter jedem Beitrag angezeigt.

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 04. August 2005, 14:54 »
Die meisten OS benutzen wohl ein flaches Speichermodell und wenn man Paging benutzt macht es auch keinen Sinn verschiedene Segmente zu benutzen.
GS wird noch unterstützt weil Windows es benutzt.

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 04. August 2005, 15:00 »
Nein, GS wird mehr für was GAAAANZ anders verwendet. Man hat jetzt die Möglichkeit die Basisadresse des GS Segmentes mit einem Befehl (SWAPGS) zu switchen, so das man wenn man den Kernel betritt, einmal SWAPGS ausführt und GS dann sofort auf die Thread oder Prozessdaten zeigt, und der Kernel schneller und einfacher drauf zugreifen kann ....
Agieren statt Konsumieren!

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #12 am: 04. August 2005, 15:01 »
und wie machts intel?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 04. August 2005, 15:08 »
Zitat von: SSJ7Gohan
GS wird noch unterstützt weil Windows es benutzt.

Soweit ich weiss wird GS nicht genutzt, sondern FS. Das zeigt auf eine Thread-Struktur. Unter 32 Bit Windows ab 2000, wie das in bei 64 Bit Windows aussieht weiss ich nicht. Von diesen SWAPGS-Befehl hab ich zwar noch nichts gehört, aber vielleicht Microsoft. ;)

Zitat von: maumo
und wie machts intel?

Das mit der Segmentierung? Genauso wie AMD, denn Intel hat ja die Technologie von AMD lizensiert. ;)
Dieser Text wird unter jedem Beitrag angezeigt.

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 04. August 2005, 15:18 »
Warum ist der Zugriff über GS denn schneller?
Eigentlich sollte der Speicherzugriff doch davon nicht beeinflusst werden, die physikalsiche Addresse wird doch immer noch genauso aufgelöst, oder?

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 04. August 2005, 15:19 »
Der Sinn ist das man den Pointer nicht erst irgendwo suchen und aus dem Arbeitsspeicher laden muss, der Vorteil ist natürlich marginal...
Agieren statt Konsumieren!

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #16 am: 04. August 2005, 15:21 »
also wenn m$ jetzt wirklich sowas als tuning nimmt, wundert mich ganix mehr...

 

Einloggen