Catégorie:Projets de spécialité Bienvenue sur la page de présentation du projet de spécialité 2A de Julien ANTONY et Julien DORGET, tous deux élèves-apprentis en 2ème année à l'Ensimag. Le projet a été effectué durant les 3 dernières semaines du mois de juin de l'année 2011. Son objectif est la réalisation d'un système d'exploitation minimaliste que nous avons choisi de nommer CASSOS.
Travail effectué
Cahier des charges
Fonctionnalités minimales
Notre projet compte toutes les fonctionnalités demandées dans le cahier des charges minimal.
Quelques choix d'implémentation
- Nous avons préféré ne pas implémenter de file de processus pour la gestion des processus bloqué lors des accès Entrée / Sortie. Nous avons jugé préférable d'utiliser un mutex pour les bloquer, cela permet ainsi de gérer naturellement l'ordre de priorité tout en gardant un code simple et concis.
- Le processus idle est un processus dont l'objectif est de tourner en tâche de fond lorsqu'aucun autre processus n'est activable. Nous avons choisi de faire tourner ce processus en mode kernel afin d'avoir la possibilité de lancer l'instruction hlt permettant de mettre le processeur en attente d'une interruption.
- Enfin nous offrons la possibilité de démarrer le système en mode kernel ou en mode user après compilation et ce grâce à une constante définie dans le kernel. Cela permet de faciliter le débug des processus en nous offrant la possibilité de les tester en mode Kernel.
Commandes Consoles
Nous avons implémenté une console minimale disposant des commandes suivantes :
ps |
Permet d'afficher la liste des processus existants |
sinfo |
Permet d'afficher la liste des semaphores existants |
exit |
Permet de quitter le Shell |
echo |
Permet de switcher entre le mode echo (Désactive si actif et vice-versa) |
test |
Demande à l'utilisateur un numéro de test à exécuter et lance le test correspondant |
Bilan
Difficultés rencontrées
- Certaines phases du projet étaient d'une complexité importante et ont demandé plus de temps que nous l'avions estimé. Nous avons donc pris du retard dans notre planning ce qui nous a empêché de réaliser des extensions qu'il aurait certainement été intéressant d'aborder.
- Nous avons eu beaucoup de mal à trouver une méthode de travail adaptée au format de ce projet, en effet nous avons tenté plusieurs méthodes tel que le Pair Programming, une dissociation écriture des tests / écriture du code, ou encore coder 2 phases différentes en parallèle. Toutes furent efficaces à un instant T mais toutes ont finit par montrer leurs limites, nous obligeant à changer de méthode.
- Les derniers jours du projet furent éprouvant, nous avons du faire face à plusieurs bugs majeurs sur lesquels nous avons passé beaucoup de temps pour tenter de les débugger.
- De plus, il est parfois difficile de travailler dans une salle remplie de boute-en-train, la concentration nécessaire au développement de certains points de l'application est parfois perturbée ! Cependant il est agréable de travailler dans cette ambiance bon-enfant et les conseils que peuvent nous prodiguer nos collègues sont toujours bénéfiques.
Conclusions personnelles
- Travail en Autonomie : Ce projet nous a permis de travailler de manière autonome sur un sujet complexe demandant une réflexion importante avant la mise en place des différents éléments du projet. Toutefois l'aide de l'enseignant encadrant le projet fut parfois nécessaire pour faire avancer notre réflexion sur une problématique particulière ou pour nous aider à corriger une erreur.
- Mise en application des connaissances : Ce projet permet de mettre en application toutes les connaissances acquises tout au long de notre formation dans les cours de Système et d'Algorithmique. On peut toutefois regretter de ne pas avoir effectué l'intégralité des TP Système au cours de cette année, l'apport pour ce projet aurait pu être non négligeable.
- Connaissances acquise : Le travail effectué durant ce projet est très enrichissant personnellement, la construction d'un noyau permet une compréhension plus générale de ce qu'est un système d'exploitation et de son fonctionnement.
En conclusion on peut dire que nous avons apprécié travailler sur le sujet, nous regretterons le manque de temps qui nous aura empeché de mettre en place des extensions dont la compréhension du fonctionnement nous aurait intéressé.
Annexes
Outils utilisés
- Virtual Box : Plutot que de devoir rebooter une machine pour chaque test, nous avons fait le choix d'utiliser une machine virtuelle pour tester notre noyau.
- Qt Creator : Nous avons préféré utiliser un IDE pour nous aider dans notre développement. Qt Creator est principalement orienté C++ mais permet aussi un développement C. Il intègre directement dans l'interface des outils pour la publication de code sur Mercurial. L'éditeur de texte intégré permet l'autocomplétion ainsi que la coloration syntaxique. Qt Creator utilise sous Linux le compilateur gcc.
- ''' Mercurial ''' : Nous avons décidé d'utiliser le gestionnaire de version Mercurial pour ce projet. Nous avons fait le choix de Mercurial afin de découvrir cet outils et de le comparer à Git et Subversion que nous avons utilisé par le passé. Nous avons été déçu par ce gestionnaire qui nous a obligé à faire de nombreux merges parfois inutiles. Le dépot a été hébergé sur le site bitbucket, un service proposé par Atlassian.
- ''' GNU Debugger ''' : Afin de debugger l'application, nous avons utilisé gdb.
- ''' OpenProj ''' : Afin de nous aider dans la partie gestion de projet, nous avons utilisé un diagramme de Gantt. L'outil utilisé pour mettre en place ce digramme est OpenProj.
Code binaire du noyau
fichier: