ARM-Modi: Benutzer und System

8

Können Sie erklären, wie der ARM-Modus im Falle einer Systemanrufbehandlung geändert wird? Ich habe gehört, dass der Wechsel des ARM-Modus nur im privilegierten Modus erfolgen kann, aber im Falle einer Systemanrufbehandlung, während sich der ARM im Benutzermodus befindet (was ein nicht privilegierter Modus ist), wie ändert sich der ARM-Modus?

Kann jemand den gesamten Aktionsablauf für den Fall des Benutzermodus erklären, und auch allgemeiner die Handhabung des Systemaufrufs (insbesondere wie sich der ARM-Modus ändert)?

Vielen Dank im Voraus.

    
ManishB 20.11.2011, 05:12
quelle

5 Antworten

10

Bei Systemaufrufen auf ARM bewirkt der Systemaufruf normalerweise, dass eine Anweisung SWI ausgeführt wird. Immer wenn der Prozessor einen Befehl SWI (Software-Interrupt) ausführt, wechselt er in den Modus SVC , der privilegiert ist, und springt zum Ausnahmeoperator SWI . Der SWI -Handler betrachtet dann die Ursache des Interrupts (eingebettet in die Anweisung) und tut dann, was auch immer der OS-Programmierer entschieden hat. Die anderen Ausnahmen - Reset, undefinierter Befehl, Prefetch-Abbruch, Datenabbruch, Interrupt und schneller Interrupt - bewirken auch, dass der Prozessor in privilegierte Modi eintritt.

Wie die Dateiverwaltung funktioniert, hängt davon ab, wer Ihr Betriebssystem geschrieben hat - ARM-spezifisch ist das überhaupt nicht.

    
Carl Norum 20.11.2011 05:16
quelle
5

Sie müssen eine Kopie des ARM ARM (Architectural Reference Manual) erhalten.

Ссылка - & gt; ARM Architektur - & gt; Referenzhandbücher - & gt; ARMv5 Architectural Reference Manual und laden Sie dann die PDF herunter.

Früher gab es einen einzigen ARM-ARM für die ARM-Welt, aber es gibt zu viele Kerne und es begann zu divergieren, sodass sie die alte als ARMv5-ARM abtrennten und neue Architektur-Referenzhandbücher für jede der großen ARM-Prozessorfamilien erstellten.

Im Kapitel "Programmiermodelle" werden die Modi erläutert. Sie können festlegen, dass Sie zwischen den Modi außer dem Benutzer frei wechseln können. Der ARM-Startup-Code wird häufig eine Reihe von Modusänderungen durchlaufen, damit die Stack-Pointer usw. konfiguriert werden können. Wechseln Sie dann bei Bedarf zurück in den Systemmodus oder den Benutzermodus.

Sehen Sie sich in diesem Kapitel den Abschnitt "Ausnahmen" an, in dem die Ausnahmen und der Modus beschrieben werden, in den der Prozessor für jede Ausnahme wechselt.

Die Software-Interrupt-Ausnahme, die auftritt, wenn eine SWI-Anweisung ausgeführt wird, ist eine Möglichkeit, Systemaufrufe zu implementieren. Der Prozessor wird in den Supervisor-Modus versetzt und wechselt im Daumenmodus in den Arm-Modus.

Es muss natürlich Code zur Unterstützung dieses Ausnahmebehandlers geben. Sie müssen überprüfen, ob das Betriebssystem überhaupt ausgeführt wird, was unterstützt wird und wie die Aufrufkonvention lautet usw.

Nicht alle ARM-Prozessoren funktionieren auf diese Weise. Der Cortex-M (ARMv7-M) hat nicht die gleichen Modi und die gleiche Ausnahmetabelle, etc. Wie zu jeder Zeit, die Sie einen ARM (auf dieser Ebene) verwenden, müssen Sie den ARM ARM für die Familie, die Sie verwenden und Sie müssen das TRM (Techincal Reference Manual) für den / die von Ihnen verwendeten Kern (e) erhalten, idealerweise die genaue Revision, auch wenn ARM das TRM als durch eine neuere Version ersetzt hat, die der Chiphersteller gekauft hat und eine bestimmte rev verwendet des Kerns und es kann genug Unterschiede zwischen den Umdrehungen geben, dass Sie das korrekte Handbuch wollen.

    
old_timer 21.11.2011 02:08
quelle
3

Wenn eine SVC-Anweisung vom PC erkannt wird, tritt das folgende Verhalten auf:

  • Der aktuelle Status (CPSR) wird gespeichert (an den Supervisor SPSR)
  • Der Modus wird in den Supervisormodus
  • umgeschaltet
  • Normale (IRQ) Interrupts sind deaktiviert
  • ARM-Modus wird eingegeben (falls nicht bereits verwendet)
  • Die Adresse der folgenden Anweisung (die Rücksendeadresse) wird im Link-Register (R14) gespeichert - es ist dies zu beachten das Link-Register, das zum Supervisor-Modus
  • gehört
  • Der PC wird geändert, um zur Adresse 0x00000008
  • zu springen

