Projet système PC : 2020 - PLICHON Lucas, OBRY Ilona, VIOGNE Florent

De Ensiwiki
Aller à : navigation, rechercher
Titre du projet LumbagOS ( l'OS qui te brise le dos )
Cadre Projet Système

Équipe Lucas Plichon, Ilona Obry, Florent Viogne
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 de presque rien, d'un noyau de système d'exploitation sur une architecture Intel x86.

Organisation

Afin que chaque membre du groupe puisse développer un maximum et comprendre le fonctionnement du projet dans son intégralité, nous avons tous développé de notre côté et en parallèle des autres chaque fonctionnalités en communiquant régulièrement sur notre avancement. Lorsque l'un d'entre nous obtenait un résultat fonctionnel pour une fonctionnalité, il la partageait aux autres pour que tout le monde soit à nouveau au même niveau et puisse développer la fonctionnalité suivante. Le nettoyage et le rangement de code avant les push importants étaient réalisés en commun pour que tout le monde ait connaissance des modifications et renommages éventuels.

Phases de développement

Phase 1 : prise en main de l'environnement

100 %

Cette phase a consisté à mettre en place son environnement personnel afin de pouvoir récupérer le code fourni, pouvoir le compiler et s'approprier l'utilisation des options de débug. Une fois fait, il a été ensuite question de comprendre le fonctionnement ainsi que l'architecture du projet.

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

100 %

Nous avons dans un premier temps mis en place la structure des processus en s'appuyant sur la documentation. Une fois la création et le lancement des processus maîtrisé, nous avons travaillé sur l'implémentation du changement de contexte entre processus ainsi que sur un début d'ordonnanceur de processus. Enfin, nous avons développé tout ce qui concerne la gestion de l'interruption grâce à l'horloge afin de procéder au changement de contexte entre processus à une fréquence déterminée.

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

100 %

Dans cette phase, il a été question d'améliorer l'ordonnanceur de processus en prenant en compte la priorité de ces derniers. Nous avons pour cela utilisé les ressources fournies afin d'avoir une file de priorité. Il était aussi important de faire en sorte que les processus de même priorité puissent se partager le temps d'éxecution de manière équitable.

Nous avons ensuite développé les primitives de gestion de processus (terminaison, changement de priorité ...) ainsi qu'implémenter la notion de processus endormi.

Une fois fait nous avons pu valider les tests kernel correspondant.

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

90 %

Cette phase consiste à implémenter les files de messages permettant aux processus de communiquer entre eux. Après avoir crée une structure adaptée nous avons implémenté les primitives liées aux files de messages (création d'une file, dépôt d'un message, suppression d'un message ...). Nous avons ensuite commencé la validation des tests correspondant sans avoir le temps de les finir.

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

0 %


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

65 %

Tests User

0 %

Journal de bord

Semaine 1

08 Juin 2020

Phase 1 :

  • Découverte et prise en main de l'environnement
  • Récupération et modification du code utilisé en cours de Logiciel de Base de 1ère année pour permettre l'affichage de caractères à l'écran

Phase 2 :

  • Début de travail sur le lancement de processus

09 Juin 2020

Phase 2 :

  • Création de la structure des processus
  • Initialisation et lancement des processus
  • Implémentation du changement de contexte entre deux processus
  • Début de travail sur l'ordonnancement des processus

10 Juin 2020

Phase 2 :

  • Gestion de l'interruption de l'horloge afin de procéder au changement de contexte entre processus à une fréquence déterminée
  • Implémentation de clock_settings, current_clock et wait_clock

Phase 3 :

  • Récupération de queue.h pour l'ordonnancement avec priorité
  • Rangement du code de gestion des processus

11 Juin 2020

Phase 3 :

  • Amélioration du lancement des processus : ajout du paramètre de la taille de la pile et mise ne place de la création de pid automatique
  • Correction sur l'initialisation de l'horloge
  • Mise en place de l'ordonnancement interrompu par l'horloge

12 Juin 2020

Phase 3 :

  • Utilisation des fonctions fournies queue_entry et queue_add avec notre structure de processus pour ordonnancer avec priorité
  • Travail sur l'initialisation de la tête de file
  • Correction sur l'affichage de l'horloge
  • Renommage de variables, nettoyage et rangement globale du code

Semaine 2

15 Juin 2020

Phase 3 :

  • Correction de l'utilisation de queue_add
  • Répartition du temps entre les processus de même priorité au sein de la file
  • Ecriture de fonctions génériques pour l'ajout et la suppression de processus dans la file
  • Ordonnanceur fonctionnel avec interription de l'horloge

16 Juin 2020

Phase 3 :

  • Travail sur les primitives de gestion des processus:
    • Terminaison de processus(exit)
    • Attente d'un processus fils (waitpid)

17 Juin 2020

Phase 3 :

  • Travail sur les primitives de gestion des processus:
    • Correction d'un bug impliquant la terminaison (exit) et l'attente d'un processus fils (waitpid)
    • Terminaison de processus (kill)

18 Juin 2020

Tests Kernel :

  • Débug et passage des tests 1 à 5

19 Juin 2020

Tests Kernel :

  • Récupération de l'entête run_test et correction de l'affichage pour les tests utilisant cons_write
  • Débug et passage des test 6 à 8

Phase 3 :

  • Création d'une file de processus endormi
  • Réécriture de la fonction wait_clock
  • Ajout de la gestion des procesuss endormi dans l'ordonnanceur

Semaine 3

22 Juin 2020

Tests Kernel :

  • Débug et passage du test 9

Phase 4 :

  • Création d'une structure pour la file de messages
  • Création des primitives liées aux communications par messages entre processus:
    • Créer une file de messages (pcreate)
    • Réinitialiser une file (preset)

23 Juin 2020

Tests Kernel :

  • Débug et correction du code pour le test 9

Phase 4 :

  • Création des primitives liées aux communications par messages entre processus:
    • Déposer un message dans une file (psend)

24 Juin 2020

Phase 4 :

  • Création des primitives liées aux communications par messages entre processus:
    • Réinitialiser une file (preset)
    • Retirer un message d'une file (preceive)
    • Détruire une file de messages (pdelete)

25 Juin 2020

  • Création des primitives liées aux communications par messages entre processus:
    • Renvoie l'état courant d'une file (pcount)

Tests Kernel :

  • Débug et passage des tests 10 à 13


26 Juin 2020

Documentation :

  • Mise à jour du journal de bord
  • Création d'un readme expliquant le lancement des tests

Préparation du rendu :

  • Nettoyage et rangement du code
  • Mise à jour de la branche master

Difficultés rencontrées

  • Compréhension de certains points de la spécification
  • Adaptation des options de compilation