Projet système PC : 2018 - MABBOUX Jérémy, VENCON Martin

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

Équipe Jérémy Mabboux, Martin Vençon
Encadrants Julie Dumas , Gregory Mounie, Patrick Reignier


Présentation

Le projet de système a pour objectif le développement d'un noyau de système d'exploitation sur une architecture Intel. Ce noyau devra être minimaliste et permettre la création, l’exécution, la synchronisation et l’ordonnancement des processus, la gestion des entrées sorties et l'implémentation d'un shell.

Journal de bord

Première semaine

7 juin 2018

Lors de la première journée, nous avons assisté à la présentation brève du projet système par les enseignants. Puis, nous avons integré le code concernant l'affichage ue nous avions pu réaliser lors des séances de "Logiciel de base" de l'année précédente. Nous avons également pu commencer l'intégration du traitant pour le timer et le travail sur le context switch. La journée s'est terminée avec un context switch semi-fonctionnel.

8 juin 2018

Lors de cette journée, nous avons pu finaliser la phase 2 concernant le context switch et terminer l'ordonnanceur ainsi que la création dynamique de processus de la phase 3. A la fin de cette journée, presque toutes les fonctionnalités de la phase 3 sont terminées. Il reste le exit et le waitpid à terminer.

Deuxième semaine

11 juin 2018

Nous avons pu commencer la phase 4 : implémentation des structures et des primitives de fonctions associées sans la prise en compte des listes de processus bloqués. Nous avons également profité de cette journée pour commencer la mise en place des tests. La fin de la phase 3 est toujours en cours de développement.

12 juin 2018

Nous avons pu terminer la phase 4 et se concentrer sur des phases de tests et de debug concernant la phase 3.

13 juin 2018

Cette journée a été entièrement consacrée aux tests. Nous avons pu corriger quelques bugs et valider le fonctionnement d'un certain nombre de fonctionnalités. Cependant, un bug mémoire persiste lors de la création récursive de processus.

14 juin 2018

Le bug mémoire a été trouvé et corrigé. Les tests concernant la phase 3 et 4 ont été terminés et ils fonctionnent tous. On peut considérer que ces deux phases sont officiellement terminées.

15 juin 2018

Cette journée a été consacré à la lecture et la compréhension du développement à effectuer pour la phase 5. En fin de journée, nous avons pu commencé à mettre en place l'initialisation des deux piles (kernel/user). Nous avons également pu effectuer d'autres tests sur les phases précédentes (implémentation de l'anneau à jeton, du tourniquet...)

Troisième semaine

18 juin 2018

La phase 5 continue à avancer, nous avons pu avancer sur le switch en mode user. Côté tests, les tests fournis peuvent s'exécuter en mode kernel. Nous avons pu corriger quelques bugs grâce à eux.

19 juin 2018

Nous avons continué à faire du debug, quasiment tous les tests pouvant s'exécuter côté kernel fonctionnent.

20 juin 2018

Le mode user est fonctionnel. Nous avons également profité de cette journée pour factoriser le code côté kernel (processus, messages). De plus, la structure du traitant 49 a été commencé.

21 juin 2018

Le traitant 49 est fonctionnel et la librairie pour le mode user a été commencée.

22 juin 2018

La librairie est quasiment fonctionnelle. Cette journée a été consacré au passage de paramètres par les registres ainsi qu'à la récupération de la valeur de retour des fonctions.

Quatrième semaine

25 juin 2018

Le retour des fonctions de la librairie est fonctionnel. Les tests en mode user fonctionnent presque tous. Mais le debug est difficile. La gestion du clavier a été commencé.

26 juin 2018

Phase 6 (gestion clavier) terminée. Nous avons commencé à implémenter le shell en prévision de la soutenance de demain.

Réalisation des différentes phases

Phase 1

Lors de la phase 1, nous avons mis en place les environnements de travail sur nos PC. Nous avons dupliqué le dépôt git sur un git personnel afin de pouvoir synchroniser avec des outils qui nous tiennent au courant des différents commits réalisés. Nous avons pu découvrir le code ainsi qu'intégrer le travail concernant l'affichage réalisé l'année précédente lors du cours de "Logiciel de base".

Date de fin : 07/06/2018

Phase 2

Cette phase a été découpée en 3 parties :

  • L'intégration du timer développé lors de l'année précédente
  • La mise en place d'une table de processus et des différentes structures et fonctions associées
  • La mise en place du context switch

Nous avons perdu plusieurs heures lors de l'intégration du context switch dû à un bug dans notre fonction d'initialisation de la table des processus

Date de fin : 08/06/2018

Phase 3

Cette phase a été découpée en 4 parties :

  • L'intégration de l'ordonnanceur et de la création dynamique des processus
  • Le développement de getPrio, chprio
  • Le développement de sleep et de la filiation
  • Le développement de kill, exit et waitpid

Nous avons également perdu un temps important sur cette phase du fait d'un problème mémoire.

Date de fin : 13/06/2018

Phase 4

Cette phase a été découpée en 3 parties :

  • Implémentation des structures de files de messages et du squelette des primitives
  • Gestion des processus en attente lorsque les files sont pleines ou vides
  • Implémentation du wait_clock

Date de fin : 14/06/2018

Phase 5

Cette phase a été découpée en 3 parties :

  • Protection mémoire (?)
  • Appels système
  • Protection d'exécution du code

Date de fin : 20/06/2018

Phase 6

Lors de cette phase nous nous sommes concentrés sur les commandes "cons_read", "cons_write", et "cons_echo". Nous avons également pu terminer proprement la gestion du clavier que nous avions pu commencer lors du module "Logiciel de base" l'année précédente.

Date de fin : 26/06/2018

Phase 7

Nous avons intégré un shell user avec quelques commandes basiques :

  • ps
  • exit
  • echo
  • getprio
  • test (pour lancer les tests)

Nous aurions pu intégrer plus de commandes si le temps nous l'avait permis. La première chose qui a été faite est la gestion des chaînes de caractères entrées par l'utilisateur, puis le développement des commandes.

Date de fin : 26/06/2018

Extension

Choix techniques

Nous avons utilisé Visual Studio Code en tant qu'éditeur de texte. Nous l'avons paramétré afin de pouvoir compiler et débuguer notre noyau en appuyant sur une seule touche. Nous avons pris un peu de temps au début du projet pour le faire, mais cela en a valu la peine !