Autor Thema: Fragen zur segmentierung  (Gelesen 4971 mal)

noob

  • Beiträge: 63
    • Profil anzeigen
Gespeichert
« am: 08. February 2007, 10:39 »
Hi!

ich moechte nun die segmentierung(und in weiterem sinne auch das laden von binarys) implementieren. ich hab auch schon die globale segment tabelle angelegt nun hab ich aber ein paar fragen zur addressierung:

1.) ich schreibe mein os in C und moechte nun zuerst ein segment fuer mein programm anlegen und dann eben mein programm dorthin laden. wie kann ich nun in C z.B das 5te segment am offset 0x1234 ansprechen(mit nem pointer.... aber wie komm ich auf die addresse)?

2.) ist mir das mit dem datensegment noch nicht so klar... waenn ich mein programm lade lade ich sie natuerlich ins cs aber wie sieht das mit dem datensegment aus wie weis ich in welchen datensegment ich die sachen laden muss btw was ich dorthin laden muss?

waer nett waenn ihr mir da helfen koenntet!!

mfg noob alias hazelnoot

Korona

  • Beiträge: 94
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 08. February 2007, 15:15 »
Der GCC und die meisten anderen C Compiler arbeiten ohne Segmente. (d.h. sie verändern die Segmentregister nicht und erwarten ein flaches Speichermodell: Alle Segmentregister haben die selbe Basis.)

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 08. February 2007, 18:17 »
Du kannst Segmentierung benutzen, musst das aber nicht. Die meisten i386-Betriebssysteme benutzen ein flaches Speichermodell, d.h. ein einziges 4G-Segment, wo sich -alles- drin tummelt (im 32-Bit-Modus).

Vorteil: keine Segmentierung
Nachteil: du musst dich um die Adressraumbelegung selbst kümmern und kannst nur den Offset-adressierbaren Adressraum verwenden (d.h. 4G bei 32 Bit, 64K bei 16 Bit)

Der Adressraum fängt in jedem Segment bei 0h an und steigt dann bis zur Segmentgröße an. Wenn du keine Segmentierung verwendest, liegen die einzelnen Teile "irgendwo" im Speicher, auch logisch gesehen.

Was ich damit sagen will: Wenn du Code, Daten und Stack deines Programms in verschiedenen Segmenten lagern möchtest, kannst du das tun, musst es aber nicht. Ein flaches Modell ist imho einfacher zu implementieren (sofern Paging vorhanden ist).
Segmentierung brauchst du, wenn du den 64 GB-Adressraum des PPro verwenden willst. Ob 64 Bit-Prozessoren auch ein flaches Speichermodell kennen, weiß ich nicht.

Gruß,
Svenska

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 08. February 2007, 20:44 »
Ob 64 Bit-Prozessoren auch ein flaches Speichermodell kennen, weiß ich nicht.
x86-64 kennt keine wirkliche Segmentierung mehr, man muss ein flaches Speichermodell verwenden. Es wird nur noch fd & gs als segment mit basis != 0, limit wird trotzallem überall ignoriert.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen