Changes between Version 30 and Version 31 of SoclibCourseTp3


Ignore:
Timestamp:
Oct 4, 2009, 12:48:09 PM (15 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp3

    v30 v31  
    8989à la `MappingTable`, il peut déterminer quels segments de la RAM (ou de la ROM) doivent être initialisés.
    9090
    91 On économise ainsi plusieurs millions de cycles de simulation, et le code de boot peut être beaucoup plus court.
     91On économise ainsi plusieurs millions de cycles de simulation, et le code de boot peut être beaucoup plus court (le code de boot
     92utilisé dans ce TP contient moins de 20 lignes d'assembleur).
    9293 
    9394= 4 Travail à réaliser =
     
    99100}}}
    100101
    101 Cette archive contient un très grand nombre de fichiers, car les composants instanc!és sont des objets complexes,
     102Cette archive contient un très grand nombre de fichiers, car les composants matériels instanc!és sont des objets complexes,
    102103qui font appel à beaucoup de code ''caché'' : Par exemple, le chargement initial  des mémoires embarquées ROM et RAM nécessite l'analyse du format de fichier binaire ELF.
    103104De même, l'utilisation d'un contrôleur de terminal suppose l'ouverture d'une ou plusieurs fenêtres XTERM sur la station de travail qui exécute la simulation.
     
    116117 * '''seg_reset''' est le segment contenant le code de ''boot'' exécuté à la mise sous tension. Il est évidemment assigné à la ROM. L'adresse de base 0xBFC00000 est imposée par la spécification du processeur Mips32. On choisira une capacité de stockage de 4 Koctets.
    117118 * '''seg_kernel''' est le segment contenant le code du système qui s'exécute en mode ''kernel''. Il s'agit principalement du Gestionnaire d'Interruptions, Exceptions, et Trappes (GIET) et du code des appels système. Ce segment  est assigné à la RAM. L'adresse de base 0x80000000 est imposée par la spécification du processeur Mips32 qui impose que le point d'entrée est à l'adresse 0x80000180. On choisira une capacité de stockage de 4 Koctets. 
    118  * '''seg_text''' est le segment contenant le code de l'application logicielle embarquée, qui s'exécute en mode ''user''. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x00400000, et une capacité de stockage de 16 Koctets. 
    119  * '''seg_data''' est le segment contenant les données globales et la pile d'exécution de l'application logicielle embarquée. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x00100000, et une capacité de stockage de 64 Koctets.
    120  * '''seg_stack''' est le segment contenant la pile d'exécution de l'application logicielle embarquée. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x00800000, et une capacité de stockage de 64 Koctets.
     119 * '''seg_code''' est le segment contenant le code de l'application logicielle embarquée, qui s'exécute en mode ''user''. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x00400000, et une capacité de stockage de 16 Koctets. 
     120 * '''seg_data''' est le segment contenant les données globales et la pile d'exécution de l'application logicielle embarquée. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x20000000, et une capacité de stockage de 64 Koctets.
     121 * '''seg_stack''' est le segment contenant la pile d'exécution de l'application logicielle embarquée. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x20000000, et une capacité de stockage de 64 Koctets.
    121122
    122123Remarquez que les 2 segments correspondant aux périphériques (seg_tty et seg_gcd), ainsi que les deux segments correspondant au code système sont dans la zone protégée de l'espace adressable, qui n'est accessible qu'en mode ''kernel'' (adresses supérieures à 0x80000000).
    123124
    124 '''Remarque importante''' : Certaines informations sont utilisées à la fois par le matériel et par le logiciel embarqué, et doivent donc être définies à deux endroits :
    125  1. Les addresses de base et les longueurs des segments sont utilisées par le matériel : Elles doivent être définies dans le fichier `tp3_top.cpp` pour ëtre stockées dans la `MappingTable`, qui est est utilisée dans la phase de configuration du matériel par les constructeurs des composants. Ces mêmes adresses de base des segments sont utilisées par le logiciel et doivent être définies dans le fichier `soft/ldscript` qui contient les directives pour l'éditeur de liens lors de la compilation du logiciel embarqué.
    126  1. Le composant matériel générique `VciMultiTty` peut contrôler un nombre variable de terminaux. Ce nombre de terminaux doit être défini dans le fichier `tp3_top.cpp` (pour le matériel), mais doit aussi être défini dans le  fichier `soft/ldscript`, pour informer le système d'exploitation du nombre de terminaux adressables.
     125'''Remarque importante''' : Certaines informations sont utilisées à la fois par le matériel et par le logiciel embarqué. Elles doivent donc être définies dans le fichier ''tp3_top.cpp'' (pour le matériel) et dans le fichier ''soft/ldscript'' (pour le logiciel) :
     126 1. Les addresses de base et les longueurs des segments sont utilisées par le matériel : Elles doivent être définies dans le fichier `tp3_top.cpp` pour ëtre stockées dans la `MappingTable`. Elles sont utilisées dans la phase de configuration du matériel par les constructeurs des composants. Ces mêmes adresses de base des segments sont utilisées par le logiciel et doivent être définies dans le fichier `soft/ldscript` qui contient les directives pour l'éditeur de liens lors de la compilation du logiciel embarqué.
     127 1. Le composant matériel générique `VciMultiTty` peut contrôler un nombre variable de terminaux. Ce nombre de terminaux doit être défini dans le fichier `tp3_top.cpp` décrivant l'architecture matérielle, mais doit aussi être défini dans le  fichier `soft/ldscript`, pour informer le système d'exploitation du nombre de terminaux adressables.
    127128
    128129Complêtez les fichiers `tp3_top.cpp` et `soft/ldsript` pour définir les adresses de base et les longueurs des segments,
     
    133134Le logiciel embarqué est défini dans plusieurs fichiers source, que vous trouverez dans le répertoire `soft`.
    134135Certains de ces fichiers sont écrits en assembleur Mips32, certains sont écrits en C :
    135  * le fichier `reset.s` est écrit en assembleur et contient le code de boot qui est exécuté à la mise sous tension, ou lors de l'activation du signal NRESET. Ce code s'exécute en mode ''kernel'' et initialise quelques registres, avant de se brancher à la pemière instruction du programme ''main''.
     136 * le fichier `reset.s` est écrit en assembleur et contient le code de boot qui est exécuté à la mise sous tension, ou lors de l'activation du signal NRESET. Ce code s'exécute en mode ''kernel'' et initialise quelques registres, avant de se brancher à la pemière instruction du programme ''main'', et en forçant le processeur à passer en mode ''user'' gràce à l'instruction ''eret''.
    136137 * le fichier `giet.s` est écrit en assembleur et contient le code du Gestionnaire d'Interruption, Exceptions et Trappes. Le GIET est l'unique point d'entrée dans le système d'exploitation. Ce code s'exécute en mode ''kernel'', et se termine toujours par une instruction `eret`.
    137138 * le fichier `stdio.c` est écrit en C, et contient le code des fonctions C permettant à un programme applicatif s'exécutant en mode ''user'' d'accéder aux périphériques ''mappés'' dans le segment ''kernel'', en effectuant des appels système.
     
    143144'''Question''' : Quels sont les appels système qui permettent d'accéder à un terminal TTY ? Lorsqu'il y a plusieurs terminaux dans l'architecture, comment est sélectionné le terminal cible ?
    144145
    145 
    146146On rappelle que l'instruction `eret` de sortie du GIET ou du code de boot effectue principalemnt deux actions :
    147147 1. Elle modifie le registre protégé SR (registre 12 du coprocesseur ''système'') pour que le processeur retourne dans le mode où il était lorsqu'il a été dérouté par une interruption, une exception ou un appel système.
    148148 1. Elle effectue un branchement à l'adresse contenue dans le registre protégé EPC (registre 14 du coprocesseur ''système'').
    149149
    150 '''Question''' : Quels sont les initialisations réalisées par le code de boot ? pouquoi ces initialisations ?
     150'''Question''' : Quelles sont les initialisations réalisées par le code de boot ? pouquoi ces initialisations ?
    151151
    152152Le premier programme que vous allez exécuter se contente d'afficher le célèbre `hello world` sur le terminal.
     
    208208
    209209Puisque le logiciel embarqué est chargé dynamiquement dans la RAM et dans la ROM lors du lancement du simulateur,
    210 il est possible de modifier le logiciel embarqué (fichier `bin.soft`), sans modifier l'architecture matérielle et donc
    211 sans recompiler le simulateur et sans avoir à regénérer le fichier `simulator.x`.
     210il est possible de modifier le logiciel embarqué (fichier `bin.soft`), sans modifier l'architecture matérielle et donc sans regénérer le fichier `simulator.x`.
    212211
    213212On va donc maintenant écrire une application logicielle un peu plus complexe, qui utilise le coprocesseur GCD,