71 | | Le but de ce TP est d'analyser, de modifier et d'utiliser le gestionnaire d'interruption. |
| 76 | === La plateforme |
| 77 | |
| 78 | |
| 79 | Le but de ce TP est d'analyser, de modifier et d'utiliser le gestionnaire d'interruption. |
| 80 | Nous allons utiliser la même plateforme que la dernière fois, mais malheureusement celle-ci avait un bug matériel. |
| 81 | Vous allez donc devoir prendre un nouveau simulateur [htdocs:files/almo1.x.gz almo1.x.gz] (vous devez télécharger ce fichier, le dézipper et le placer dans le répertoire AS6/bin à la place du précédent). |
| 82 | |
| 83 | La plateforme que nous allons utiliser contient : |
| 84 | - un processeur |
| 85 | - une mémoire multisegment pour le code et les données du noyau et de l'utilisateur. |
| 86 | - une ROM pour le boot |
| 87 | - un contrôleur multittys (4) |
| 88 | - un timer |
| 89 | - une icu |
| 90 | |
| 91 | Sur cette plateforme, les composants produisant des IRQ sont le timer et les 4 ttys. Ces IRQ sont destinées au processeur, mais elles passent par l'ICU. l'ICU permet de masquer individuellement chaque IRQ et si plusieurs sont levées simultanément alors l'ICU permet de dire quelle est celle prioritaire. La manière dont sont routées les IRQ n'est pas modifiable par logiciel, les IRQ sont des signaux électriques câblés par les architectes. Sur `almo1`: |
| 92 | - L'IRQ du timer entre sur l'entrée n°1 de l'ICU. |
| 93 | - Les IRQ de TTY entrent respectivement sur les entrées 3, 4, 5 et 6 de l'ICU. |
| 94 | |
| 95 | **Question** : faire un dessin représentant la plateforme avec les signaux IRQ. |
| 96 | |
| 97 | |
| 98 | === Analyse de code |
| 99 | |
| 100 | |
| 101 | Pour ce TP, il n'y aura qu'une seule étape parce que j'ai voulu ajouter un minimum de code. |
| 102 | En effet, la gestion des IRQ est liée à la gestion des périphériques puisque c'est eux c'est essentiellement eux qui les produise. Or, la gestion des périphériques de faire par le mécanisme des pilotes de périphériques. J'en présenterai une version simplifiée lorsque nous verrons les périphériques initiateurs. Pour l'heure, il s'agit de comprendre juste comment sont traités les IRQ et de jouer un peu avec. |
| 103 | |
| 104 | Par rapport à l'étape 6 sur tp1, voici les changments |
| 105 | {{{ |
| 106 | 7_isr/ |
| 107 | ├── common |
| 108 | │ └── syscalls.h |
| 109 | ├── kernel |
| 110 | │ ├── harch.c |
| 111 | │ ├── harch.h |
| 112 | │ ├── hcpu.h |
| 113 | │ ├── hcpu.S |
| 114 | │ ├── kernel.ld |
| 115 | │ ├── kinit.c |
| 116 | │ ├── klibc.c |
| 117 | │ ├── klibc.h |
| 118 | │ ├── kpanic.c |
| 119 | │ ├── kpanic.h |
| 120 | │ ├── ksyscalls.c |
| 121 | │ └── Makefile |
| 122 | ├── Makefile |
| 123 | ├── uapp |
| 124 | │ ├── main.c |
| 125 | │ └── Makefile |
| 126 | └── ulib |
| 127 | ├── crt0.c |
| 128 | ├── libc.c |
| 129 | ├── libc.h |
| 130 | ├── Makefile |
| 131 | └── user.ld |
| 132 | }}} |