Projet Système : 2020 - CALLET Kevin, GANDON Nicolas, SHIMOU Yasser, SVENSSON Paul, TEAMOTUAITAU Tunui

De Ensiwiki
Aller à : navigation, rechercher


Présentation

Le projet de système deuxième année second semestre consiste à poursuivre le cours de Projet de Conception de Système d'Exploitation - Fondements(PCSEF). Ce projet peut être effectué au choix sur l'architecture Intel x86 ou (nouveauté de ces dernières années) sur l'architecture open-source RISC-V. Ce projet consiste à réaliser un noyau de système d'exploitation plus avancé qu'au cours du premier semestre. L'objectif de ce projet est de mettre en oeuvre des concepts liés aux systèmes d'exploitation :

  • la gestion des processus
  • le passage du mode kernel au mode user
  • l'utilisation de files de messages
  • la mémoire virtuelle
  • le shell : le programme qui va faire le lien entre l'utilisateur et le kernel de l'OS

Équipe

Notre équipe est entièrement issue de la filière SEOC à l'ENSIMAG:

Choix de l'architecture

Nous avons choisi de développer le kernel sur l'architecture x86 d'Intel

Organisation & Communication

La répartition des tâches s'est effectuée au biais de Trello, c'est un outil de gestion de projet en ligne, et qui repose sur une organisation des projets en planches listant des cartes, chacune représentant des tâches. Les cartes sont assignables à des utilisateurs et sont mobiles d'une planche à l'autre, traduisant leur avancement.

Nous organisons des réunions sur Discord dans lesquel les membres de l'équipe expliquent ce qu'ils ont fait, les problèmes qu'ils ont éventuellement rencontré, ce qu'ils comptent faire , et s'ils ont besoin de l'aide d'un membre de l'équipe. Les tâches sont ensuite attribuées à chaque membre grâce à l'interface simple de Trello, pour que toute l'équipe puisse savoir qui travaille sur quoi. Les tâches réalisées ou en cours de réalisation sont représentées sur le Burndown chart qui nous permet de voir le travail restant avant la prochaine phase du projet.

Fonctionnalités

Toutes les fonctionnalités de base demandées dans le cahier des charges ont été implémentées. L'extension sur les sémaphores a également été implémentée.

//TODO

Planning & Déroulement

//TODO phases ?

Phase 1 : Prise en main de l'environnement

100 %

//TODO

Le but de cette phase est double:

  • de se familiariser avec l'environnement de travail qui sera utilisé tout au long du projet
  • d'implémenter la gestion de l'écran par le kernel

Environnement de travail

L'ensiwiki du projet contient des informations assez détaillées à ce sujet.

Il est fortement recommandé de lire en particulier la section "Makefile fourni" des spécifités de l'environnement de travail fourni, afin d'éviter d'avoir des problèmes de compilation à cause de la version de gcc utilisée (particulièrement si vous travaillez sur vos machines personnelles).

Le projet de PCSEF contient également une documentation sur l'environnement de travail.

La machine virtuelle de l'ensimag peut être également utilisée pour le projet et présente l'avantage d'avoir l'environnement de travail pré-installé et prêt à l'emploi (Qemu déjà installé, pas besoin de se soucier de la version de gcc,...). Ci-dessous une page tuto disponible sur l'ensiwiki pour l'installation de la VM:

Gestion de l'écran

Le projet PCSEF demandait une implémentation de la gestion de l'écran. Si cette implémentation était fonctionnelle, il est conseillée de la reprendre. Sinon, voir (ou revoir) sur le site du cours de PCSEF (accessible via Chamilo) le document de gestion de l'écran proposé ainsi que les indications fournies pour pouvoir réaliser un pilote écran fonctionnel. L'ensiwiki du projet propose également un document sur la gestion de l'écran:

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

100 %

//TODO

Cette phase a pour but d'implémenter:

  • la notion de processus
  • l'horloge système et les interruptions

Encore une fois le cours de PCSEF contient de bonnes explications et de la documentation pour réaliser le travail demandé. Si votre projet de PCSEF contient des implémentations fonctionnelles il est possible de les reprendre. Sinon les documents détaillants la notion de processus et de timer sont:

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

100 %

//TODO

Cette phase est intrinsèquement liée à la phase 2, elle consiste à utiliser les processus et le timer créés précédemment afin de:

  • créer l'ordonnanceur (le scheduler)
  • générer les fonctions gérant le cycle de vie des processus au niveau du noyau

A la fin de cette phase les primitives suivantes devraient être opérationnelles:

  • start
  • waitpid
  • getpid
  • chprio
  • wait_clock
  • exit
  • kill

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

100 %

//TODO

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

100 %

//TODO

La sacro-sainte mémoire virtuelle

Phase 6 : Développement du pilote clavier

100 %

//TODO

Phase 7 : Implémentation du shell

100 %

//TODO

Journal de Bord

//TODO peut s'extraire du git, les dépôts de Paul sont suffisamment développés pour reconstruire l'historique du projet

Semaine 1

Semaine 2

Difficultés Rencontrés

//TODO

Difficulté 1

La majorité du temps consacré a ce cours comme la plupart des cours des cours du second semestre de l'année universitaire 2019/2020, a été réalise au cours du confinement. Dans ces conditions des membres de l’équipe ne pouvaient pas contribuer grande chose dans le projet par manque du matériel ou accès a l’internet. Ceci a condamné aux autres membres de doubler leur efforts pour finir le projet.

Difficulté 2

Sources