Projet système PC : 2019 - COUILLER Célia, COUPIGNY--WAROT Chloé : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(Difficultés rencontrées)
(Difficultés rencontrées)
Ligne 199 : Ligne 199 :
 
Célia à repris les bases de ce qui avait été fait en recoupant les spécifications avec la compréhension que nous avions de la phase 4 et les conseils que nous avons pu recevoir, tandis que Chloé s'est attelé à la compréhension des tests fournis afin d'établir des éléments de spécifications supplémentaires, ou que nous avions pu oublier, et commencer à résoudre les problèmes.
 
Célia à repris les bases de ce qui avait été fait en recoupant les spécifications avec la compréhension que nous avions de la phase 4 et les conseils que nous avons pu recevoir, tandis que Chloé s'est attelé à la compréhension des tests fournis afin d'établir des éléments de spécifications supplémentaires, ou que nous avions pu oublier, et commencer à résoudre les problèmes.
  
Cette méthode bien que difficile car nous devions travailler en parallèle (et donc parfois perdre du temps en faisant la même chose sans le savoir) à très bien fonctionné, nous avons toutes les deux bien compris les problèmes, avons pris en main le code de manière pratique et avons réussi en discutant à combler la majorité de nos problèmes.
+
Cette méthode bien que difficile et non optimisée pour ce projet, a bien fonctionnée. En effet nous avions toutes deux besoin de coder par nous même pour comprendre et réflechir. Ce sont ces  façons de travailler et de comprendre les choses qui nous empechaient d'appliquer une methode de travail comme le pair programming, ou autre methode necessitant une travail commun.
 +
Néanmoins, nous en avons pu retiré un résultat positif, cette méthode à très bien fonctionnée, nous avons toutes les deux bien compris les problèmes, avons pris en main le code de manière pratique et avons réussi en discutant à combler la majorité de nos problèmes.

Version du 25 juin 2019 à 12:45

Présentation

Equipe

Membres

Planning

Réalisation des différentes phases du projet

Phase 1 : prise en main de l'environnement et gestion de l'affichage à l'écran

100 %

Les objectifs de cette phase sont les suivants :

Chacun des membres du binôme doit avoir un environnement de travail fonctionnel. Il faut également faire fonctionner et tester les primitives d'affichage.

Nous avons donc pris le temps de découvrir le sujet, d’installer la base de l'environnement de travail comme indiqué ici.

Nous avons ensuite repris le travail effectué en Logiciel de Base l'an dernier pour implémenter la fonction console_putbytes nécessaire au fonctionnement de printf (merci William !).

Nous avons commencé à regarder le fonctionnement des tests, mais rien mis en place pour le moment.

05/06/2019 : phase 1 terminée (sauf tests)

Note : pour utiliser les tests fournis (pour le mode user) en mode kernel, la manipulation n'est pas évidente (il faut ajouter un fichier assembleur entre autre) nous avons donc finalement eu recours à l'aide des enseignants.

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

100 %

L'objectif de cette phase est de gérer les processus et leur ordonnancement.

Une bonne journée a été nécessaire à programmation d'une fonction permettant la création de processus, ainsi qu'au lancement de ce dernier.

Une deuxième journée de travail, nous aura permis d'être capable d’ordonnancer les processus par priorité.

Nous avons pour la gestion des interruptions pu nous appuyer sur les codes de Logiciel de Base de l'an dernier. Le gros du travail aura été du debug sur les création de processus afin d'obtenir des info correctes.

06/06/2019 : création de processus 07/06/2019 : interruption + debug processus + debug phase 1

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

100 %

14/06/19 : les tests 1 à 5 passent en mode kernel

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

100 %

Déroulement

Le développement de cette étape s'est fait en quatre phases.

Première phase : Développement commun des primitives de base (psend, pdelete, preceive, pcount, pcreate, preset) en se basant sur une première lecture des specs fournies dans l'ensiwiki. A la fin de ce développement et après quelques corrections, les tests 10, 11, 12 sont passés.

Deuxième phase : Cette deuxième phase à démarrée suite à l’échec du test 13. Pour rappel ce test vérifiait l'ordre entre les processus émetteurs et récepteurs sur une file, ainsi que les changement de priorité. De très nombreux soucis ont pu être découvert dans notre code. Les modifications étant nombreuses et importantes, et nos idée pour résoudre ces-derniers différentes, nous avons décidé de séparer notre travail et avancer chacune de notre coté. Les bug résolus sont les suivants : mise a jour de la fonction chprio développée durant la phase 3, afin de replacer dans la file les processus en attente d'écriture ou lecture. Correction du passage de message. Correction des incréments permettant de compter le nombre de messages.

