| 380 | | Vous allez modifier le comportement le |
| 381 | | |
| | 381 | |
| | 382 | |
| | 383 | Pour la partie pratique, je ne vous fait pas modifier ou pire écrire la gestion des threads, mais je vous invite à lire le code. Pour Vous vous forcer à ouvrir les fichiers, vous allez répondre à quelques questions sur le code. Puis vous allez changer la manière de lire les caractères du TTY pour la rendre plus efficace. |
| | 384 | |
| | 385 | Dans la 1ère version proposée, tty_read() tente de lire le registre status pour savoir s'il y a un caractère en attente, sinon elle cède le processeur avec thread_yield(), le problème est que l'on peut perdre des frappes du clavier. |
| | 386 | Ici T0 appelle tty_read() qui cède le processeur à T1 en l'absence de frappes. |
| | 387 | |
| | 388 | **kernel/harch.c** |
| | 389 | {{{#!c |
| | 390 | int tty_read (int tty, char *buf, unsigned count) |
| | 391 | { |
| | 392 | int res = 0; // nb of read char |
| | 393 | tty = tty % NTTYS; // to be sure that tty is an existing tty |
| | 394 | int c; // char read |
| | 395 | |
| | 396 | while (count--) { |
| | 397 | while (!__tty_regs_map[ tty ].status) { // wait for a char from the keyboard |
| | 398 | thread_yield(); // nothing then we yield the processor |
| | 399 | } |
| | 400 | c = __tty_regs_map[ tty ].read; // read the char |
| | 401 | *buf++ = c; |
| | 402 | res++; |
| | 403 | } |
| | 404 | return res; // return the number of char read |
| | 405 | } |
| | 406 | }}} |
| | 407 | |
| | 408 | |