ARM-Modi: den User-und System
Können Sie erklären, wie die ARM-Modus geändert im Falle einer call-handling-system?
Ich habe gehört, ARM-Modus ändern, kann passieren, nur im privilegierten Modus, aber im Falle eines system-call-handling, während der ARM ist im Benutzer-Modus (die ein nicht-privilegierter Modus), wie sieht der ARM-Modus ändern?
Kann jemand erklären, die ganze Aktion flow für die Benutzer-Modus-Fall, und auch allgemein das system für Anruf-handling (vor allem, wie sich die ARM-Modus ändern)?
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Falle von Systemaufrufen, die auf der ARM, der Regel, die den Systemaufruf verursacht einen
SWI
Anweisung ausgeführt werden. Wenn der Prozessor führt eineSWI
(software-interrupt) Betriebsanleitung, geht es inSVC
- Modus, der privilegiert ist, und springt zu derSWI
exception-handler. DieSWI
handler dann sieht die Ursache für den interrupt (eingebettet in der Anleitung) und dann tut, was die OS-Programmierer beschlossen, es tun sollten. Die anderen Ausnahmen - reset, undefined instruction prefetch abort data abort, interrupt-und schnelle interrupt - alle auch dazu, dass der Prozessor zu geben privilegierten Modus.Wie file-handling funktioniert ist ganz oben wer schrieb Ihr Betriebssystem - es gibt nichts, ARM-spezifische über dass alle.
SWI syscall_number
.linux/arch/arm/kernel/entry*.S
richtig, den übergang von der system-Benutzer-Modus ist nichts anderes als eine verherrlichten Kontext wechseln.swi __NR_restart_syscall
.Die Sie brauchen, um eine Kopie der ARM ARM (Architektur-Referenz-Handbuch).
http://infocenter.arm.com -> ARM-Architektur -> Referenz-Handbücher -> ARMv5 Architektur-Referenz-Handbuch dann als pdf herunterzuladen.
Verwendet werden, um ein single-ARM-ARM-ARM-Welt, aber es sind zu viele Kerne und beginnen zu divergieren, so dass Sie split aus dem alten als ARMv5 ARM und machte neue Architektonische Referenz-Handbücher für jede der großen ARM-Prozessor-Familien.
In der Programmierer-Modell Kapitel geht es um die Modi, Sie sagt, dass Sie ändern können frei unter den anderen Modi als Benutzer. ARM startup code wird oft durch eine Reihe von mode ändert sich so, dass der stack-Pointer, usw. konfiguriert werden können. Dann, als benötigt, gehen Sie zurück zum System-Modus oder User-Modus.
Im selben Kapitel Blick auf den Abschnitt "Ausnahmen", dies beschreibt die Ausnahmen, und in welchem Modus der Prozessor schaltet für jede Ausnahme.
Den Software-interrupt, Ausnahme, was geschieht, wenn ein SWI-Befehl ausgeführt wird, ist ein Weg für die Implementierung von system calls. Der Prozessor in Supervisor-Modus und wenn im thumb-Modus-Schalter auf arm-Modus.
Muss es ein code, der exception-handler natürlich. Sie brauchen, um zu überprüfen, mit dem Betriebssystem, wenn alle, die Sie ausgeführt werden, was unterstützt wird und was die Aufrufkonvention ist, etc.
Nicht alle ARM-Prozessoren funktionieren auf diese Weise. Die Cortex-M (ARMv7-M) nicht die gleichen Modi und die gleiche exception-Tabelle, etc. Wie bei jedem mal, wenn Sie mit einem ARM (auf dieser Ebene), die Sie brauchen, um den ARM zu ARM für die Familie, die Sie verwenden, und Sie müssen, um die TRM (Technical Reference Manual) für den Kern(en), die Sie verwenden, idealerweise die genaue überarbeitung, auch wenn ARM markiert die TRM als durch eine neuere version ersetzt den chip-Hersteller erworben hat und verwendet eine spezielle rev zwischen Kern und kann es genug Unterschiede zwischen Drehzahl, dass Sie wollen, das richtige Buch.
Wenn eine SVC-Instruktion angetroffen wird, die von dem PC, der Folgendes Verhalten stattfindet:
den link registrieren, gehört zu den supervisor mode
Ausnahme Vektor (nur ein Sprungbefehl) sollte an die Adresse, 0x0000008, die Niederlassung des Programms in einen anderen Bereich der code verwendet, um zu bestimmen, welche supervisor-call gemacht wurde.
Bestimmen, welche supervisor-call gemacht wurde ist in der Regel erreicht durch das laden der SVC-Instruktion in einem register (durch Verrechnung der LR in einem Wort - da die LR ist noch auf der Anleitung weiter, um das supervisor-call), bit löschen der letzten 8 bits werden und mit dem Wert in den verbleibenden 24 bits des Registers zum berechnen eines Offsets in einer Tabelle springen, verzweigen Sie in den entsprechenden SVC-code.
Wenn das supervisor-code aufrufen will zurück an die Anwendung, der Prozessor muss den Kontext wechseln zurück in den user-Modus und kehren Sie zu der Adresse, die in den LR (die nur im supervisor-Modus, da bestimmte registriert sind überhöht, für beide Modi). Dieses problem wird überwunden mit der MOVS Anweisung, wie unten dargestellt:
(betrachten Sie diese, um auch Ihre Erklärung, wie Sie in den Modus ändern)
MRS und MSR-Anweisungen werden verwendet, um die übertragung von Inhalt zwischen einem ARM-register und das CPSR oder SPSR.
Den MOVS-Anweisung ist eine spezielle Anweisung, die funktioniert wie ein standard-MOV-Anweisung, sondern setzt auch das CPSR gleich der SPSR nach der Verzweigung. Dies ermöglicht es dem Prozessor auf den Zweig zurück (da wir in Bewegung sind die LR in den PC) und ändern Sie den Modus auf den Modus, angegeben durch die SPSR.
Ich zitiere aus der ARM-Dokumentation finden Sie hier:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/BABDCIEH.html
wo, CPSR bezieht sich auf Current Program Status Register und SPSR zu Saved Program Status register verwendet, um die Wiederherstellung des Zustandes des Prozesses, der unterbrochen wurde. So, wie in Punkt 3, dem Prozessor-Schaltkreis ist so konzipiert, dass die hardware selbst ändert den Modus, wenn der Benutzer-Modus führt ein Supervisor call instruction.
"Ich habe gehört, ARM-Modus ändern, kann passieren, nur im privilegierten Modus". Sie sind zum Teil richtig hier. Teilweise meine ich das control-Feld von der CPSR register kann manuell geändert werden (manuell geändert wird bedeutet durch den code) in den privilegierten Modus, nur nicht in den unprivilegierten Modus (also Benutzer-Modus). Wenn ein system-Aufruf geschieht in den Benutzer-Modus-es geschieht, weil der SWI Instruktion. Ein SWI-Anleitung ist der eingebaute Mechanismus zum ändern des Modus supervisor-Modus.
Also zu dem Schluss , es gibt zwei Möglichkeiten, den Modus zu wechseln:
1) Explizit durch den code. Darf nur in einem privilegierten Modus.
2) Implizit durch IRQ, FIQ, SWI, RESET, undefined instruction festgestellt, data abort, prefetch abort. Dies ist erlaubt, in allen Modi.