Projet système PC : 2015 - POURROY Jean, TARDY Paul, ZIMMERMANN Alex

De Ensiwiki
Aller à : navigation, rechercher
Tacos.jpg
Titre du projet TacOS
Cadre Projet système d'exploitation 2015
Page principale Projet_système

Équipe Alex ZIMMERMANN Paul TARDY Jean POURROY
Encadrants David Beniamine Gaëtan Morin Grégory Mounié


Présentation générale du projet

Objectifs

Un projet qui vous mènera dans les recoins les plus sombres et lointains des systèmes d'exploitations... Vous y réaliserez un noyau de système d'exploitation sur une architecture Intel ou dédiée.

Au programme : Gestion des processus, implémentation des primitives de synchronisation entre processus à base de sémaphores, gestion du temps partagé, implémentation du pilote d'entrée/sorties et enfin gestion d'un interpréteur de commandes.

Ce travail titanesque est découpé en 7 phases pour moins déprimer et pouvoir profiter de pauses bien mérités à chaque jalon !

Cahier des charges

Tout est dans le wiki ---> Projet système : spécification

Apports du projet

Accrochez vous à vos sièges et préparez vous bien ! Seul les plus courageux arriveront au bout de ce projet insensé... mais le jeu en vaut la chandelle !

Une fois cette quête achevée vous pourrez enfin vous targuer d'avoir la parfaite connaissance du fonctionnement d'un ordinateur ! Que n'avez vous pas hâte de placer ces nouvelles connaissances en repas de famille et de briller en société ?

Achievement Unlocked : "Création d'un système d'exploitation"

Gestion de projet

Outil de gestion de configuration

Nous avons utilisé le dépôt Git de l'école (Obligatoire). Nous avons créé des branches quand nous avons divisé le travail.

Planning

Voici le Gantt effectif :

GantTacOS.png

Présentation, réalisation, difficultés rencontrées et avancement

Phase 1

Prise en main de l'environnement de développement et gestion de l'affichage à l'écran.

Implémentations : Gestion de l'affichage à l'écran // Printf()

1- Adapation du code que nous avions fait en projet PSE l'année passée.

Implémentation :

100 %

Tests : N/A

Phase 2

Notion de processus et le changement de contexte entre deux processus.

Implémentations :

1- Implémentation de l'interruption 32 liée à l'horloge système pour afficher un temps à l'écran.
2- Création de la structure des processus et de la table des processus -> Test du changement de contexte
3- Changement de contexte entre processus via les tics d'horloges

Dans cette partie nous avons eu plus de mal sur le changement de contexte (Problème lié à la bonne initialisation de la pile d'éxecution et au compteur ordinal)


Implémentation :

100 %

Tests : N/A

Phase 3

Ordonnanceur : création dynamique, terminaison et filiation des processus.

Implémentations :

1- Création dynamique de processus : start().
2- Gestion de l'ordre/priorité : ordonnance().
3- Terminaison des processus - Gestion des retours : kill(), exit().
4- Filiation des processus (Gestion des Pères/Fils/Zombies)

Le plus compliqué sera de penser à tous les cas lors de la gestion de la filiation.

Implémentation :

100 %

Tests : N/A

Phase 4

Gestion de la communication et de l'endormissement des processus.

Implémentations :

1- Files de messages
2- wait_clock()

Nous avions déjà géré les endormissements (sleep en phase 2) et nous avons donc modifié le code pour utiliser wait_clock.

Noter l'existence de la structure de liste chainée triée "queue" vous fera gagner du temps + Vous pourrez vous en servir pour la gestion des processus actifs et pour la gestion des processus endormis/bloqués.

Il faut bien lire la spec car certains cas d'utilisations ne sont pas forcément intuitifs.

Implémentation :

100 %

Tests :

95 %
(16/17 réalisables)

Phase 5

Séparation des espaces mémoire du noyau et des processus et ajout du mode utilisateur.

Implémentations :

1- Séparation des modes User et Kernel

Lors de cette phase il faut bien prendre le temps de comprendre et ne pas hésiter à faire des schémas (notamment des piles), discuter de ce dont on a compris etc... Nous avons diviser cette phase en plusieurs tâche:

  • Passer les processus en mode user : c'est la première chose que le processus doit faire. Il s'agit alors de simuler une interruption 49 (int $49) et d'effectuer un iret. Pour ce faire il faut empiler dans cet ordre: SS [$0x4b], ESP [sommet de pile user], EFLAGS [$0x202], CS [$0x43], EIP [adresse du code à executer, i.e. le code du processus].
  • Ecrire un traitant d'interuptions 49 : Relativement proche du traitant déjà effectuer. Attention néanmoins, le deuxième octet de l'adresse doit être 0xEE00 et non 0x8E00 utilisé précédemment. Ce changement autorise au user d'effectuer les int $49 (ce qui est le but).
  • Passer en mode kernel lors des interuptions: il faut, dans tous les traitant, mettre à jour les registres de segments DS, ES, FS, GS pour passer en mode kernel (sans quoi l'interruption sera en mode user, et ne va pas fonctionné). En tout début de traitant on place $0x18 dans ces registres. En fin de traitant on place $0x4b.
  • Modification du context_switch: il faut mettre à jour le contexte switch pour qu'il place la stack kernel dans TSS + 4. Ceci permet, lors d'une int $49 de retrouvé la stack kernel tu processus.
  • Ecriture des appels système : côté user, coder les appels systèmes, qui consistent à placer ses paramètres dans les registres (ecx, edx, edi, esi, ebx dans notre cas) et le numéro d'appel dans un autre (eax dans notre cas) et d'executer 'int $49'. Le traitant d’interruptions evaluera eax et lancera l'appel de fonction adapté, après avoir empilé les paramètres.

Attention lorsque vous utilisez les registres non scratchs! Il faut les sauvegarder avant l'appel système et les restaurer après.


Implémentation :

100 %

Tests :

80 %
(20/20 réalisables, les tests 16 à 20 ne passent pas.)

Phase 6

Gestion du clavier (entrées/sorties).

Implémentations :

1- Gestion du clavier
2- cons_write(), cons_read()

Cette phase n'a pas posé de problème particulier. Le sujet n'est pas forcément toujours clair.


Implémentation :

100 %

Phase 7

Gestion de l'interpréteur de commandes.

Cette phase n'a pas été implémentée.


Implémentation :

50 %


Tests :

80 %
(20/20 réalisables, les tests 16 à 20 ne passent pas.)

Extensions

Ajouts à notre système.

Cette phase n'a pas été implémentée.


Implémentation :

0 %

Tests : N/A

Capture d'écran

Capture d’écran 2015-07-01 à 10.52.59.png