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 | |