Projet système PC : 2018 - BERNARD Nicolas, BONACCINI Cyril, BOUSSANT-ROUX Luc, DANH Julien, HUGUENEL Pauline, JULIEN Éloïse, PONCET Loïc

De Ensiwiki
Aller à : navigation, rechercher

Présentation

Ce projet consiste à réaliser un système d'exploitation sur une architecture INTEL à partir de (presque) rien. Dans le cadre de ce projet, nous abordons des thèmes essentiels au fonctionnement des systèmes d'exploitation :

  • création et exécution de processus
  • synchronisation
  • ordonnancement
  • gestion des entrées/sorties (clavier, écran)
  • implémentation d'un interprète de commandes

Il dure tout le second semestre et est suivi d'une soutenance pour présenter l'avancement du projet.

L'équipe

Composée de 7 étudiants en 2A ISI :

  • BERNARD Nicolas
  • BONACCINI Cyril
  • BOUSSANT-ROUX Luc
  • DANH Julien
  • HUGUENEL Pauline
  • JULIEN Éloïse
  • PONCET Loïc

Avancement

Phase 1 - Prise en main de l'environnement

100 %
  • Utiliser Qemu
  • Comprendre comment débugger et coder

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

100 %
  • Gérer la notion de processus et le changement de contexte.
  • Implémenter un timer et les interruptions et un système de temps partagé.

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

100 %
  • Gérer tout ce qui concerne le cycle de vie d'un processus.

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

100 %
  • Implémenter les files de messages.
  • Gérer l'endormissement des processus.

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

75 %
  • Il faut séparer la mémoire du noyau et de l'application.
  • Créer une bibliothèque d'appels vers le noyau.
  • Gérer les niveaux de privilège du processeur [ pas terminé ]

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

100 %
  • Implémenter une console. La gestion de l'affichage écran est déjà gérée depuis la Phase 1, cependant il faut implémenter un pilote de clavier.

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

50 %

Journal de bord

Semaine 1 - 05/02 au 11/02

  • Découverte du projet
  • Prise en main du code et de l'environnement de travail
  • Lecture ensiwiki

Semaine 2 - 12/02 au 18/02

  • Manipulation du code
  • Écriture des premières fonction de la Phase 1
  • Phase 2

Semaine 3 - 26/02 au 04/03

  • Implémentation de la Phase 3
  • Création d'un script bash permettant de lancer plus facilement la simulation

Semaine 4 - 05/03 au 11/03

  • Début d'implémentation de la phase 4
  • file de message, fonction pdelete, pcreate

Semaine 5 - 12/03 au 18/03

  • gestion des files de messages avec queue.h (très compliqué à appréhender ...)

Semaine 6 - 19/03 au 25/03

  • Phase 4 et Phase 5 en parallèle

Semaine 7 - 26/03 au 01/04

  • Gestion de l'allocateur mémoire ... découverte, compréhension du problème

Semaine 8 - 02/04 au 08/04

  • Implémentation de la mémoire virtuelle - Phase 5
  • Début de la phase 6 en parallèle

Semaine 9 - 09/04 au 15/04

  • Phase 5
  • Phase 6

Semaine 10 - 23/04 au 29/04

  • Phase 5 (c'est compliqué ...)
  • Phase 6 --> terminé

Semaine 11 - 30/04 au 06/05

  • Fin de la Phase 5
  • Début de la Phase 7

Semaine 12 - 07/05 au 13/05

  • Débugage des tests
  • Implémentation de la Phase 7

État du rendu et améliorations possibles

Actuellement, notre projet est bien avancé mais tout de même loin d'être terminé. Nous n'avons pas réussi à complètement implémenter le mode user et donc à séparer correctement la mémoire entre le kernel et l'utilisateur. Nous avons un shell opérationnel, dans lequel nous pouvons notamment lancer les tests donnés.

Quant aux améliorations possibles, nous pourrions tout d'abord améliorer la gestion des caractères spéciaux dans le buffer (suppression de tabulation...). Ensuite, notre shell est opérationnel mais nous avons implémenté très peu d'appels systèmes. Nous pourrions donc coder d'autres fonctionnalités, par exemple la lecture et l'écriture dans un fichier. De plus, notre gestion de la mémoire n'est pas optimale, notamment pour les tables de pagination qui sont très lourdes.

Apports

Le plus gros apport de ce projet a été de nous faire mieux connaître le fonctionnement d'un OS. Pour nous, l'OS était une grosse boîte noire dont nous ignorions le fonctionnement, et ce projet nous a ouvert les yeux sur la difficulté de le créer.

Nous nous sommes également améliorés dans la gestion d'un gros groupe de travail, dans notre communication ainsi que dans l'utilisation de git.

Difficultés rencontrées

  • Débuguer les appels systèmes a été particulièrement ardu comme nous n'avons pas réussi à breaker dans les fichiers des appels systèmes.
  • L'utilisation de la pile était compliquée, nous avons eu beaucoup de problèmes pour comprendre quelle était sa taille.
  • Travailler à 7 : il était dur de paralléliser les tâches. Des solutions ont été trouvés grâce au pair programming. Ce qui nous permettait aussi de coder plus efficacement.
  • La documentation ensiwiki est très compliquée à prendre en main à cause du très grand nombre de ramification qu'elle contient. Il était très facile de s'y perdre, ou de ne pas trouver l'information voulue.
  • Nous avons perdu trop de temps à comprendre le système de pagination qui était, avec du recul, plus simple à mettre en place que la protection de la mémoire.

Ressources externes