Cette phase s'est terminée lorsque le test13 passait chez une de nous deux. En revanche à nous le test 11 ne passait plus.

Troisième phase : Cette phase a été relativement rapide et nous a permise de faire passer les tests 14, 15, et 16 sans d'importantes modifications. Le test 11 et 20 ne passaient toujours pas.

Quatrième phase : Cette phase à été une phase de "nettoyage". En effet les développement faits pour faire passer les tests 13 14 15 et 16 étaient plutôt brouillons, nous nous sommes donc attelé à ré-écrire notre code pour le rendre plus propre. A l'issue de ce nettoyage, tous les tests de la phase 4 (c'est à dire les tests 10, 11, 12, 13, 14, 15 ,16, 20) passaient.

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

0 %
Initialisation du page directory
Module de mapping
Edition du context switch
Passage en mode User (Ring 3)
Gestion de la symbol_table

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

Semaine 1

05/06/19

Prise en main de l'environnement et du git

Implémentation de la primitive printf, et du curseur

06/06/19

Création de processus

Implémentation du contexte switch

Début des primitive kill, getPid, getPrio

Semaine 2

10/06/19

Implémentation de l'horloge

Déclenchement du context switch sur l'interruption du l'horloge

11/06/19

Implementation de la primitive sleep

Implementation du mécanisme pere fils

12/06/19

Debug pour lancer les tests coté kernel

13/06/19

Implementation de la primitive exit, waitPid

14/06/19

Implementation en assembler de la primitive return

Debug de la primitive chprio

Debug pour passage des tests 1 à 7

Semaine 3

17/06/19

Debug suite à une perte d'un commit faisant passer les test 6 et 7

Debug pour le passage des test 10, 11, 12, 13

Debut de l'implementation des files de messge (psend, pdelete, pcreate)

18/06/19

Developpement des files de messages (psend, pdelete, pcreate, pcount, preceive)

19/06/19

Debug test 13

20/06/19

Debug test 14 15 16

21/06/19

Affichage du nom de l'OS et suite des débugs

Semaine 4

24/06/19

Nettoyage du code après merge du code

Debug test 11, 12, 13, 14, 15, 16, 20

25/06/19

Preparation a la soutenance Debug test 8

Difficultés rencontrées

Nous avons eu des difficultés sur deux domaines en particulier : La compréhension des spécifications. Nous n'arrivions pas toujours à comprendre ce qui était attendu ou nécessaire dans chaque phase en terme d'implémentation. Pour pallier à cela nous avons discuter avec les autres équipes afin de trouver ensembles des besoins que nous avions peut être mal compris au départ. Les enseignants nous ont égaiement donné des indications.

La deuxième difficultés à été la phase 4 sur laquelle nous avons passé beaucoup de temps :

En effet au début de celle ci, après les premières implémentations et la mise en place des tests, nous nous sommes aperçues d’énormément d'erreur et d’incompréhension dans notre code, qu en correspondait pas aux spécification voir ne fonctionnait simplement pas.

Nous avons alors choisi de travailler de manière séparées.

Célia à repris les bases de ce qui avait été fait en recoupant les spécifications avec la compréhension que nous avions de la phase 4 et les conseils que nous avons pu recevoir, tandis que Chloé s'est attelé à la compréhension des tests fournis afin d'établir des éléments de spécifications supplémentaires, ou que nous avions pu oublier, et commencer à résoudre les problèmes.

Cette méthode bien que difficile et non optimisée pour ce projet, a bien fonctionnée. En effet nous avions toutes deux besoin de coder par nous même pour comprendre et réflechir. Ce sont ces façons de travailler et de comprendre les choses qui nous empechaient d'appliquer une methode de travail comme le pair programming, ou autre methode necessitant une travail commun. Néanmoins, nous en avons pu retiré un résultat positif, cette méthode à très bien fonctionnée, nous avons toutes les deux bien compris les problèmes, avons pris en main le code de manière pratique et avons réussi en discutant à combler la majorité de nos problèmes.