Projet système PC : 2016 - GONTHIER Florentin, SRHIRI Oualid

De Ensiwiki
Aller à : navigation, rechercher
AmigOS
Chapeau.png
Projet Système d'Exploitation 2016

Développeurs GONTHIER Florentin
SRHIRI Oualid

Présentation générale

Le projet

L'objectif du projet système est d'implémenter un noyau de système d'exploitation, afin de gérer le lancement, le déroulement et la terminaison d'applications, et également de gérer différents périphériques tels le clavier, afin de mettre en place une communication entre l'utilisateur et la machine.

Ce projet est technique et requiert des connaissances en programmation bas niveau et notamment en pratique du système, conception d'OS, systèmes d'exploitation et programmation concurrente.

Cahier des charges

Ce projet est précis et le cahier des charges, la Roadmap ainsi que les spécifications sont fournies sur les pages EnsiWiki suivantes, ces pages fournissent les spécifications du projets avec également les aspects techniques à aborder pour nous venir en aide dans notre développement :

Spécifications
Aspects techniques
Roadmap

L'équipe

Notre équipe est composée de 2 étudiants :
GONTHIER Florentin : Filière SLE
SRHIRI Oualid : Filière SLE

Motivation

Le but principal de ce projet est pédagogique étant donné que nous développons le noyau d'un OS. Nous considérons ce projet, notamment par son encadrement, comme une bonne opportunité de consolider nos connaissances et compétences dans ce domaine où nous ne sommes pas à l'aise.

La gestion du projet

Les différentes phases du projet

Le projet s’organise en 7 phases principales. Elles doivent être effectuées chronologiquement, car elles sont quasiment toutes inter dépendantes:

  • Phase 1 : Gestion de l'affichage à l'écran de la machine et prise en main de l'environnement;
  • Phase 2 : Gestion des processus (implémentation de la structure) et gestion des changements de contextes entre processus;
  • Phase 3 : Gestion de l'ordonnancement, la création, la terminaison et la filiation des processus;
  • Phase 4 : Gestion de l'endormissement et de la communication entre les processus;
  • Phase 5 : Implémentation de la mémoire virtuelle, séparation de la mémoire et de l'exécution entre noyau et utilisateur;
  • Phase 6 : Gestion du périphérique clavier et du tampon du terminal;
  • Phase 7 : Développement d'un pilote de console (aka shell);

Planning prévisionnel

Afin d'avoir un cadre d'avancement pour ce projet, nous avons réalisé une estimation du temps de travail pour notre projet et un diagramme de Gantt.

Phase Temps estimé
Phase 1 2 jour
Phase 2 2 jour
Phase 3 3 jour
Phase 4 3 jours
Phase 5 4 jours
Phase 6 3 jour
Phase 7 2 jours
Total 19 jours

Le travail est organisé en séances d'approximativement 8h par jour, modulables selon les empêchements et les disponibilités de chacun pour garder une souplesse de travail tant que les objectifs restent en ligne de mire. De plus, la réalisation de points journaliers permet de se synchroniser entre nous.

Diagramme de Gantt

Nous avons réalisé notre diagramme avec l'outil Planner disponible sur les machines de l'école.

Capture srhiri.png


La réalisation du projet

Phase 1

Cette phase a pour premier but de récupérer les sources de départ du projet et d'installer et s'adapter à l'environnement de travail, notamment le débogage avec Qemu et gdb, Vinagre pour afficher le contenu de l'écran de la machine nue virtuelle
Il s'en suit la gestion de l'affichage à l'écran.
Cette partie est relativement rapide étant donné que la gestion de l'affichage a été effectuée en pratique du système au premier semestre.

Avancement:

100 %

Phase 2

Au cours de cette phase, nous implémentons la structure des processus (table des processus, variables nécessaires pour la description d'un processus) ainsi que les changements de contexte et l'horloge matérielle de la machine. Ces changements de contexte sont important pour ne pas perdre de données liées aux processus. Cette phase ne présente pas de difficulté notable, et les tests fournis permettent de la valider, toutefois il faut les passer en mode noyau.

Avancement:

100 %

Phase 3

Cette phase contient principalement la gestion des cycles de vie des processus : la création dynamique, l'endormissement, la terminaison et l'ordonnancement des processus. Cette phase a été plus compliquée que les précédentes, cependant elle a été validée à l'aide encore une fois des tests passés en mode noyau.

Avancement:

100 %

Phase 4

Cette phase-ci consiste à implémenter les files de messages permettant la communication entre les processus.
Nous développons un tableau de files, et pour chaque file, un tableau de messages ainsi que des files d'attente pour les processus émetteurs bloqués et les processus receveurs bloqués.
De plus, nous implémentons lors de cette phase l'endormissement des processus à l'aide de l'horloge matérielle. Cette phase est importante pour la suite et doit donc être testée correctement. A la fin de cette phase, nous avons eu un changement des implémentations précédentes de statique à dynamique, ce qui nous a pris beaucoup de temps.

Avancement:

100 %

Phase 5

Cette phase concerne l'implémentation de la mémoire virtuelle, avec la séparation des mémoires noyau et utilisateur, ainsi que l'implémentation du mode utilisateur.
Cette phase est complexe et assez longue à réaliser et tester, elle est très importante pour la suite car en cas d'erreur elle peut faire planter le noyau. Elle nécessite de se documenter sur les différentes notions abordées, notamment la pagination, le mode utilisateur, la séparation mémoire, les appels systèmes à effectuer pour permettre à un utilisateur d'accéder via ces primitives aux informations du noyau (par exemple pour la commande "ps" de la phase 7). Nous n'avons pas eu le temps d'implémenter la séparation noyau-utilisateur.

Avancement:

50 %

Phase 6

Cette phase concerne la gestion du périphérique clavier, celle-ci se fait grâce à un traitant d'interruption matérielle, signaux envoyés par le clavier au processeur lorsque des touches sont tapées.
La communication des caractères tapés se fait via un tampon, dans lequel sont stockés les caractères reçus en sortie du clavier, et via un appel cons_read.

Avancement:

70 %

Phase 7

Cette phase quant à elle concerne l'implémentation d'une console, avec la reconnaissance des commandes et les primitives nécessaires pour les appliquer.
Nous n'avons pas eu le temps de finir cette console.

Avancement:

20 %

Bilan

Ce projet nous a en effet permis de nous familiariser avec les notions de programmation de bas niveau et surtout les notions de conception de système d'exploitation.
Il est important pour un projet de ce genre d'avoir une bonne connaissance des notions utilisées, et l'implémentation de ces notions apporte une nouvelle vision et complète les cours théoriques.

Outils

-Clion: Pour le développement.
-Git: Pour la communication des fichiers.
-Qemu: Pour la simulation sur une machine.
-Vinagre: Pour la simulation de l'écran de la machine.
-gdb: Pour le débuggage.
-Planner: Pour réaliser le diagramme de Gantt.