Projet système PC : 2020 - BARET Alexis, GRISSI Wafi, PICARLE Alex

De Ensiwiki
Aller à : navigation, rechercher
Chaos mainscreen.PNG
Titre du projet Chaos
Cadre Projet système

Équipe Alexis BARET, Wafi GRISSI,Alex PICARLE
Encadrants Yves Denneulin , Gregory Mounie, Patrick Reignier


Présentation

Voici la page de présentation du Projet Système réalisé dans le cadre de notre 2ème année en apprentissage à l'ENSIMAG.

L'objectif de ce projet est la réalisation, à partir d'un squelette fourni, d'un noyau de système d'exploitation sur une architecture Intel x86.

Organisation

Gestion du projet

Les tâches composants le projet sont parfois difficilement sécables pour permettre a plusieurs personnes de travailler indépendamment sur un point en particulier, puis de rassembler les briques en une itération globale. Donc pour ces tâches atomiques nous avons opté pour utiliser le partage d'écran de Discord. Le reste de l'équipe fournissant une aide à la réflexion et à la compréhension de la documentation. Pour les tâches que l'on pouvait partager, chacun pouvait réaliser son itération et la mise en commun se faisait avec Gitlab.

GitLab

Nous avions au départ la branche master, qui au final sera celle utilisé pour le rendu. Entre temps, nous avons travaillé en gitflow, la branche de master étant la branche release. Nous avons également ajouté une branche dev pour synchroniser nos développement. Enfin, une branche par feature (et donc parfois une branche par phase) ce qui nous donne :

  • master
  • dev
  • clock
  • processus
  • token_ring
  • usermode
  • keyboardAndConsole
  • shell

Phases de développement

Phase 1 : prise en main de l'environnement

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

100 %

Tests Kernel

100 %

Tests User

100 %

Journal de bord

Journal de bord du projet

08/06/2020

  • création des fichiers : kernel/processus.h , kernel/processus.c pour la gestion des processus
  • création d'un fichier : kernel/inttypes : maitrise de la taille des int
  • création de la fonction console_putbytes : VGA.c, VGA.h

09/06/2020

  • début d'implémentation des interruptions et du timer
  • creation de processus
  • début du context_switch

 10/06/2020

  • finition du timer et des interruption
  • gestion de la priorité processus
  • finition du context_switch : faire attention à la structure de processus qui si n'est pas bien pensé, peut poser des problèmes.

 11/06/2020

  • lancement des tests pour vérification
  • corrections sur l'horloge (ajout SCHEDFREQ pour l'ordonnancement)
  • début phase 4 : lecture de la doc sur l'implémentation des anneaux à jetons

 12/06/2020

  • structure de files de messages + pcreate + insert (pseudo psend) implémentés
  • refactor du code des processus (exit,waitpid,getprio,chprio,getid)
  • ajout de la fonction exit des processus
  • ajout de la fonction start des processus

15/06/2020

  • première itération de psend et preceive, ajout de pcount
  • premiers tests de communications entre deux processus avec les files de messages
  • passage des tests kernel 5 et tentative 6
  • bugfix sur chprio
  • ajout/refactor de kill & exit

 16/06/2020

  • implémentation de pdelete et preset
  • passage du test 6
  • travail sur la libération des files, destruction des messages

17/06/2020

  • modification de la structure des processus pour ajouter des attributs lés aux files de messages
  • passage des tests kernel de 1 à 10 (excepté le 6 et le 8)
  • fix test 4, passage test 7
  • bugfix sur le timer

18/06/2020

  • passage des tests de 1 à 12
  • tentative test 13
  • correction de bugs sur les files de messages
  • patch sur kill, exit & waitpid

19/06/2020

  • passage des tests kernel de 1 à 17 inclus
  • nettoyage et documentation du code des files de messages
  • finalisation de la phase 4, début de la phase 5 : séparatin mode kernel - mode user

22/06/2020

  • séparation user - kernel : creation de la pile user
  • ajout de l'appel du traitant 49 (traitant49.s + traitant49.h)
  • tentative de passage entre les deux modes

24/06/2020

  • Debuggage pour faire passer tous les tests
  • Implémentation de la gestion clavier (traitant 33 + utilisation de l'automate)

25/06/2020

  • creation du shell (phase 7)
  • implémentation de quelques commandes shell

26/06/2020

  • mise à jour de la documentation
  • finitions / nettoyage du code

Difficultés rencontrées

Les principales difficultés que l'on a rencontrées sont de l'ordre de la compréhension, il faut bien prendre le temps de comprendre les principes pour visualiser leur implémentation. Ne pas hésiter à recommencer une partie du code depuis le début plutôt que de s'enfoncer dans des sur-bugs. Nous vous conseillons de regarder en détails la documentation et la spec, de s'inspirer des infos et conseils donnés par les projets des années précédentes qui parfois peuvent donner de bonnes astuces. Ne pas hésiter à voir avec un professeur s'il y a une incohérence dans la spec/doc, cela peut être aussi un problème de compréhesion.

Il est aussi important de prendre en main GDB, de voir les options qui existent : plus on peut connaître de détails sur une situation où ça crash et plus il est facile de s'en sortir.

Problème d'ordre de ld des fichiers assembleurs: si vous rencontrez ce problème de fonction qui n'est pas à la bonne adresse mémoire (et qui du coup fait échouer l'exécution sur un saut), vérifiez bien que les fichiers .S soient linkés correctement après le make (partie $(LD) du makefile côté user). Le crt0.S doit toujours être le premier de la liste, si ce n'est pas le cas l'origine du problème peut être multiple (versions, encodage...) il faut alors rentrer la liste à la main dans le bon ordre.

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