Changes between Version 78 and Version 79 of AS6-TME-B5
- Timestamp:
- Mar 17, 2024, 7:18:25 PM (3 months ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AS6-TME-B5
v78 v79 415 415 2. Soit le thread A, voyant que la ressource n'est pas disponible, demande un changement de thread avec `thread_yield()`. Ainsi, le noyau peux élire un autre thread et faire quelque chose d'utile. Le thread A reste `READY` et il reprend périodiquement le processeur pour retenter sa chance. C'est aussi une attente active, mais meilleure parce que les autres threads sont moins pénalisés. En effet, il n'y a pas la perte de quantum de temps par le thread A. 416 416 * Dans les deux cas, c'est bien une attente active puisque le thread A teste lui-même si la ressource est disponible jusqu'à réussir. 417 * Ce comportement sera modifié en introduisant un état `WAIT` pour que les threads en attente ne soient plus éligibles. C'est la libération de la laressource qui remettra le thread en attente dans l'état `READY.417 * Ce comportement sera modifié en introduisant un état `WAIT` pour que les threads en attente ne soient plus éligibles. C'est la libération de la ressource qui remettra le thread en attente dans l'état `READY. 418 418 ''' 419 419 }}} … … 602 602 * Le thread tente de lire le clavier en lisant `status`, en cas d'échec il cède le processeur avec `thread_yield()`, en sachant qu'on lui rendra plus tard. 603 603 * En cas de succès, il enregistre le caractère lu dans le buffer et décrémente le nombre de caractères attendus, si c'est le dernier, il sort. 604 * Notez qu'il n'y a pas de loopback (c'est-à-dire de renvoi du caractère vers l'écran. C'est une opération complexe, on ne peut pas tout renvoyer (par exemple les flèches), c'est à la fonction système de faire ce travail. 605 604 * Notez qu'il n'y a pas de loopback, c'est-à-dire de renvoi du caractère vers l'écran. C'est une opération complexe, on ne peut pas tout renvoyer (par exemple les caractères flèches), c'est à la fonction `fgets()` de la **libc** de faire ce travail, donc au niveau utilisateur. 606 605 {{{#!c 607 606 int tty_read (int tty, char *buf, unsigned count)