2016-06-28 26 views
0

unterbrochen ist, wie wir wissen, ARM hat einige Register überhöht wie sp und lr. Mit anderen Worten, während in irq Modus sp_usr (und lr_usr) unsichtbar ist, das heißt, beschattet von sp_irq. Also, meine Frage ist, wie der Interrupt-Handler speichert sp_usr. Einige Leute denken vielleicht, dass dies unnötig ist, weil sp_usr automatisch während der Behandlung des Interrupts unverändert bleibt, da es unsichtbar und nicht zugänglich in irq Modus ist. Dies ist jedoch nicht immer der Fall. Stellen Sie sich das folgende Szenario vor:auf ARM, wie die speichern

a) Thread A wird in Benutzerbereich ausgeführt.

b) Ein externer Interrupt tritt auf.

c) Der Handler läuft und stellt fest, dass Thread B, der eine höhere Priorität hat, nun die Ressource hat, auf die er gewartet hat, und entschließt sich, die Zeit neu zu berechnen.

d) Speichert den Kontext Thema A. Nun Gewinde B läuft, zuerst in SVC Modus, dann zurück in Benutzer Modus. Dies ist nur der Moment, wenn der Wert von sp_usr by thread B. außer Kraft gesetzt wird

e) Thema B etwas wie Schlaf nennt. Thread A wird von dem Punkt aus fortgesetzt, an dem er unterbrochen wurde.

Also, wenn sp_usr nicht gespeichert wurde, wenn Thread A unterbrochen wurde, wie würde Thread A seinen Kontext wiederherstellen?

+0

Offensichtlich müssen SP & LR gespeichert und später wiederhergestellt werden. Sie sollten gespeichert werden, wenn sich die CPU im Benutzer- oder Systemmodus befindet. –

+0

Sie sollten klären, welche ARM-Architekturversion Sie betrachten, dies kann sich auf das Detail der Antwort auswirken. –

+0

@Sean Houlihane Ich benutze ARMv7 Cortex-A9 – xiaokaoy

Antwort

1

sp_usr muss vor dem Kontextwechsel zu Thread B gespeichert werden, dann, wenn Thread B in den Ruhezustand versetzt wird und der Kontext von Thread A wiederhergestellt wird. Wenn sp_usr für Thread A nicht gespeichert wird, ist es verloren. Im Allgemeinen wird in einem Kontextwechsel der aktuelle sp im Steuerblock für aktuelle Aufgaben gespeichert. Wenn die neue Aufgabe ausgewählt wird, wird die SP aus dem neuen Aufgabensteuerblock wiederhergestellt.

Siehe dieses Thema anschauen: ARM. Access user R13 and R14 from Supervisor mode

Eine Menge davon abhängt, auf der ARM-Architektur Sie verwenden!