Podcast
Questions and Answers
Quel est le rôle principal du gestionnaire de syscall?
Quel est le rôle principal du gestionnaire de syscall?
Que doivent contenir les registres $4 à $7 lors d'un appel de fonction?
Que doivent contenir les registres $4 à $7 lors d'un appel de fonction?
Quel est l'emplacement du pointeur de pile pour un appel de syscall?
Quel est l'emplacement du pointeur de pile pour un appel de syscall?
Pourquoi le gestionnaire de syscall ajoute-t-il un cinquième argument?
Pourquoi le gestionnaire de syscall ajoute-t-il un cinquième argument?
Signup and view all the answers
Quel type d'instruction est utilisé pour appeler une fonction et passer le contrôle?
Quel type d'instruction est utilisé pour appeler une fonction et passer le contrôle?
Signup and view all the answers
Quel est le rôle principal de la fonction kinit() dans l'exécution d'une application utilisateur?
Quel est le rôle principal de la fonction kinit() dans l'exécution d'une application utilisateur?
Signup and view all the answers
À quel moment s'arrête l'exécution d'une application utilisateur simple dans le MIPS?
À quel moment s'arrête l'exécution d'une application utilisateur simple dans le MIPS?
Signup and view all the answers
Quelles structures de données le noyau initialise-t-il lors du démarrage de l'application?
Quelles structures de données le noyau initialise-t-il lors du démarrage de l'application?
Signup and view all the answers
Quelle fonction est le point d'entrée pour la gestion des services dans le noyau?
Quelle fonction est le point d'entrée pour la gestion des services dans le noyau?
Signup and view all the answers
Quel est l'objectif principal du schéma présenté dans le cours?
Quel est l'objectif principal du schéma présenté dans le cours?
Signup and view all the answers
Quelle fonction est initialisée par le noyau après l'appel à kinit()?
Quelle fonction est initialisée par le noyau après l'appel à kinit()?
Signup and view all the answers
Que fait la fonction _start() dans le processus d'exécution d'une application?
Que fait la fonction _start() dans le processus d'exécution d'une application?
Signup and view all the answers
Quel aspect n'est pas généralement géré par la fonction syscall dans le noyau?
Quel aspect n'est pas généralement géré par la fonction syscall dans le noyau?
Signup and view all the answers
Quel est le rôle principal d'un Makefile?
Quel est le rôle principal d'un Makefile?
Signup and view all the answers
Quelle est la caractéristique des cibles intermédiaires dans un Makefile?
Quelle est la caractéristique des cibles intermédiaires dans un Makefile?
Signup and view all the answers
Que produisent les règles dans un Makefile lorsqu'elles sont exécutées?
Que produisent les règles dans un Makefile lorsqu'elles sont exécutées?
Signup and view all the answers
Que permet un Makefile en termes de modification de fichiers sources?
Que permet un Makefile en termes de modification de fichiers sources?
Signup and view all the answers
Quelle commande est utilisée pour générer la cible finale kernel.x dans un Makefile?
Quelle commande est utilisée pour générer la cible finale kernel.x dans un Makefile?
Signup and view all the answers
Quels fichiers sont presque toujours considérés comme des cibles intermédiaires?
Quels fichiers sont presque toujours considérés comme des cibles intermédiaires?
Signup and view all the answers
À quoi servent les variables automatiques dans un Makefile?
À quoi servent les variables automatiques dans un Makefile?
Signup and view all the answers
Quel type d'exécutable ne sera pas produit dans la simulation du logiciel décrite?
Quel type d'exécutable ne sera pas produit dans la simulation du logiciel décrite?
Signup and view all the answers
Quelle condition permet à l'adresse X d'être accessible dans l'espace d'adressage MIPS?
Quelle condition permet à l'adresse X d'être accessible dans l'espace d'adressage MIPS?
Signup and view all the answers
Quel registre du coprocesseur 0 contient l'adresse de l'instruction ayant provoqué un appel au noyau?
Quel registre du coprocesseur 0 contient l'adresse de l'instruction ayant provoqué un appel au noyau?
Signup and view all the answers
Quelle est la conséquence de référencer le registre $14 sans préciser s'il appartient au GPR ou au coprocesseur 0?
Quelle est la conséquence de référencer le registre $14 sans préciser s'il appartient au GPR ou au coprocesseur 0?
Signup and view all the answers
Quel registre du coprocesseur 0 contient le nombre de cycles depuis le démarrage du MIPS?
Quel registre du coprocesseur 0 contient le nombre de cycles depuis le démarrage du MIPS?
Signup and view all the answers
Quel est le rôle principal du registre c0_sr?
Quel est le rôle principal du registre c0_sr?
Signup and view all the answers
Quelles instructions sont utilisées pour manipuler les registres du coprocesseur 0?
Quelles instructions sont utilisées pour manipuler les registres du coprocesseur 0?
Signup and view all the answers
Quel registre c0_epc est désigné par quel numéro?
Quel registre c0_epc est désigné par quel numéro?
Signup and view all the answers
Quel registre contient une adresse mal formée due à un accès non aligné?
Quel registre contient une adresse mal formée due à un accès non aligné?
Signup and view all the answers
Quelle est l'adresse en mémoire de __tty_regs_map.read si NTTYS est égal à 2?
Quelle est l'adresse en mémoire de __tty_regs_map.read si NTTYS est égal à 2?
Signup and view all the answers
Quel est le rôle du mot clé 'extern' dans le contexte de C?
Quel est le rôle du mot clé 'extern' dans le contexte de C?
Signup and view all the answers
Quel est le type de __tty_regs_map selon la déclaration donnée?
Quel est le type de __tty_regs_map selon la déclaration donnée?
Signup and view all the answers
À quoi sert le mot clé 'volatile' en C?
À quoi sert le mot clé 'volatile' en C?
Signup and view all the answers
Quelle est la taille de chaque structure dans le tableau __tty_regs_map?
Quelle est la taille de chaque structure dans le tableau __tty_regs_map?
Signup and view all the answers
Quel élément est situé à l'adresse 0xd0200000 selon la définition de __tty_regs_map?
Quel élément est situé à l'adresse 0xd0200000 selon la définition de __tty_regs_map?
Signup and view all the answers
Quel est le contenu exact de la ligne 15 dans le code fourni?
Quel est le contenu exact de la ligne 15 dans le code fourni?
Signup and view all the answers
Quel type de variable est __tty_regs_map déclaré comme étant dans le fichier harch.c?
Quel type de variable est __tty_regs_map déclaré comme étant dans le fichier harch.c?
Signup and view all the answers
Quelle instruction permet de copier la valeur du registre c0_epc dans le registre général $8 ?
Quelle instruction permet de copier la valeur du registre c0_epc dans le registre général $8 ?
Signup and view all the answers
Quelle instruction doit être exécutée pour écrire la nouvelle valeur de c0_epc après l'avoir augmentée de 4 ?
Quelle instruction doit être exécutée pour écrire la nouvelle valeur de c0_epc après l'avoir augmentée de 4 ?
Signup and view all the answers
Quel est le rôle du bit 0 du registre status (c0_sr) ?
Quel est le rôle du bit 0 du registre status (c0_sr) ?
Signup and view all the answers
Que signifie le code 4 dans le champ XCODE du registre cause (c0_cause) ?
Que signifie le code 4 dans le champ XCODE du registre cause (c0_cause) ?
Signup and view all the answers
Dans quelle plage de bits se trouve le code de la cause d'entrée dans le noyau dans le registre cause ?
Dans quelle plage de bits se trouve le code de la cause d'entrée dans le noyau dans le registre cause ?
Signup and view all the answers
Quelle instruction doit être utilisée pour augmenter c0_epc de 4 ?
Quelle instruction doit être utilisée pour augmenter c0_epc de 4 ?
Signup and view all the answers
Quel est le rôle du bit 4 de l'octet 0 du registre status ?
Quel est le rôle du bit 4 de l'octet 0 du registre status ?
Signup and view all the answers
Quel est l'effet de l'instruction 'mtc0 $GPR, $C0' ?
Quel est l'effet de l'instruction 'mtc0 $GPR, $C0' ?
Signup and view all the answers
Study Notes
Application simple en mode utilisateur
- Le schéma illustre l'exécution d'une application simple dans MIPS, du démarrage du SoC à l'appel de
exit()
. - L'objectif est de comprendre les interactions entre le code de démarrage, le noyau, l'application et les bibliothèques.
Modes d'exécution MIPS
- Le MIPS propose deux modes d'exécution : kernel et user.
- Le noyau fonctionne en mode kernel.
- L'application fonctionne en mode user.
Espace d'adressage MIPS
- L'espace d'adressage MIPS est l'ensemble des adresses que le processeur peut atteindre (232 adresses d'octets).
- Une adresse X est mappée dans l'espace d'adressage si le MIPS peut lire ou écrire à cette adresse.
- Une adresse supérieure à 0x80000000 n'est accessible qu'en mode kernel.
Registres du coprocesseur 0
- Les registres du coprocesseur 0 sont utilisés par le système d'exploitation.
-
c0_sr
(registre $12) : contient le mode d'exécution et les autorisations d'interruptions. -
c0_cause
(registre $13) : contient la cause de l'appel au noyau. -
c0_epc
(registre $14) : contient l'adresse de l'instruction qui a provoqué l'appel au noyau ou l'adresse de l'instruction suivante. - D'autres registres existent (c0_bar, c0_count, c0_procid).
Instructions mtc0 et mfc0
-
mtc0
: déplace une valeur d'un registre général vers un registre du coprocesseur 0. -
mfc0
: déplace une valeur d'un registre du coprocesseur 0 vers un registre général. - Seules ces instructions sont utilisables pour manipuler les registres du coprocesseur 0.
Registre Status (c0_sr)
- Bits importants :
- Bit 0 (IE) : Active/désactive les interruptions.
- Bit 1 (EXL) : Indique si le MIPS est en mode exception.
- Bits 4 (UM) : Indique si le MIPS est en mode utilisateur.
Registre Cause (c0_cause)
- Le champ XCODE contient le code de la cause d'entrée dans le noyau.
- Codes importants :
- Code 0 : interruption.
- Code 8 : syscall.
Registre EPC (c0_epc)
- Contient l'adresse de l'instruction qui a déclenché une exception ou un appel système.
Instructions en mode kernel
-
mtc0
,mfc0
,eret
: sont les trois instructions utilisables en mode kernel.
Adresse d'entrée noyau
- Au démarrage, le code de démarrage saute à l'adresse de la fonction
kinit()
. - Après le démarrage, l'adresse d'entrée noyau est 0x80000180.
Passage noyau-application
-
syscall
: l'instruction pour demander un service au noyau. -
eret
: l'instruction pour revenir à l'application depuis le noyau.
Initialisation application
- La fonction
_start
initialise les variables globales non initialisées, puis appellemain()
. - Au retour de
main()
,_start
réalise l'appel systèmeexit()
.
Placement en mémoire
- L'éditeur de liens place les fonctions et variables en mémoire.
- Les fichiers
idscript
(par exemplekernel.ld
ouuser.ld
) contrôlent le placement.
Passage noyau-application
- L'adresse de
_start
est déterminée par les fichiersidscript
. - Le noyau peut accéder à l'adresse de
_start
grâce auidscript
.
Registres $26
et $27
- Registres généraux (GPR) temporaires utilisés par le noyau.
- L'utilisateur perd leur valeur si le noyau les modifie.
Gestionnaire de syscall
- Le noyau utilise le vecteur de syscall pour gérer les appels.
- La fonction
syscall
collecte les arguments et appelle la fonction correspondante.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.
Related Documents
Description
Ce quiz aborde les concepts fondamentaux liés à l'exécution d'applications simples en MIPS, en explorant le fonctionnement des modes d'exécution et l'espace d'adressage. Il teste également votre compréhension des registres du coprocesseur 0 et des interactions entre les différents composants du système. Préparez-vous à plonger dans l'univers de l'architecture MIPS !