Welcher Architekturzustand wird beim Kontextwechsel gespeichert?

0

Welcher Architekturzustand wird beim Kontextwechsel gespeichert? Soweit ich weiß, wird Folgendes gespeichert

Registersatz inkl. PC-Zähler TLB (Wenn er nicht geleert wird ...) Was noch? Erinnerung? (enthält Stack, Heap, Daten) ...? Ist es nur in der Erinnerung geblieben?

Mike Wang
quelle

Antworten:

0

Speicher- / Stapelspeicher sind Teil des Adressraums des Prozesses, sodass sie nicht gespeichert werden müssen. Ja, sie können dort gelassen werden. Jeder Prozess hätte eine eigene Startadresse im physischen Speicher.

Prozesse scheinen aus benutzerfreundlicher Sicht ihren eigenen vollen Speicherbereich ab 0x00000000 zu nutzen (einige Betriebssysteme fangen Zugriffe auf der ersten Seite 0x00000000-0x00000fff ab, um Nullzeiger abzufangen? - für diese ist der effektive Start jedoch 0x00001000) Die MMU ordnet den Speicher hinter den Kulissen mit Seitentabellen und all den guten Dingen neu zu. Auf diese Weise kann einem Userland-Prozess Speicher zugewiesen werden, ohne dass der Prozess etwas davon weiß oder sich darum kümmert, abgesehen von der Gesamtspeichermenge (der Obergrenze), auf die er zugreifen kann.

Der Stapelzeiger muss jedoch gespeichert werden, dies ist jedoch Teil der Register.

LawrenceC
quelle
0

Hängt vom Prozessor ab und davon, was für die Darstellung des Taskstatus erforderlich ist. Kommt auch zu einem gewissen Grad auf das Betriebssystem an.

Im alten Original (Pre-Virtual-Memory) Unix würden die Register an einem festen Ort im Speicher abgelegt, dann der gesamte Anwenderspeicher auf die Festplatte geschrieben und ein neues Anwenderspeicher-Image eingelesen Überspringen des Einleseschritts.) Dies wurde sehr schnell durch ein virtuelles Auslagerungsschema ersetzt, als CPUs mit TLBs verfügbar wurden ("Berkley Unix").

In einer Stapelarchitektur im Burroughs-Stil müssen (theoretisch) nur der Stapelzeiger und die Task-ID ausgetauscht werden. Die Speicheradressierung (im Original) erfolgt über "Funktionen" und "Segmente", im Gegensatz zur Verwendung eines TLB.

Ältere Registerarchitekturen mit TLB-basiertem virtuellem Speicher erforderten, dass die TLBs (und manchmal der Cache) beim Auslagern mindestens ungültig gemacht wurden, zusätzlich zum Auslagern der Programmregister (einschließlich IAR, Bedingungscode usw.). Neuere TLB-basierte Architekturen können dieses Problem auf verschiedene Weise lösen, indem sie das Leeren vermeiden, sodass bei einem relativ schnellen Zurückschalten nicht alles neu geladen werden muss. (Aus diesem Grund erhalten Aufgaben auf Multiprozessorsystemen häufig eine "Affinität" eines bestimmten Prozessors, um das Nachladen von TLB / Cache zu minimieren.)

Daniel R Hicks
quelle