Projet système PC : 2011 - Damien Devaut et Kévin Planchet

De Ensiwiki
Aller à : navigation, rechercher


GladOS
GladOS

Développeurs Damien DEVAUT
Kévin PLANCHET

Présentation

L'équipe

Notre équipe se compose de deux personnes : Damien DEVAUT et Kévin PLANCHET. Nous sommes deux étudiants de la filière SLE.

Notre tuteur de projet est Sébastien Viardot.

Le projet

Le projet système consiste à réaliser un système d'exploitation pour PC à partir d'un cahier des charges minimal fourni. Nous avons également eu plusieurs documents essentiels pour nous aider à réaliser le projet : un cahier de route nous décrivant en détail les étapes à suivre pour réaliser le travail demandé ainsi qu'une aide technique nous permettant de surmonter certains problèmes.

Ce projet a été réalisé dans le cadre des projets de spécialité de deuxième année entre le 17 mai et le 10 juin 2011.

Environnement

Le développement a été effectué en C et en assembleur sous Linux. Plutôt que d'utiliser une machine nue et de la redémarrer à chaque fois, nous avons utiliser VirtualBox afin de simuler le fonctionnement de notre système d'exploitation.

Nous avons également utilisé le gestionnaire de version Mercurial.

Réalisation

Écran de lancement de notre OS

Le travail que nous avons réalisé peut être découpé en 4 étapes :

Création du noyau

Dans un premier temps nous avons intégré le code source du TP de Pratique du Système réalisé lors du premier semestre (notamment pour gérer les affichages et les interruptions) au projet.

Cette étape avait pour principal but de mettre en place le fonctionnement des processus, et l'utilisation des piles. En plus des fonctions destinées à créer, modifier ou tuer des processus et d'une table des processus stockant des informations sur chaque processus, on trouve également des fonctions destinées à changer le processus en cours d'exécution :

  • le changement de contexte qui permet de passer du contexte d'un processus 1 à celui d'un processus 2 tout en ayant sauvegardé le contexte du processus 1. Cette fonction est très probablement la plus délicate de cette partie.
  • l'ordonnanceur qui détermine quel processus sera le prochain à prendre la main selon la priorité des processus, il est appelé à rythme régulier afin d'assurer l'alternance entre les processus.

Sémaphores

Les sémaphores sont des dispositifs de synchronisations entre différents processus, ils peuvent par exemple être utilisés pour limiter le nombre d'accès simultanés à une ressource.

De même que les processus, ils sont tous stockés dans une table qui regroupent les informations les concernant. Toute la difficulté de cette étape est de gérer les réveils et les endormissements des processus, il est facile d'oublier certains cas.

Séparation user/kernel

Les étapes précédentes ne concernaient qu'un seul niveau de privilège : le niveau kernel qui possède tous les droits. Néanmoins, pour des raisons de sécurité, il ne faut pas que l'utilisateur dispose de tous les droits, et on doit donc introduire un mode user avec des droits plus limités.

L'utilisateur doit avoir accès à certaines fonctions systèmes, mais pas à toutes. Pour ce faire on fournit à l'utilisateur un certain nombre de fonctions qui vont appeler des fonctions du noyau : ces fonctions stockent les arguments nécessaires dans les registres, puis appellent une interruption.

Cette interruption va être traitée dans le noyau, récupérer les arguments dans les registres et effectuer l'opération demandée si elle est permise. Elle va enfin se terminer et rendre la main à l'utilisateur après être repassée en mode user avec le retour d'interruption.

Cette étape nécessite de nombreuses modifications sur le code écrit précédemment, et nécessite pas mal de réflexion.

Shell

L'invite de commande fournie avec notre OS permet à l'utilisateur d'entrer quelques instructions afin de se faire une idée de ses possibilités. Les commandes disponibles à ce jour sont :

Quelques commandes réalisables par notre OS
clear Efface l'écran du terminal
color Change la couleur des caractères
date Affiche la date
echo on / off Active / désactive l'écho des caractères
help Affiche les commandes disponibles
kill Tue un processus (indiquer son pid)
logo Affiche sur l'écran le logo de GladOS
miniproc Lance un processus de faible priorité tournant en conitnu
ps Affiche la liste des processus
sysinfo Affiche les infos du système
uptime Affiche le temps écoulé depuis le lancement du système

