Changes between Version 3 and Version 4 of MultiCourseTP10_QR
- Timestamp:
- Jun 10, 2020, 8:30:30 PM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
MultiCourseTP10_QR
v3 v4 8 8 Mais le code applicatif doit toujours s'exécuter avec des droits d'accès limités et avec les interruptions non masquées. 9 9 Le changement de mode (donc le changement de valeur du registre SR) doit se faire exactement au moment du branchement à la première instruction du code applicatif, ni avant, ni après. 10 Le rôle de l'instruction ''eret'' est précisément d'exécuter un branchement (copier la valeur contenue dans le registre EPC dans le registre PC), ET de modifier la valeur du registre SR, en une seule instruction.10 Le rôle de l'instruction ''eret'' est précisément d'exécuter un branchement (copier la valeur contenue dans le registre EPC dans le registre PC), ET de modifier la valeur du registre SR, en une seule instruction. 11 11 12 12 == Q2) En quoi l’architecture d’un processeur peut affecter le code de certaines fonctions de l'OS comme _task_switch() ? == 13 13 14 Le code du GIET, comme le code de beaucoup de systèmes d'exploitation est écrit en C (le langage C a en effet été conçu par les développeurs du système UNIX). Pour que le code écrit en C soit portable sur différentes architectures de processeurs, le langage C ne permet pas au programmeur de manipuler directement les registres internes du processeur, car ces registres sont différents pour chaque architecture. L'abstraction proposée par le langage C suppose que toutes les variables manipulées par un programme sont stockées en mémoire.14 Le code du GIET, comme le code de beaucoup de systèmes d'exploitation est écrit en C (le langage C a été conçu par les développeurs du système UNIX). Mais, pour que le code écrit en C soit portable sur différentes architectures de processeurs, le langage C ne permet pas au programmeur de manipuler directement les registres internes du processeur, car ces registres sont différents pour chaque architecture. L'abstraction proposée par le langage C suppose que toutes les variables manipulées par un programme sont stockées en mémoire. 15 15 16 16 La fonction _task_switch() a précisément pour but de sauvegarder en mémoire les valeurs contenues dans les registres de la tâche sortante, et de restaurer depuis la mémoire les valeurs des registres pour la tâche entrantes. Cette fonction ne peut donc pas être écrite en C, puisque l'ensemble des registres définissant le contexte d'une tâche dépend de l'architecture. Elle doit être écrite en assembleur, et ce code assembleur est forcément différent d'un processeur à l'autre.