Changes between Version 3 and Version 4 of MultiCourseTP10_QR


Ignore:
Timestamp:
Jun 10, 2020, 8:30:30 PM (4 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MultiCourseTP10_QR

    v3 v4  
    88Mais le code applicatif doit toujours s'exécuter avec des droits d'accès limités et avec les interruptions non masquées.
    99Le 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.
     10Le 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.
    1111
    1212== Q2) En quoi  l’architecture d’un processeur peut affecter le code de certaines fonctions de l'OS comme _task_switch() ? ==
    1313
    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 u n programme sont stockées en mémoire.
     14Le 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.
    1515
    1616La 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.