Changes between Version 36 and Version 37 of AS6-TME-B5


Ignore:
Timestamp:
Feb 22, 2022, 2:05:25 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B5

    v36 v37  
    376376
    377377
     378
    378379= B. Travaux pratiques
    379380
    380 Vous allez modifier le comportement le
    381 
     381
     382
     383Pour 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
     385Dans 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.
     386Ici T0 appelle tty_read() qui cède le processeur à T1 en l'absence de frappes.
     387
     388**kernel/harch.c**
     389{{{#!c
     390int 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