Changes between Version 112 and Version 113 of SoclibCourseTp4
- Timestamp:
- Dec 12, 2013, 5:02:09 PM (11 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp4
v112 v113 240 240 On va utiliser ici un mécanisme simple où chaque processeur n'exécute qu'une seule tâche, qui lui est assignée une fois pour toutes dans le code de boot. 241 241 242 Le mécanisme est le suivant :242 Le mécanisme général est le suivant : 243 243 * Tous les processeurs exécutent le même code de boot, mais l'exécution de ce code dépend de l'index du processeur. L'index du processeur (''proc_id'') étant stocké dans le registre système ($15, 1) du processeur MIPS32, sa valeur peut être testée par le logiciel. Remarquez que la valeur de ce registre est initialisée par le constructeur C++, ce qui modélise une valeur ''cablée'' lors de la fabrication de la puce. 244 244 * Les tâches s'exécutant en parallèle, chaque tâche (et donc chaque processeur) doit disposer de sa propre pile d'exécution. On définit un seul segment pour les différentes piles d'exécution, mais les pointeurs de pile des différents processeurs doivent être initialisés à des valeurs différentes en fonction du ''proc_id''. … … 255 255 '''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 longueur du segment de pile défini dans la table des segments de la top-cell pour 2 processeurs? Pour 4 processeurs? 256 256 257 '''Question''' : Modifiez le fichier '''reset.s''' pour que chaque processor PROC[i] initialize le registre de masque du composant ICU[i] qui lui est associé. Attention: à la fois la valeur du masque, et les adresses des registres dépendent du canaL... 258 259 '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le registre EPC à une valeur dépendant du ''proc_id''. 257 '''Question''' : Modifiez le fichier '''reset.s''' pour que chaque processor PROC[i] initialize le registre de masque du composant ICU[i] qui lui est associé. A la fois la valeur du masque, et les adresses des registres dépendent du canaL: On fera en sorte que le processeur [i] reçoive les interruptions IRQ_TTY[i], IRQ_TIM[i], IRQ_DMA[i]. Le processeur [0] recevra en plus l'interruption IRQ_IOC. 258 259 '''Question''' : Modifiez le fichier '''reset.s''' pour que chaque processeur initialise son registre EPC à une valeur dépendant du ''proc_id''. 260 261 '''Question''' : Modifiez le fichier '''reset.s''' pour que tous les processeurs initialisent le vecteur d'interruption pour toutes les lignes d'interruptions existant dans l'architecture. Pourquoi a-ton choisi que cette initialisation soit réalisée par tous les processeurs, ce qui peut sembler redondant ? 260 262 261 263 '''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour que le code des deux fonctions ''main()'' et main_display() soient intégré dans le même fichier '''app.bin'''. Vérifiez dans le fichier '''app.bin.txt'''