Changes between Version 72 and Version 73 of SoclibCourseTp4
- Timestamp:
- Dec 10, 2010, 7:46:31 AM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp4
v72 v73 190 190 * Il faut définir des tableaux de pointeurs pour les composants répliqués PROC[i], TTY[i] et ICU[i], ainsi que pour les différents signaux connectés à ces composants. 191 191 192 * Il faut utiliser une boucle indexée par l'index du processeur pour chaque fois que ces composants sont concernés.192 * Il faut utiliser une boucle indexée par l'index du processeur pour les constructteurs des composants PROC[i], ICU[i], et TTY[i]. 193 193 194 194 * Pour l'index des initiateurs (SRCID), on utilisera les valeurs 0 à (NPROCS-1) pour les processeurs, et les valeurs NPROCS et (NPROCS+1) pour le composant IOC et pour le composant DMA respectivement. … … 200 200 * Il faut définir NPROCS segments pour les NPROCS TTY[i]. L'adresse de base du segment associé au composant ICU[i] est définie comme : seg_tty_base + 0x00100000 * proc_id (cette contrainte est imposée par le GIET). 201 201 202 * Pour ce qui concerne les interruptions, les interruptions non-répliquées (IRQ_TIMER, IRQ_IOC, IRQ_DMA) 202 * Il faut utiliser des boucles indexées par l'index du processeur pour connecter les composants répliqués. 203 204 * Les interruptions non-répliquées (IRQ_IOC, IRQ_DMA) seront connectées au contrôleur d'interruptions ICU[0]. Les interruptions répliquées IRQ_TTY[i] et IRQ_TIMER[i] seront connectées au concentrateur d'interruptions ICU[i]. 203 205 204 206 '''Question''' : Modifiez le fichier '''tp4_top.cpp''' pour rendre l'architecture générique, conformément aux recommandations ci-dessus. … … 208 210 == 5.2 Code de boot == 209 211 210 Un vrai système d'exploitation tel que LINUX ou MutekH permet de créer dynamiquement de nouvelles tâches (i.e. de nouveaux programmes utilisateurs) alors que la machine est déjà démarrée (mécanisme ''pthread_create()'' pour les threads POSIX, ou mécanisme fork/exec pour les processus UNIX). Le GIET n'étant pas un vrai système d'exploitation,ne supporte pas la création ou la destruction dynamique de tâches : Les tâches doivent être créées une fois pour toute au démarrage de la machine, c'est à dire dans le code de boot.211 212 Bien que le GIET supporte le fonctionnement multi-tâches (un seul processeur exécute plusieurs tâches par multiplexage temporel), on va utiliser ici un mécanisme plus simple où chaque processeur n'exécute qu'une seule tâche. Le mot tâche désigne ici un programme utilisateur particulier.212 Un vrai système d'exploitation tel que LINUX (ou MutekH) permet de créer dynamiquement de nouvelles tâches (i.e. de nouveaux programmes utilisateurs) alors que la machine est déjà démarrée (mécanisme ''pthread_create()'' pour les threads POSIX, ou mécanisme fork/exec pour les processus UNIX). Le GIET n'est pas un vrai système d'exploitation, car il ne supporte pas la création ou la destruction dynamique de tâches : Les tâches doivent être créées une fois pour toute au démarrage de la machine, c'est à dire dans le code de boot. 213 214 Bien que le GIET supporte le fonctionnement multi-tâches (un seul processeur exécute plusieurs tâches en pseudo-parallélisme par multiplexage temporel), on va utiliser ici un mécanisme plus simple où chaque processeur n'exécute qu'une seule tâche, qui lui est assignée dans le code de boot. 213 215 214 216 Le mécanisme est le suivant : … … 219 221 '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le pointeur de pile ($29 dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. Chaque tâche disposera d'une pile de 64 Koctets. Quelle doit être la taille minimale du segment de pile défini dans la table des segments de la top-cell? 220 222 221 '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le point d'entrée (registre EPC dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. On pourra définir une table de sauts indexé par le proc_id et contenant les adresses ''main_0'' à ''main_7''.223 '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le point d'entrée (registre EPC dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. On définira une table de sauts indexé par le proc_id et contenant les adresses ''main_0'' à ''main_7''. Ces adresses correspondent aux 8 point d'entrée de 8 programmes utilisateurs susceptibles de s'exécuter sur l'architecture multi-processeurs. 222 224 223 225 '''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour que soient compilés le fichier '''teset.s''' ainsi modifié, et les deux programmes '''main_1.c''' et '''main_1.c''' de la section 4. … … 226 228 227 229 == 5.3 Exécution paralléle de programmes non-coopératifs == 230 231 On souhaite pour commencer lancer l'exécution parallèle des deux programmes main_0 et main_1 définis précédemment sur une architecture à deux processeurs. 232 233 '''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour générer le logiciel embarqué, puis lancez la simulation sur une architecture à 2 processeurs. 228 234 229 235 == 5.4 Programme coopératif multi-tâches ==