Extensions

À la fin du projet, il nous a resté du temps pour réaliser deux mini-extensions et commencer à intégrer la gestion d'une carte son. Comme nous sommes un binôme, les extensions ne sont pas nécessaires mais nous considérons qu'elles peuvent apporter un plus au projet.

L'historique de commandes

Pour faciliter la frappe des commandes sur notre shell, nous avons implémenté un historique de commandes. Il offre à l'utilisateur la possibilité de voir les commandes précédemment tapées et de les relancer s'il le souhaite.

L'horloge calendaire

Nous avons trouvé intéressant d'implanter un mécanisme de gestion de l'horloge calendaire. L'horloge calendaire est un dispositif permettant d'avoir accès à la date et à l'heure réelles. Pour réaliser cette mini-extension, nous nous sommes appuyés sur un extrait de l'examen de PSE 2010.

La carte son

Nous avions prévu d'écrire un pilote pour la carte son. Nous avons commencé par communiquer avec le bus PCI afin de détecter la carte son et connaitre les adresses utiles pour communiquer avec elle. Nous avons alors tenté en vain d'obtenir des beeps en modifiant la valeur d'un registre. Avec l'arrivée des tests, et la fin du projet qui approchait nous avons été contraints de reporter puis d'abandonner cette extension.

Bilan

Difficultés rencontrées

  • Le projet système est un projet très technique. Les parties les plus importantes et les plus critiques sont certainement le changement de contexte des processus et la séparation user/kernel. En effet, ces parties sont difficiles à debugger car la partie importante du code est à réaliser en assembleur. Heureusement, nous avons pu passer ces phases avec succès et dans un intervalle de temps assez court.
  • La réalisation d'une extension est assez difficile. Les documentations nécessaires à sa réalisation ne sont pas facilement trouvables sur internet. De plus, il est difficile pour un binôme d'avoir assez de temps à la fin du projet à consacrer à la réalisation d'une extension.
  • Travailler en binôme est un peu plus difficile car nous ne travaillions pas dans le même mouvement que la plupart des autres groupes. Nous avons cependant su minimiser les retards, car cela nous procurait aussi l'avantage de pouvoir se faire guider par d'autres groupes.
  • Nous avons trouvé le gestionnaire de version Mercurial moins facile à utiliser que Git que nous avions utilisé pour le Projet GL.

Apports du projet

Les cours de CSE et SEPC présentent la plupart des fonctions nécessaires à la création d'un système d'exploitation, néanmoins ce n'est que théorique. Dans ce projet, à la manière des TP de PSE, il s'agit de mettre en pratique ces connaissances : si le changement de contexte ou la séparation kernel/user paraissent simple lorsqu'on les aborde de manière théorique, leur mise en pratique a soulevé des problèmes que nous ne soupçonnions pas.

De plus ce projet nous a également permis de mieux connaître certaines fonctionnalités de base en informatique, comme les particularités de certains registres processeur, la communication avec le port PCI ou l'utilisation des piles des processus.

Gestion de projet

Pour réaliser le projet, nous avons suivi la planification prévue par nos enseignants, c'est-à-dire la réalisation de deux phases du projet par semaine (le projet étant découpés en 7 phases). La dernière semaine a été principalement consacrée à la réalisation de fonctionnalités supplémentaires, à une tentative de réalisation de la carte son et ensuite à la modification de notre code pour réussir à passer les tests fournis par les enseignants. Ces tests sont très complets et il a fallu un peu plus de temps que nous avions prévu pour les passer.

Au niveau de nos méthodes de travail, nous avons décidé de travailler à l'Ensimag dans la salle qui nous était réservée (salle réseau). Les ordinateurs disposaient de tous les outils nécessaires et cela nous permettait de travailler ensemble. Selon la difficulté des phases, nous avons travaillé soit en pair programming pour optimiser le temps passé sur une phase en particulier, soit nous travaillions en parallèle sur des tâches différentes mais appartenant à la même phase.

Téléchargement du noyau

Nous fournissons la version finale du binaire du noyau en téléchargement : GladOS.