Projet système PC : 2019 - AJDOR Othmane, Klein Louis : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(Phase 3)
(Avec les queues)
Ligne 114 : Ligne 114 :
  
 
<code>
 
<code>
p *(type_queue)((void *)queue.next-0x8)
+
p *(type_queue)((void *)queue.next-<entier>)
 
</code>
 
</code>
  
Le 0x8 étant trouvé par la commande suivante :  
+
<entier> étant trouvé par la commande suivante :  
  
 
<code>
 
<code>

Version du 14 juin 2019 à 14:48

Doot.gif
Titre du projet doot
Cadre Projet système

Équipe Othmane AJDOR, Louis Klein
Encadrants Yves Denneulin , Gregory Mounie, Patrick Reignier


Présentation

Equipe

Planning

Planning prévisionnel

Planning effectif

Phases de développement

Phase 1 : Prise en main de l'environnement

95 %

Phase 2 : Création et lancement de processus de niveau noyau

95 %

Phase 3 : Ordonnancement, création dynamique et terminaison de processus de niveau noyau

95 %

Phase 4 : Gestion des communications et synchronisation de processus de niveau noyau

0 %

Phase 5 : Séparation des espaces mémoire noyau et utilisateur : gestion de processus utilisateur

0 %

Phase 6 : Gestion du clavier et implémentation d'un pilote de console

0 %

Phase 7 : Implémentation d'un interprète de commandes

0 %

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

14/06/2019 - Ordonnancement 5

  • bugfix pour passer les tests 5 à 8

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

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