Modes de BRAS: l'Utilisateur et le Système
Pouvez-vous expliquer comment le mode de BRAS pour se changer dans le cas d'un système de traitement d'appel?
J'ai entendu BRAS de changement de mode peut se produire uniquement en mode privilégié, mais dans le cas d'un système de gestion des appels pendant que le BRAS est en mode utilisateur (qui est un non-mode privilégié), comment le BRAS de changement de mode?
Quelqu'un peut-il expliquer l'ensemble de l'action de flux pour le mode utilisateur de cas, et de manière plus générale, le système de traitement d'appel (en particulier la manière dont le BRAS de changement de mode)?
Merci d'avance.
OriginalL'auteur ManishB | 2011-11-20
Vous devez vous connecter pour publier un commentaire.
Dans le cas d'appels sur les BRAS, normalement, le système d'appel provoque une
SWI
instruction à exécuter. Chaque fois que le processeur exécute unSWI
(interruption logicielle) l'instruction, il passe enSVC
mode, ce qui est privilégié, et les sauts à laSWI
gestionnaire d'exception. LeSWI
gestionnaire examine ensuite la cause de l'interruption (intégrés à l'enseignement) et alors, quel que soit le système d'exploitation programmeur a décidé qu'il doit faire. Les autres exceptions de remise à zéro, undefined instruction, prefetch abandon, de données d'annuler, d'interrompre, et rapide interruption - tous également provoquer le processeur pour entrer modes privilégiés.Comment fichier la manipulation fonctionne est entièrement à celui qui a écrit votre système d'exploitation il n'y a rien de BRAS de spécifique à ce sujet.
SWI syscall_number
.+1 @moshbear - que cela ressemble à la façon normale de faire les choses.
Si j'ai bien compris, cela signifie que le mode de BRAS pour se changer de la non-privilégiés de la mode à la mode privilégié en fournissant des exceptions
Oui. Si j'ai interprété l'asm dans
linux/arch/arm/kernel/entry*.S
correctement, la transition du système en mode utilisateur est rien de plus qu'une simple changement de contexte.Voici un fait amusant: lors du redémarrage d'un syscall, en mode noyau, linux utilise
swi __NR_restart_syscall
.OriginalL'auteur Carl Norum
Vous avez besoin pour obtenir une copie du bras BRAS (Architectural Manuel de Référence).
http://infocenter.arm.com -> Architecture ARM -> Manuels de Référence -> ARMv5 Architectural Manuel de Référence, puis télécharger le pdf.
Il sert à être un simple BRAS le BRAS le BRAS de monde, mais il y a trop de cœurs et de commencer à diverger de sorte qu'ils la scission de l'ancien ARMv5 BRAS et fait de nouveau Référence à l'Architecture des Manuels pour chaque processeur ARM familles.
Dans les Programmeurs Modèle chapitre il parle de modes, il est dit que vous pouvez changer librement entre les modes autres que l'utilisateur. BRAS de code de démarrage vont souvent à travers une série de changements de mode de sorte que la pile pointeurs, etc peuvent être configurés. Ensuite, comme le besoin de revenir à Système en mode Utilisateur ou en mode.
Dans ce même chapitre, regardez la section Exceptions, il décrit les exceptions et ce mode, le processeur passe à chaque exception.
L'interruption Logicielle exception qui se produit lorsqu'un SWI instruction est exécutée, est une façon de mettre en œuvre des appels système. Le processeur est mis en mode Superviseur et si en pouce commutateurs de mode de mode de bras.
Il faut un code pour prendre en charge que gestionnaire d'exceptions, bien sûr. Vous avez besoin de vérifier avec le système d'exploitation, le cas échéant, vous êtes en cours d'exécution, ce qui est pris en charge et que la convention d'appel est, etc.
Pas tous les processeurs ARM travailler de cette façon. Le Cortex-M (ARMv7-M) n'a pas les mêmes moyens et la même table d'exception, etc. Comme à chaque fois que vous utilisez un BRAS (à ce niveau), vous avez besoin pour obtenir le BRAS le BRAS pour la famille que vous utilisez et que vous avez besoin pour obtenir le TRM (Technique Manuel de Référence) pour le core(s) que vous utilisez, idéalement exacte de révision, même si les BRAS des marques de la TRM comme ayant été remplacée par une nouvelle version de la puce fabricant a acheté et utilise un spécifique rev de la base et il peut y avoir suffisamment de différences entre les tours que vous voulez les corriger manuellement.
OriginalL'auteur old_timer
Lorsqu'un SVC instruction est rencontrée par le PC, le comportement suivant se produit:
le lien de registre qui appartient à la mode superviseur
Une exception vecteur (juste une branche de l'instruction) doit être à l'adresse 0x0000008, qui se branche le programme à l'autre de la zone de code utilisé pour déterminer le superviseur de l'appel a été fait.
Déterminer appel superviseur a été fait est habituellement accompli par le chargement de l'instruction SVC dans un registre (par compensation la LR par un mot - depuis la LR pointe toujours à l'instruction suivant l'appel superviseur), peu de compensation les 8 derniers bits et à l'aide de la valeur dans le reste de l'24 bits du registre de calculer le décalage dans un saut de la table, de la branche à la correspondante SVC code.
Lors de l'appel superviseur code souhaite revenir à l'application de l'utilisateur, le processeur doit contexte revenir en mode utilisateur et le retourner à l'adresse figurant à l'intérieur de la LR (qui est uniquement disponible en mode superviseur, depuis certains registres sont conservés pour les deux modes). Ce problème est contourné en utilisant l'instruction MOV, comme illustré ci-dessous:
(en tenir compte aussi de votre explication sur la façon de changer de mode)
La MME et MSR instructions sont utilisées pour transférer du contenu entre un BRAS de registre et le CPSR ou SPSR.
Les MOVS instruction est une instruction spéciale, qui fonctionne comme un standard de l'instruction MOV, mais définit également la CPSR égale à la SPSR sur la ramification. Cela permet au processeur de branche (puisque nous sommes le déplacement de la LR dans le PC) et changer de mode de la mode spécifié par la SPSR.
OriginalL'auteur Dilworth
"J'ai entendu le BRAS de changement de mode peut se faire que dans la mode privilégié". Vous êtes en partie ici. En partie, je veux dire le champ de contrôle de la CPSR registre peut être modifiée manuellement (modifié manuellement les moyens à l'aide de code) dans les modes privilégiés seulement pas dans le second mode (c'est à dire en mode utilisateur). Lorsqu'un appel système qui se passe dans le mode utilisateur, il arrive à cause de SWI instruction. Un SWI instruction a intégré le mécanisme de changement de mode de mode superviseur.
Alors , pour conclure, il y a deux façons de changer le mode:
1) Explicitement dans le code. Admis uniquement dans un mode privilégié.
2) de manière implicite à travers les IRQ, la FIQ, SWI, RESET, indéfini d'instruction rencontrés, les données abandonner, prefetch abandonner. Ceci est autorisé dans tous les modes.
Désolé, j'ai trouvé la réponse, à l'aide de la EXC_RETURN valeur: infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0179b/...
Ou la modification de la nPRIV peu sur le but spécial registre de CONTRÔLE (désolé par ces 3 commentaires consécutifs)
OriginalL'auteur Adi s
Je cite le BRAS de la documentation disponible ici:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/BABDCIEH.html
où, CPSR se réfère à l'État du Programme en cours s'Inscrire et SPSR à Programme Enregistré le Statut du registre utilisé pour restaurer l'état du processus qui a été interrompu. Ainsi, comme vu dans le point 3, le processeur circuit est conçu de façon que le matériel lui-même le mode change de la lorsque le mode utilisateur exécute un appel Superviseur de l'instruction.
OriginalL'auteur gjain