Rework report

This commit is contained in:
Yorick Barbanneau 2021-12-05 22:03:12 +01:00
parent dbc10545f3
commit 1b6fe8b3fe

View file

@ -49,6 +49,7 @@ pouvons passer qu'une seule valeur lors de du démarrage de notre Thread:
```c ```c
Thread->Start(void * funtion, void * arguments) Thread->Start(void * funtion, void * arguments)
``` ```
\newpage
Nous avons choisi d'encapsuler l'adresse mémoire de la fonction et l'adresse Nous avons choisi d'encapsuler l'adresse mémoire de la fonction et l'adresse
mémoire de ses arguments dans une structre `ThreadArgs_t`: mémoire de ses arguments dans une structre `ThreadArgs_t`:
@ -65,23 +66,24 @@ Celle-ci est effectuée dans le fichier d'entête `userthread.h`, nous parlerons
de `int stackAddr` un peu plus loin dans ce chapitre. de `int stackAddr` un peu plus loin dans ce chapitre.
La fonction `StartUserThread`, servant à initialiser les différents registres, La fonction `StartUserThread`, servant à initialiser les différents registres,
reçoit cette structure sous la forme d'un `(void*)`. Nos ne pouvons l'utiliser reçoit cette structure sous la forme d'un `(void*)`. Nous ne pouvons utiliser
tel quel, il nous faut donc la caster dans une variable de type `ThreadArgs_t`. cette structure avant la caster dans une variable de type `ThreadArgs_t`.
Afin de ne pas perdre cette structure lors de la fin de notre fonction Afin de ne pas perdre cette structure lors de la fin de notre fonction
`Do_ThreadCreate`, nous la positionnons sur le tas avec un `malloc` `Do_ThreadCreate`, nous la positionnons sur le tas avec un `malloc`
(`userspace.cc` ligne 50). Afin de ne pas froisser *LealSanitizer* nous n'avons (`userspace.cc` ligne 50). Afin de ne pas froisser *LealSanitizer* nous n'avons
pas oublié de libérer cette zone mémoire une fois devenueNouveau dossier inutile dans la pas oublié de libérer cette zone mémoire une fois devenue inutile
fonction `StartUserThread` (ligne 38-39). dans la fonction `StartUserThread` (fichier `userthread.cc` ligne 38-39).
### Le comptage des thread. ### Le comptage des thread.
Comme nous l'avons compris, la classe `AddrSpace` représente un processus -- un Telle que nous l'avons comprise, la classe `AddrSpace` représente un processus
espace d'adressage. Côté noyau, tout n'est que Thread, dont certains partagent -- un espace d'adressage. Côté noyau, tout n'est que thread, dont certains
un même espace d'adressage. Il nous a donc **semblé légitime d'implémenter le partagent un même espace d'adressage. Il nous a donc **semblé légitime
comptage des Threads dans `AddrSpace`** via la variable publique `int thread` d'implémenter le comptage des threads dans `AddrSpace`** via la variable
(définie dans `addrspace.h` ligne 50). Celle-ci est initialisée à 1 lors de publique `int thread` (définie dans `addrspace.h` ligne 50). Celle-ci est
l'instanciation: le `main` de notre programme compte lui aussi pour un thread. initialisée à 1 lors de l'instanciation: le `main` de notre programme compte lui
aussi pour un thread.
Une fois que nous savons combien de threads sont encore "en vie", il nous est Une fois que nous savons combien de threads sont encore "en vie", il nous est
possible de terminer notre programme quand tous ses threads sont finis dans la possible de terminer notre programme quand tous ses threads sont finis dans la
@ -141,6 +143,8 @@ convient pas (`Do_ThreadExit`), nous la trouvons bancale, une version plus
élégante devrait être possible (sûrement plus simple une fois le TD3 plus élégante devrait être possible (sûrement plus simple une fois le TD3 plus
avancé). avancé).
\newpage
## Tests ## Tests
Tous nos test se sont fait avec `test/threadtest.c`, nous avon adapté son code Tous nos test se sont fait avec `test/threadtest.c`, nous avon adapté son code
@ -150,3 +154,6 @@ en fonction de ce que nous voulions tester:
* tester le fonctionnement de plusieurs threads (Action II.1) * tester le fonctionnement de plusieurs threads (Action II.1)
* tester la pile (Action II.3) * tester la pile (Action II.3)
* l'utilisation de la classe `Bitmap` (Action II.4) * l'utilisation de la classe `Bitmap` (Action II.4)
Nous avons aussi inclus en ensemble conséquent de message de debug afin de
tracer les actions de notre implémentation.