Projet système PC : 2020 - LAINE Camille, CATTTENOZ Jules

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

Équipe Camille Lainé, Jules Cattenoz
Encadrants Yves Denneulin , Gregory Mounie, Patrick Reignier


Présentation

L'objectif du projet système est la réalisation d'un noyau de système d'exploitation sur une architecture Intel x86 et, pour la première fois en 2019, le risc-v 64 bits. Les concepts principaux à mettre en oeuvre sont :

  • la création et l'exécution des processus
  • leur synchronisation
  • leur ordonnancement
  • la gestion des entrées/sorties (clavier, écran)
  • l'implémentation d'un interprète de commandes

Organisation

Nous avons décidé de coder en pair-programming pour la plupart des fonctions. Cela nous a un peu ralenti mais nous a permis de bien comprendre toutes les étapes du projet.

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

10 %

Nous avons commencé à coder cette partie et à en comprendre les problématiques. Nous manquons malheureusement de temps pour debug donc nous ne l'avons pas push.

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 %

Tests Kernel

100 %

Tests User

0 %

Journal de bord

Semaine 1

Lundi 8 Juin

  • Organisation du poste de travail : ensipc à distance
  • Découverte de l'environnement
  • Copier/coller des fichiers tests dans le kernel
  • Lecture de la doc

Mardi 9 Juin

  • Implémentation des fonctions d'écriture
  • Création de console.c et implémentation de console_putbytes

=> Fin de la phase 1

Mercredi 10 Juin

  • Gestion des processus
  • Implémentation du context_switch
  • Création des structures de données processus.h et context.h

Jeudi 11 Juin

  • On essaie de faire tourner les tests
  • On essaie fort

Vendredi 12 Juin

  • Debug de la fonction start
  • Modification de la structure d'un processus
  • Implémentation de la fonction kill (on se rend compte plus tard que ce n'est pas à faire dans la phase 2)

Semaine 2

Lundi 15 Juin

  • Implémentation de la fonction first_process pour compléter start.
  • Le lancement des processus a l'air de fonctionner.

=> Fin de la phase 2.

Mardi 16 Juin

  • Implémentation de timer.c, timer.h, traitant.S, set_freq.S
  • L'horloge ne fonctionne pas encore : ça clignote.

Mercredi 17 Juin

  • Debug pour faire fonctionner le timer
  • Ajout d'outils de debug automatiques
  • En fait il fallait juste rajouter hlt() dans le kernel_start donc on est un peu deg

Jeudi 18 Juin

  • Implémentation des fonctions de timer
  • Implémentation du scheduler
  • Ça a l'air de fonctionner mais on n'arrive toujours pas à tester

=> Fin de la phase 3

Vendredi 19 Juin

  • Implémentation de la terminaison des processus : exit et kill

Semaine 3

Lundi 22 Juin

  • Tentative de tests mais échec cuisant : le test_run ne fonctionne pas
  • Implémentation de la file de messages et de ses fonctions
  • Du coup on avance mais on ne sait jamais si ça marche

Mardi 23 Juin

  • Debug pour faire passer les tests.
  • Implémentation de getprio, waitpid...
  • Modification de la fonction start
  • Modification de set_cursor

Mercredi 24 Juin

  • Debug : les tests s'affichent enfin
  • On passe les 2 premiers tests

Jeudi 25 Juin

  • On continue à debugger en faisant passer les tests : ils passent tous sauf le 15.
  • Création d'un super logo pour un superbe OS

=> Fin de la phase 4

Vendredi 26 Juin

  • Résolution du problème sur le test 15 : tous les tests passent désormais.
  • Rédaction du README, préparation du rendu final.
  • Début de travail sur la partie user, en espérant réussir à faire un petit truc quand même : création de la pile user et des syscall

Difficultés rencontrées

L'environnement

Aucun de nous deux ne pouvait installer une distribution Unix en dual boot sur son ordinateur perso. Le fait de coder sur les pc de l'Ensimag à distance nous a empêché notamment de faire des partages d'écran (dû au VPN) et nous a bien compliqué la tâche.

Les tests

Nous avons mis beaucoup de temps à réussir à faire tourner les tests à cause de plusieurs petites erreurs. Nous avons donc codé pendant 2 semaines sans faire aucun test, ce qui nous a bien pénalisé.

Nos capacités

Nous n'avons tous les deux eu que très peu d'occasions de travailler avec le langage C. Si cela avait été un petit peu pénalisant lors du mini projet de logiciel de base en 1ère année, c'est devenu un sérieux handicap au cours de ce projet. Nous avons donc avancé bien plus lentement que des groupes plus à l'aise en C, mais avons finalement réussi à atteindre une étape d'avancement satisfaisante, grâce à l'aide apportée par nos camarades et nos professeurs.

Ressources