Ein Ausnahmevektor (nur ein Verzweigungsbefehl) sollte sich an der Adresse 0x0000008 befinden, die das Programm in einen anderen Codebereich verzweigt, der verwendet wird, um zu bestimmen, welcher Supervisoraufruf stattgefunden hat.

Das Bestimmen des Supervisor-Aufrufs wird normalerweise durch Laden des SVC-Befehls in ein Register (durch Versetzen des LR um ein Wort - da der LR immer noch auf den Befehl neben dem Supervisor-Aufruf zeigt), Löschen des letzten Bit erreicht 8 Bits und verwendet den Wert in den verbleibenden 24 Bits des Registers, um einen Offset in einer Sprungtabelle zu berechnen, um zu dem entsprechenden SVC-Code zu verzweigen.

Wenn der Supervisor-Aufrufcode zur Benutzeranwendung zurückkehren möchte, muss der Prozessor wieder in den Benutzermodus wechseln und zu der im LR enthaltenen Adresse zurückkehren (die nur im Supervisor-Modus verfügbar ist, da bestimmte -Register vorhanden sind) sind für beide Modi banked ). Dieses Problem wird mithilfe der MOVS-Anweisung wie folgt behoben:

(Betrachten Sie dies auch als Erklärung, wie Sie den Modus ändern können)

%Vor%

Die Anweisungen MRS und MSR werden verwendet, um Inhalt zwischen einem ARM-Register und dem CPSR oder SPSR zu übertragen.

Der MOVS-Befehl ist ein spezieller Befehl, der als Standard-MOV-Befehl arbeitet, aber auch den CPSR beim Verzweigen auf den SPSR setzt. Dies ermöglicht dem Prozessor, sich zurückzuverzweigen (da wir den LR in den PC bewegen) und den Modus in den durch den SPSR spezifizierten Modus zu ändern.

    
Jonathon Dilworth 12.02.2014 22:31
quelle
1

"Ich habe gehört, dass der ARM-Modus nur im privilegierten Modus geändert werden kann". Du bist teilweise hier richtig. Mit Teilweise meine ich, dass das Steuerfeld des CPSR-Registers in den privilegierten Modi nur in dem nicht privilegierten Modus (d. H. Benutzermodus) manuell modifiziert werden kann (manuell modifiziert durch Code). Wenn ein Systemaufruf im Benutzermodus stattfindet, geschieht dies aufgrund des SWI-Befehls. Ein SWI-Befehl hat einen eingebauten Mechanismus, um den Modus in den Supervisor-Modus zu ändern.

Zum Schluss gibt es zwei Möglichkeiten, den Modus zu ändern:

1) Explizit durch Code. Nur in einem privilegierten Modus erlaubt. 2) Implizit durch IRQ, FIQ, SWI, RESET, undefinierte Anweisung aufgetreten, Daten abbrechen, Prefetch abbrechen. Dies ist in allen Modi erlaubt.

    
Adi s 18.08.2014 17:06
quelle
0

Ich zitiere aus der ARM-Dokumentation, die hier verfügbar ist:

Ссылка

  

Wenn eine Ausnahme generiert wird, führt der Prozessor Folgendes aus   Aktionen:

     
  1. Kopiert den CPSR in den entsprechenden SPSR. Dies speichert den aktuellen Modus, die Unterbrechungsmaske und die Zustandsflags.
  2.   
  3. Schaltet den Status automatisch um, wenn der aktuelle Status nicht mit dem Anweisungssatz übereinstimmt, der in der Ausnahmevektortabelle verwendet wird.
  4.   
  5. Ändert die entsprechenden CPSR-Modus-Bits zu:   
    • Wechseln Sie in den entsprechenden Modus und ordnen Sie die entsprechenden ausgebuchten Register für diesen Modus zu.
    •   
    • Interrupts deaktivieren. IRQs sind deaktiviert, wenn eine Ausnahme auftritt. FIQs werden beim Auftreten einer FIQ und beim Zurücksetzen deaktiviert.
    •   
  6.   
  7. Setzt die passende LR auf die Absenderadresse.
  8.   
  9. Setzt den PC auf die Vektoradresse für die Ausnahme.
  10.   

Dabei steht CPSR für das aktuelle Programmstatusregister und SPSR für das gespeicherte Programmstatusregister, mit dem der Status des unterbrochenen Prozesses wiederhergestellt wird. Wie in Punkt 3 zu sehen ist, ist die Prozessorschaltung daher so ausgelegt, dass die Hardware selbst den Modus ändert, wenn der Benutzermodus eine Supervisor-Aufrufanweisung ausführt.

    
gjain 30.07.2013 15:00
quelle

Tags und Links