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

De Ensiwiki
Aller à : navigation, rechercher
(Réalisation des différentes phases du projet)
(Phase 1 : prise en main de l'environnement et gestion de l'affichage à l'écran)
Ligne 28 : Ligne 28 :
  
 
05/06/2019 : phase 1 terminée (sauf tests)
 
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 ===
 
=== Phase 2 : Création et lancement de processus de niveau noyau ===

Version du 25 juin 2019 à 12:26

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 emetteurs et recepteurs 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, 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

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