Projet système PC : 2019 - AJDOR Othmane, Klein Louis
![]() | |
---|---|
Titre du projet | doot |
Cadre | Projet système
|
Équipe | Othmane AJDOR, Louis Klein |
Encadrants | Yves Denneulin , Gregory Mounie, Patrick Reignier |
Sommaire
- 1 Présentation
- 2 Equipe
- 3 Planning
- 4 Phases de développement
- 4.1 Phase 1 : Prise en main de l'environnement
- 4.2 Phase 2 : Création et lancement de processus de niveau noyau
- 4.3 Phase 3 : Ordonnancement, création dynamique et terminaison de processus de niveau noyau
- 4.4 Phase 4 : Gestion des communications et synchronisation de processus de niveau noyau
- 4.5 Phase 5 : Séparation des espaces mémoire noyau et utilisateur : gestion de processus utilisateur
- 4.6 Phase 6 : Gestion du clavier et implémentation d'un pilote de console
- 4.7 Phase 7 : Implémentation d'un interprète de commandes
- 5 Journal de bord
- 6 Difficultés rencontrées
- 7 Ressources
Présentation
Equipe
- Othmane AJDOR (filière apprentissage)
- Louis Klein (filière apprentissage)
Planning
Planning prévisionnel
Planning effectif
Phases de développement
Phase 1 : Prise en main de l'environnement
Phase 2 : Création et lancement de processus de niveau noyau
Phase 3 : Ordonnancement, création dynamique et terminaison de processus de niveau noyau
Phase 4 : Gestion des communications et synchronisation de processus de niveau noyau
Phase 5 : Séparation des espaces mémoire noyau et utilisateur : gestion de processus utilisateur
Phase 6 : Gestion du clavier et implémentation d'un pilote de console
Phase 7 : Implémentation d'un interprète de commandes
Journal de bord
Phase 1
05/06/2019 - Mise en place de l'environnement
- Prise en main de code de base et de l'environnement de travail
- Mise en place des primitives d'affichage
Phase 2
06/06/2019 - Gestion de processus
- Mise en place de changement de contexte inter-processus
- Implementation des fonctions d'execution des processus
07/06/2019 - Gestion d'horloge et des interruptions
- Mise en place de des fonctions de gestion d'horloge
- Implementation des fonctions de traitement d'interruptions
- Gestion du partage du temps CPU entre les processus
Phase 3
07/06/2019 - Ordonnancement
- Mise en place d'un ordonnanceur classique
- Amélioration de l'ordonnanceur en utilisant une queue FIFO
- Endormissement des processus
11/06/2019 - Ordonnancement 2
- Correction de quelques bugs d'endormissement
- Allocation dynamique des processus
- Ajout d'une fonction intermédiaire pour intercepter les valeurs de retours des processus
12/06/2019 - Ordonnancement 3
- Améliorations mineurs de l'ordonnancement
- Gestion des processus tués, primitives exit et kill
- Gestion des valeurs de retours des processus
- Mise en place de waitpid pour attendre la terminaison des process
13/06/2019 - Ordonnancement 4
- Correction de quelques bugs de desallocation des processus
- Création des primitives chprio et getprio
- bugfix pour passer les tests 1 à 4
Phase 4
13/06/2019 - File de Message 1
- prototypage des files de messages
14/06/2019 - File de Message 2
- implémentation des files de messages et debug
Difficultés rencontrées
Avec les queues
Les queues du fichiers "queue.h" ne sont pas très simple à débuguer ! Pour afficher un elemts de la queue, on utilise la commande suivant dans gdb :
p *(type_queue)((void *)queue.next-0x8)
Le 0x8 étant trouvé par la commande suivante :
p &((type_queue *)0)->link
GDB
gdb ne permet malheureusement pas de faire des reverse-step sur une target remote. Dommage !
Ressources
Pour gérer la filiation, utilisation de ce fichier de liste chainées : https://troydhanson.github.io/uthash/utlist.html
Pour le debug, cette page bien pratique : https://wiki.osdev.org/Exceptions
Une config bien sympa de gdb : https://github.com/cyrus-and/gdb-dashboard