Codesegment und EIP
-
Hi,
ne kleine Frage zu Prozessen. Auf heutigen Betriebssystemen hat ja jeder Prozess 4 GB Adressraum. Und irgendwo im Speicher steht an einer virtuellen Adresse der Code. Nun frage ich mich: Wird heut zu tage einfach nur noch der EIP verwendet für den nächsten auszuführenden Befehl oder spielt das CS Segment eine Rolle? Also zeigt das CS Register auf die Stelle im Speicher wo Code steht und der EIP ist dann eine Art Offset? Wie läuft das auf heutigen Betriebssystemen?
-
Im 32 Bit Protected Mode könnte man zwar noch zusätzlich Segmentierung benutzen, aber man tut es in der Regel nicht. Man setzt den Anfang des Codesegments auf Adresse 0 und die Größe auf 4 gb. Daher kann man EIP schon als absolute Adresse ansehen. Im 64 Bit Modus fällt die Segmentierung aber ganz weg und RIP ist definitiv absolut.
-
Danke für die schnelle Antwort.
Das heißt also, dass man heutzutage die ganzen Segmentregister nicht mehr verwendet? Also Codesegment CS, Datensegment DS etc. Die werden also einfach nicht mehr beachtet oder auf 0 gesetzt?
-
Die Segmentregister werden schon noch benutzt, aber Segmentierung an sich nicht mehr. In den Segmentregistern befinden sich auch keine Basisadressen mehr, sondern die Nummern von Einträgen aus der Global Descriptor Table. In diesen Einträgen wird dann in der Regel als Basis 0 und Größe 4 gb angegeben (siehe http://www.lowlevel.eu/wiki/GDT#Einrichten_der_GDT) um keine Segmentierung mehr zu haben. Einzig die Zugriffsrechte werden dann noch geprüft. Im 64 Bit Modus werden dann auch die meisten Werte aus der GDT einfach ignoriert und Segmentierung ist nicht mehr möglich.
-
also bin da zwar auch noch nicht so ganz dahinter gestiegen, was es mit der gdt auf sich hat, aber die virtualisierung übernimmt eigentlich die page table, dessen adresse wird bei einem x86 dem cr3 register übergeben in dieser tabelle stehen dann die mappings virtuelle adress page => reale adress page. jeder prozess bekommt seine eigene page table. daher laufen alle rein virtuell auf dem selben adressraum der dann virtuell auf die pages im realen ram aufgeteilt wird. es gibt auch noch andere modelle, aber das ist so das gängiste.
http://de.wikipedia.org/wiki/Paging#Reales_Beispiel:_IA32-Architektur
lg lolo
-
ähm. ich seh grad sie bekommen natürlich das page directory übergeben in dem sich dann wieder ne page table befindet. das prinzip bleibt aber ähnlich da man das page directory auch als page table betrachten kann (so hab ichs mir zumindest "falsch gemerkt"
).
lg lolo
-
baumkopfholzfaust schrieb:
Hi,
ne kleine Frage zu Prozessen. Auf heutigen Betriebssystemen hat ja jeder Prozess 4 GB Adressraum.Falsch geraten.
baumkopfholzfaust schrieb:
Und irgendwo im Speicher steht an einer virtuellen Adresse der Code.
Ja, und sogar die physikalischen Adressen treiben sich hier irgendwo herum. Ja, so ein Speicher ist schon ein Wunderwerk der Technik.;)
baumkopfholzfaust schrieb:
Nun frage ich mich: Wird heut zu tage einfach nur noch der EIP verwendet für den nächsten auszuführenden Befehl oder spielt das CS Segment eine Rolle? Also zeigt das CS Register auf die Stelle im Speicher wo Code steht und der EIP ist dann eine Art Offset? Wie läuft das auf heutigen Betriebssystemen?
Bei heutigen Betriebsystemen spielen alle möglichen Betriebsmodi/Speicheraddressierungsmöglichkeiten des Prozessors eine Rolle. Beim PC wird z.B. vom Real Mode in den Protected Mode umgeschaltet, und von dort aus in den Long Mode inclusive Addressierungsmodi zurück in die 32 Bit-Welt...
-
@nachtfeuer: Selten so ein überflüssiges Posting gelesen.