Welcher Architekturzustand wird beim Kontextwechsel gespeichert?

811
Mike Wang

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

Registersatz mit PC-Zähler TLB (Wenn nicht geleert ...) was sonst? Erinnerung? (enthält Stapel, Haufen, Daten) ...? Ist es nur noch in Erinnerung?

0

2 Antworten auf die Frage

0
LawrenceC

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

Prozesse scheinen aus der Sicht des Benutzers aus ihren eigenen vollen Speicherbereich ab 0x00000000 zu verwenden (einige Betriebssysteme lösen Zugriffe auf der ersten Seite 0x00000000-0x00000fff ab, um Nullzeiger zu fangen - für diese ist der effektive Start 0x00001000) Die MMU ordnet den Speicher hinter den Kulissen mit Seitentabellen und all dem guten Zeug neu zu. Auf diese Weise kann Speicher einem Benutzerland-Prozess zugewiesen werden, ohne dass der Prozess nur die gesamte Speichermenge (die Obergrenze), auf die er zugreifen kann, kennt oder sich um ihn kümmert.

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

0
Daniel R Hicks

Abhängig vom Prozessor und durch Folgerung, was für die Darstellung des Taskstatus erforderlich ist. Hängt auch zu einem gewissen Grad vom Betriebssystem ab.

In der alten Unix-Version (vorvirtuelles Gedächtnis) wurden die Register an einem festen Ort im Arbeitsspeicher gespeichert, der gesamte Benutzerspeicher wurde auf die Festplatte geschrieben und ein neues Benutzerspeicherabbild wurde eingelesen Überspringen des "Read it in" -Schritts.) Dies wurde sehr schnell durch ein virtuelles Swap-Schema ersetzt, als CPUs mit TLBs verfügbar wurden ("Berkley Unix").

In einer Burroughs-Stilarchitektur müssen (theoretisch) nur der Stapelzeiger und die Task-ID ausgetauscht werden. Die Speicheradressierung (im Original) erfolgt über "Fähigkeiten" und "Segmente" gegenüber einem TLB.

Bei älteren Registerarchitekturen mit TLB-basiertem virtuellem Speicher mussten die TLBs (und manchmal auch der Cache-Speicher) beim Swap mindestens ungültig gemacht werden, zusätzlich zum Auslagern der Programmregister (einschließlich IAR, Bedingungscode usw.). Neuere TLB-basierte Architekturen bieten verschiedene Möglichkeiten, um das Problem zu lösen, sodass ein recht schnelles Zurückschalten nicht alles neu laden muss. (Aus diesem Grund erhalten Aufgaben auf Multiprozessorsystemen häufig eine "Affinität" eines bestimmten Prozessors, um das erneute Laden von TLB / Cache zu minimieren.)