Projet système PC : 2021 - ADIM Ayoub, BEN-AMAR Hassan

De Ensiwiki
Aller à : navigation, rechercher
Project schedule.png
Titre du projet Projet système
Cadre Projet système

Équipe Hassan BEN-AMAR Ayoub ADIM
Encadrants Yves Denneulin , Gregory Mounie, Patrick Reignier

Présentation

cette page contient une description de l'avancement du projet système réalisé en binôme entre Ayoub ADIM et Hassan BEN-AMAR qui vient à la suite du cours système d'exploitation afin d'approfondir les connaissances et de fixer les idées. ce projet vise à l'implantation d'un noyau de système d'exploitation (kernel) en plusieurs étapes sur une architecture Intel x86, et pour valider le code et passer aux autres étapes avancés, il faut passer des tests.

Équipe

Hassan BEN-AMAR

Ayoub ADIM

Organisation

on a commencé à coder en parallèle, après on a opté à la programmation collective pair-programming. Nous avons codé en pair-programming tout au long des phases réalisées. la lecture de la documentation est faite en groupe, après il y a des discussions auteur afin de ne pas déranger les encadrants par des questions auxquelles on peut répondre. Ayoub a réalisée la majorité du développement tandis que Hassan était chargé de suivre les développements, corriger, faire les tests et de la création du wiki.

Phases du développement

Phase 1 : Prise en main de l'environnement

100 %

cette phase permet de prendre en main l'environnement de développement, son objectif est l'implémentation de l'affichage et de réussir à utiliser la fonction "printf", elle est importante dans le sens où l'affichage sera beaucoup utilisée dans la suite.

nous conseillons de bien lire les consignes doucement pour ne pas perdre du temps à déboguer et de solliciter les encadrants.

la phase 1 est très bien guidé Roadmap : Phase 1

Phase 2 : Gestion de la notion de processus et d'interruption

100 %

cette phase vise à gérer les processus et les interruptions d'horloge, il y a deux parties essentiels :

  • implémentation de la gestion des processus : TP PSE Processus.
  • implémentation du timer et la gestion interruptions : TP PSE PIT.

à la fin de cette phase, il faut avoir l'heure en haut à droite qui compte aussi la durée à partir du lancement du noyau.

Phase 3 : Suite du développement des processus (ordonnancement, terminaison, endormissement et filiation)

100 %

la phase trois est la suite logique de la phase deux, il y a cinq parties clés à faire :

1. Ordonnancement des processus TP PSE sur l'ordonnancement

2. Création dynamique des processus Démarrage d'un nouveau processus

3. Endormissement des processus TP PSE sur l'endormissement

4. Terminaison des processus TP PSE sur la terminaison

5. Filiation des processus


cette phase demande assez d'efforts en terme de compréhension de la documentation, il faut lire très bien les consignes.

Phase 4 : Endormissement et files de messages

100 %

L'objet de cette phase est d'implémenter les files de messages et l'endormissement des processus. L'endormissement ayant été réalisé lors de la phase 3 il s'agit principalement de l'implémentation de la file de message à jeton. cette phase est assez fastidieuse, elle demande assez de concentration et de flexibilité. on a beaucoup changer notre code et nos structures afin d'adapter ce derniers aux spécifications du cahier de charges. le GDB est notre ami pour déboguer, les tests sont d'une utilité importantes pour identifier les soucis qui restent dans le code. le débogage nous a pris beaucoup de temps, mais nous conseillons de bien se concentrer au moment de l’implémentation afin d'éviter au maximum la partie débogage.

Phase 5

0 %

Non réalisé.

Phase 6

0 %

Non réalisé.

Phase 7

0 %

Non réalisé.

Extensions

Non réalisé.

Tests Kernel

80 %

Tests passés 1 à 17.

Journal de bord

Semaine 1

Lundi 7 juin

Phase 1 :

  • Lecture de la documentation
  • Prise en main de l'environnement
  • Développement de la fonctionnalité de l'affichage.

Mardi 8 juin

Phase 1 :

  • suite des développement de la fonctionnalité de l'affichage.
  • relecture de la documentation pour vérifier ce qu'on a fait.
  • affichage de "hello world "

Mercredi 9 juin

Phase 2:

  • lecture de la documentation sur la phase 2.
  • la gestion du temps pour l'ordonnancement, construction du fichier timer.c.

Jeudi 10 juin

Phase 1 et 2:

  • finition de la gestion du temps et les interruptions d'horloge.
  • correction de quelques erreurs.

Vendredi 11 juin

Phase 3:

  • Ordonnancement des processus.
  • lecture de la documentation.
  • lecture des rapports des anciens.

Semaine 2

Lundi 14 juin

Phase 3:

  • Refactoring de la liste d'ordonnancement (pour utiliser les fonctions de queue.h)
  • Fin de l'ordonnancement
  • Création dynamique des processus.

Mardi 15 juin

Phase 3:

  • Endormissement des processus
  • lecture des rapports.
  • Mise en place des tests
  • Correction des parties précédentes via les tests

Mercredi 16 juin

Phase 3:

  • Terminaison des processus
  • Correction des parties précédentes

Jeudi 17 juin

Phase 3:

  • Filiation des processus
  • lancement des tests et débogage avec GBD.

Vendredi 18 juin

Phase 3:

  • changement des structures implémentées : optimisation.
  • lecture des rapports des anciens élèves.

Semaine 3

Lundi 21 juin

Phase 4:

  • lecture de la documentation de la phase 4 (les files de messages ).
  • implémentation des fonctions ( pcreate, pdelete )

Mardi 22 juin

Phase 4:

  • Fin du développement des deux fonctions.
  • Lancement des tests via un processus user et correction des bugs sur les tests déjà passé auparavant (8 et 9)
  • Nettoyage du code et écriture de commentaires

Mercredi 23 juin

Phase 4:

  • implémentation des autres fonctions ( psend, preceive ...)
  • deboggage des fonctions implémenté en utilisant les tests donnés par le prof.

Jeudi 24 juin

Phase 4:

  • débogage avec GDB.
  • les tests 11 à 16 ont été passés avec succès.

Difficultés

ce projet passionnant pose quelques difficultés comme :

  • la compréhension de la documentation : C'est la principale difficulté que nous avons rencontrée. En effet, pour les phases très orienté sur la configuration du système (gestion de pile/mémoire, création des processus, etc ...) les problèmes et bugs venait d'une mauvaise compréhension de la documentation ou des spécifications. Heureusement que certain anciens élèves ont mis des conseils sur leurs pages wiki qui nous ont permis de nous débloquer plusieurs fois.
  • organisation, en fait, on conseille de faire le pair-programming au lieu que chaque membre code de son côté, c'est une perte énergie et du temps.
  • Débbugage Une autre difficulté rencontrée fut la partie débuggage du projet, nottament lorsque nous lancions les tests fournis en mode user. En effet, au vu de la complexité du programme il devenait de plus en plus complexe de trouver l'origine des bugs.

Ressources

  • Mini projet système - Logiciel de base 1AA
  • Spécification du projet système - La documentation de base, éparse mais complète
  • OSdev.org - Une référence dans le développement d'OS, mais très détaillée et qui contient des informations allant souvent au delà de la spec
  • slides archi - Les slides de cours sur les parties spécifiques
  • Docs Intel - Les documentations Intel, des milliers de pages, mais parfois un schéma ou une info qui nous a été utile