Projet système PC : 2019 - BALLEYDIER Loic, PIERRET Arnaud

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

Équipe Loic Balleydier, Arnaud PIERRET
Encadrants Yves Denneulin , Gregory Mounie, Patrick Reignier


Présentation

ArcheOS.png

L'objectif de ce projet est la réalisation d'un noyau de système d'exploitation à partir d'une base fournie par les enseingants

Equipe

Organisation

Pour la majorité du projet, devant la complexité de celui-ci, nous avons décidé de développer en peer-programming afin de pouvoir mieux assimiler ensemble les différents aspects du projet. En revanche, à partir de la fin de la phase 5, nous nous sommes divisé le travail, l'un travaillant sur la phase 6 et l'autre sur la phase 7, avant de se rejoindre sur la phase 7 pour implémenter les diverses fonctionnalités de notre shell.

Phases de développement

Phase 1 : prise en main de l'environnement

Cette première phase ne pose pas de difficulté particulière.

N'hésitez pas à reprendre le code que vous avez déjà écrit l'année dernière en Langage de Base mais passez du temps a bien le comprendre de nouveau (si vous ne l'aviez pas bien commenté). Tout n'est pas nécessaire, pensez donc à élaguer le code inutile.

Concernant l'environnement, prenez du temps pour comprendre comment lancer GDB et l'utiliser (pour notre part, nous ne l'avons pas fait et nous avons réussi à ne pas l'utiliser jusqu'à la phase 5 où il a été impossible de continuer sans, donc ce n'est pas du temps perdu). Vous pouvez remplacer votre ~/.gdbinit par celui proposé ici qui permet d'avoir une interface plus agréable mais surtout d'afficher tout un tas d'informations utiles lors du débogage.

100 %

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

100 %

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

100 %

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

100 %

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

100 %

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

100 %

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

90 %

Phase d'extension

0 %

Journal de bord

05/06/2019 - Mise en place de l'environnement

  • Mise en place de l'environnement de développement
  • Reprise du code de Logiciel de Base afin de pouvoir écrire dans la console
  • Lecture de la Phase 2 et début de mise en place de la structure de donnée pour les processus
  • Tentative de création et communication entre deux processus (WIP)

06/06/2019 - Mise en place de la communication entre processus

  • Création et communication entre 2 processus via l'appel du context switch manuellement
  • Prise en main de la queue (pour exploitation ultérieure)
  • Implémentation de l'interruption lié au signal d'horloge
  • Appel automatique du context switch via le signal d'horloge

07/06/2019 - Début de l'ordonnancement

  • Traitement du signal d'horloge en fonction d'une fréquence différente à celle de l'horloge (SCHED_FREQ)
  • Implémentation des fonctions permettant de récupérer le pid et la priorité ainsi que changer cette dernière
  • Mise en place d'une file (FIFO) gérant la priorité pour les processus

11/06/2019 - Début de gestion de la filiation

  • Création d'une liste chaînée pour stocker les processus fils d'un parent
  • Mise en place de la fonction exit() pour pouvoir quitter un processus
  • Correction de l'utilisation des adresses de la pile pour pouvoir utiliser les arguments de fonction
  • Tentative de l'implémentation de la fonction waitpid (WIP)

12/06/2019 - Fin de gestion de la filiation

  • Waitpid est terminé
  • Terminaison des processus par kill
  • Support de l'instruction return pour récupérer la valeur
  • Support de l'endormissement des processus
  • Modification de la structure d'ordonnancement
  • Amélioration de la gestion de la mémoire pour les processus terminés

13/06/2019 - Journée de test

  • Tentative de lancement des tests côté kernel jusqu'à 10h
  • Bug fix le reste de la journée

14/06/2019 - Bugfixes et files de messages

  • Fin des bugs fix pour faire passer les 8 premiers tests de test.c
  • Début de mise en place des files de message
  • Réussite des tests 9,10,12,14

17/06/2019 - Fin de la phase 4

  • Fin de la mise en place des files de message (Fin de la phase 4)
  • Changement de structure pour les files de messages afin de respecter mot-à-mots les specifications
  • Compréhension et prise en main de la phase 5

18/06/2019 - Phase 5: Début

  • Réflexion sur la phase 5
  • Tentative de création de processus en mode kernel avec programme de boot

19/06/2019 - Phase 5: Suite

  • Début de l'implémentation du passage du mode kernel au mode user.
  • Bug fix, réussite du test 17

20/06/2019 - Phase 5: Suite 2

  • Bug fix, réussite des tests 11 et 20.
  • Mise en place du passage Ring0 <-> Ring3
  • Ecriture des appels systèmes

21/06/2019 - Fin de la phase 5

  • Debug des tests côté user (tous sauf le 19)
  • Fin de la phase 5
  • Début de l’implémentation du clavier

24/06/2019 - Phase 6 et 7

  • Mise en place de la gestion du clavier
  • Passage du test 19
  • Création d'un shell
  • Début d'écriture de nouveaux appels systèmes (ps)

24/06/2019 - Phase 7

  • Suite de l'écriture des appels systèmes (sys_info,logo,uptime,...)

Difficultés rencontrées

Ressources externes

Pour gérer la liste des fils, nous avons utilisé une liste chainée simple crée par Troy D. Hanson, en licence BSD, opensource. Nous l'avons choisi grâce au conseil d'un groupe de l'année dernière