Projet système PC : 2019 - BOUDERBALA Matthias, FIESCHI Philémon, GAULT Melvin, LOUIS-TISSERAND Théo, MILIONI Pierre, POLLIEN Baptiste

De Ensiwiki
Aller à : navigation, rechercher
ProjetOS.png

Présentation de l'équipe

Membres

L'équipe est composée de 6 étudiants, dont 4 en ISI et 2 en SEOC :

  • Matthias BOUDERBALA (SEOC)
  • Philémon FIESCHI (ISI)
  • Melvin GAULT (ISI)
  • Théo LOUIS-TISSERAND (ISI)
  • Pierre MILIONI (ISI)
  • Baptiste POLLIEN (SEOC)

Répartition du travail

La répartition du travail s'est faite en fonction des différentes phases. Nous avons scindé l'équipe en petits groupes qui ont travaillé chacun sur différentes phases. Cette organisation a conduit à une charge de travail plus importante pour l'équipe chargée de la phase 5, phase la plus complexe. Par anticipation de cette charge de travail plus élevée, nous avons décidé de faire une plus grosse équipe pour cette phase (3 personnes).

Notre projet

Résumé

Dans le cadre du cours de PCSEA, nous avons développé un système d'exploitation basique fonctionnant sur processeur Intel (x86). Notre système présente les fonctionnalités suivantes :

  • L'isolation complète entre le niveau de privilège noyau et l'utilisateur, aussi bien pour l'exécution que pour la protection de la mémoire.
  • La possibilité de créer dynamiquement des processus utilisateurs.
  • La communication et le partage de mémoire entre processus, avec des mécanismes de partage de pages et de files de messages.
  • La possibilité de synchroniser des processus avec des sémaphores.

Notre système est également interactif avec l'implémentation de notre shell. Vous pouvez retrouver le binaire de notre système d'exploitation ci-dessous :

Fichier:KernelKassOS.bin.zip

Les difficultés rencontrées

Au cours du projet, nous avons rencontrés 2 difficultés majeures :

  • La compréhension des files de message : les spécifications données étaient parfois difficiles à appréhender. Certains points ont été mal compris et ont donc été mal implémentés (notamment les primitives psend et preceive). Cela a eu pour conséquence de nombreux bugs non détectés qui ont dû être corrigés plus tard lors des tests user, ce qui a demandé alors beaucoup de temps et de ressources. Pour être plus efficaces, nous aurions dû regarder plus tôt le contenu des tests pour avoir tous les détails nécessaires.
  • La compréhension du passage au mode utilisateur (phase 5) : dans cette étape tout était complexe, de la compréhension des spécifications à leur réalisation. C'est la phase qui a demandé le plus de temps de travail.

Extension

Pour l'extension, nous avons décidé de réaliser les sémaphores. Notre implémentation correspond à l'"API des sémaphores" de la spécification du projet sur l'Ensiwiki.

  • Nous avons ainsi implémenté les primitives scount, screate, sdelete, sreset, signal, signaln, try_wait et wait.
  • Nos sémaphores sont modélisés par des structures contenant un identifiant, un compteur, ainsi que deux listes chaînées contenant les processus bloqués.
  • Nous utilisons aussi une liste chaînée afin de trouver le prochain identifiant libre, pour la fonction screate.
  • Afin de réussir à faire passer certains tests, et comme les spécifications des sémaphores peuvent sembler ambiguës, nous avons notamment fait le choix de libérer les processus bloqués non pas par ordre d'arrivée, mais par ordre de priorité.

Nous avons par ailleurs ajouté un test (numéro 23) pour vérifier que nous traitons bien l'exception General Protection Fault levée lorsqu'une instruction privilégiée est exécutée en mode user.

Étapes du projet et leur avancement

Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6 Phase 7 Phase d'extension
100 %
100 %
100 %
100 %
100 %
100 %
100 %
100 %

Pour plus de détails sur le contenu de chaque phase, merci de vous référer à la page Projet système : roadmap.

Journal de bord

Ci-dessous sont détaillées toutes les séances encadrées de PCSEA et les tâches que nous avons effectuées pendant ces séances. Cela permet d'avoir une idée de notre avancement tout au long du semestre. Bien sûr, nous avons également beaucoup travaillé sur le projet en dehors des séances, donc ce planning n'est pas à prendre à la lettre.

Séance du 06/02/19

  • Lecture du sujet
  • Début de la prise en main de l'environnement de développement
  • Configuration des machines personnelles

Séance du 08/02/19

  • Fin de la prise en main de l'environnement de développement
  • Début de la gestion de l'affichage à l'écran

Séance du 13/02/19

  • Fin de la gestion de l'affichage à l'écran
  • Répartition des tâches

Séance du 15/02/19

  • Gestion de l'horloge
  • Gestion de la notion de processus
  • Implémentation du changement de contexte et du partage de temps entre deux processus (au niveau noyau)

Séance du 20/02/19

  • Gestion de l'ordonnancement FIFO avec priorité
  • Gestion de la création dynamique de processus

Séance du 22/02/19

  • Gestion de la terminaison des processus
  • Gestion de l'endormissement des processus
  • Début d'implémentation des files de messages

Séance du 06/03/19

  • Finalisation de la phase 3 (ordonnancement, ...)
  • Avancement de la phase 4 (files de messages)
  • Début de la compréhension de la phase 5 (séparation des espaces mémoire noyau et utilisateur)

Séance du 08/03/19

  • Finalisation de la phase 4
  • Lecture de toute la documentation sur la phase 5
  • Adaptation des tests pour le mode user au mode kernel

Séance du 13/03/19

  • Fin de l'implémentation de la phase 4, début du debug de la phase 4
  • Début de la phase 5
  • Adaptation des tests pour le mode user au mode kernel - suite

Séance du 15/03/19

  • Debug de la phase 4
  • Avancement de la phase 5
  • Adaptation des tests pour le mode user au mode kernel - suite

Séance du 20/03/19

  • Tests de la phase 4
  • Avancement de la phase 5
  • Adaptation des tests pour le mode user au mode kernel - suite

Séance du 22/03/19

  • Test et débug de la phase 4
  • Avancement de la phase 5
  • Adaptation des tests pour le mode user au mode kernel - suite

Séance du 27/03/19

  • Test et débug de la phase 4
  • Avancement de la phase 5
  • Debug pour faire passer les tests

Séance du 29/03/19

  • Fin du débug de la phase 4
  • Avancement de la phase 5
  • Debug pour faire passer les tests

Séance du 03/04/19

  • Avancement de la phase 5
  • Renseignement et lecture sur la phase 7
  • Debug pour faire passer les tests

Séance du 05/04/19

  • Avancement de la phase 5
  • Début de la phase 7
  • Adaptation des tests pour le mode user au mode kernel - suite

Séance du 10/04/19

  • Avancement de la phase 5
  • Début de la phase 7

Séance du 12/04/19

  • Avancement de la phase 5
  • Début de la phase 7

Séance du 17/04/19

  • Avancement de la phase 5
  • Avancement de la phase 7

Séance du 19/04/19

  • Fin de la phase 5
  • Avancement de la phase 7

Séance du 03/05/19

  • Test et debug de la phase 5
  • Debug pour faire passer les tests en mode user
  • Début de la phase 6
  • Début de l'extension

Séance du 07/05/19

  • Avancement de la phase 6
  • Avancement de la phase 7
  • Debug de tests

Travail personnel (non encadré)

  • Fin de la phase 6
  • Fin de la phase 7
  • Fin de l'extension
  • Debug de tests
  • Finalisation du projet