Changes between Version 69 and Version 70 of AS6-TME-B5
- Timestamp:
- Feb 4, 2023, 7:59:39 PM (2 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AS6-TME-B5
v69 v70 211 211 ''' 212 212 }}} 213 1. Après qu'un thread a été élu et que son contexte a été chargé dans le processeur, donnez le nom de la fonction responsable du chargement et dites où elle retourne ? (attention, il y a deux cas)213 1. Après qu'un thread a été élu et que son contexte a été chargé dans le processeur, donnez le nom de la fonction responsable du chargement et dites où elle retourne ? Attention, il y a deux cas. Vous avez une partie de la réponse dans le cours à partir du slide 23, et vous avez des commentaires dans le code de `kernel/kthread.c`. L'idée n'est pas de répondre de manière précise, mais de comprendre pourquoi il y a deux cas. 214 214 {{{#!protected ------------------------------------------------------------------ 215 215 ''' … … 423 423 424 424 425 Pour la suite de la séance, récupérez l'archive du tp3 et placez là à côté des tp1 et tp2. Le code est fonctionnel, vous pouvez le tester. Je ne vous fais pas modifier, ou pire écrire, la gestion des threads, mais je vous invite à lire le code, c'est très commenté. Les principaux fichiers modifiés sont `kernel/hcpua.S` pour les fonctions `thread_load()`, `thread_save()` et `thread_launch()` (`app_launch()` a disparu, elle n'est plus utile). Des fichiers sont nouveaux : `kernel/kthread.h` qui contient le code de `thread_create_kernel()`, `thread_yield()`, `thread_exit()`, `sched_switch()` et quelques autres. `common/thread.h' qui contient les prototypes de fonctions communes au noyau et à l'utilisateur et 'ulib/thread.c' qui contient aussi les fonctions `thread_create()`, `thread_yield(), `thread_exit()` mais avec des appels système. Je vous invite vraiment à lire le code, c'est un bon exercice de lire le code des autres, croyez-moi. 425 Pour la suite de la séance, récupérez l'archive du tp3 et placez là à côté des tp1 et tp2. Le code est fonctionnel, vous pouvez le tester. Je ne vous fais pas modifier, ou pire écrire, la gestion des threads, mais je vous invite à lire le code, c'est très commenté. Les principaux fichiers modifiés sont `kernel/hcpua.S` pour les fonctions `thread_load()`, `thread_save()` et `thread_launch()` (`app_launch()` a disparu, elle n'est plus utile). Des fichiers sont nouveaux : `kernel/kthread.h` qui contient le code de `thread_create_kernel()`, `thread_yield()`, `thread_exit()`, `sched_switch()` et quelques autres. `common/thread.h' qui contient les prototypes de fonctions communes au noyau et à l'utilisateur et 'ulib/thread.c' qui contient aussi les fonctions `thread_create()`, `thread_yield(), `thread_exit()` mais avec des appels système. Je vous invite vraiment à lire le code, c'est un bon exercice de lire le code des autres, croyez-moi. Pour lire le code, vous devez suivre les appels lors de l'entrée dans l'application ou les interruptions d'horloge, ce n'est pas une lecture linéaire du fichier (même si ce n'est pas inutile pour voir une vue d'ensemble). 426 426 427 427 Vous pouvez voir la différence entre les fichiers du TME B2 et du TME B3 … … 475 475 476 476 * Le code ci-dessous contient l'application donnée pour ce TP. Nous avons 3 threads : `main`, `TO` et `T1`. 477 * `main` et `T1` se contente d'afficher des messages sur le TTY0 et d'attendre ( une attente activepour ralentir l'affichage des messages).477 * `main` et `T1` se contente d'afficher des messages sur le TTY0 et d'attendre (l'attente active (DELAY) est là pour ralentir l'affichage des messages). 478 478 * `T0` lit le clavier de TTY1 479 479 … … 660 660 }; 661 661 /** 662 * \brief read from the FIFO 663 * \param fifo structure of fifo to store data 664 * \param c pointer on char to put the read char 665 * \return 1 on success, 0 on failure 666 */ 667 static int tty_fifo_pull (struct tty_fifo_s *fifo, int *c) 668 { 669 if (fifo->pt_read != fifo->pt_write) { 670 *c = fifo->data [fifo->pt_read]; 671 fifo->pt_read = (fifo->pt_read + 1)% sizeof(fifo->data); 672 return 1; 673 } 674 return 0; 675 } 676 /** 662 677 * \brief write to the FIFO 663 678 * \param fifo structure of fifo to store data … … 667 682 static int tty_fifo_push (struct tty_fifo_s *fifo, int c) 668 683 { 669 // écrire le code de push 670 } 671 /** 672 * \brief read from the FIFO 673 * \param fifo structure of fifo to store data 674 * \param c pointer on char to put the read char 675 * \return 1 on success, 0 on failure 676 */ 677 static int tty_fifo_pull (struct tty_fifo_s *fifo, int *c) 678 { 679 if (fifo->pt_read != fifo->pt_write) { 680 *c = fifo->data [fifo->pt_read]; 681 fifo->pt_read = (fifo->pt_read + 1)% sizeof(fifo->data); 682 return 1; 683 } 684 return 0; 684 // écrire le code de push en vous inspirant de pull 685 685 } 686 686 }}}