Projet système PC : 2014 - CHARLES Guilhem & CHRETIENNE Alexis

De Ensiwiki
Aller à : navigation, rechercher
CalvadOS
CalvadOS.png
Projet Système d'Exploitation 2014
CalvadOS : écran d'accueil

Développeurs Guilhem CHARLES
Alexis CHRETIENNE

Présentation

Ce projet est l'aboutissement de l'enseignement Système d'Exploitation et Programmation Concurrente que nous avons suivi lors des deux dernières périodes de notre deuxième année. Il s'agit de comprendre et apprendre comment un noyau de système d'exploitation fonctionne. Le projet étant consistant, il nécessitera une organisation rigoureuse et un partage efficace du temps de travail.

Équipe

Guilhem Charles : Apprenti (Lumiplan Duhamel)
Alexis Chretienne : Apprenti (IBM)

Objectifs

L'objectif principal du projet sera de produire un un système d'exploitation fonctionnel fournissant un mode utilisateur (shell).

Moyens mis en oeuvre

Git

L'utilisation du dépot git fourni par l'école est obligatoire. Les branches que nous avons créé portent le nom de la fonctionnalité développé. Nous avons d'abord développé sur la branche principale lors de la réalisation des TP de PSE. Après cela nous avons créé deux branches de développement : une pour le développement des processus et une autre pour le développement des sémaphores. Ensuite nous avons fusionné les deux branches passer tous les tests noyau et avons gêlé la branche principale. Enfin, nous avons créé une branche pour le développement du mode utilisateur.

Machines de développement

Nous devions initalement utiliser les machines de l'école pour développer ce projet. Des problèmes ont été vite rencontré. L'équipe a donc décidé d'utiliser leur machine personnelle. Le système a donc été développé sous deux machines respectivement équipée de Debian(Wheezy-7.5) et Ubuntu(12.10 LTS), sur lequel était installé un émulateur (repectivement qemu / kvm). Enfin les logiciels de déboggages étaient gdb et ddd.

Gestion de projet

Pendant ce projet, nous avons établi deux diagrammes de Gantt (réalisé à l'aide de l'outil Project Management (GNU/Linux). Un premier diagramme a été fait en début de projet pour prévoir l'ensemble des tâches en fonction des ressources disponibles (ci-dessous).

Gantt theorique.png

Un autre diagramme a été réalisé tout au long du projet pour représenter le travail fourni (ci-dessous).

Gantt effectif.png

On remarque qu'un retard s'est accumulé tout au long du projet, estimé à 2-3 jours. Nous avons identifié le retard :

  • le 12 juin 2014 : nous devions initialement utiliser les machines de l'ENSIMAG. Or des problèmes de mises en place ont été rencontré. Nous avons donc utiliser nos machines personelles.
  • le 17 juin : la mise en place des files pour les processus ont rapidement été implémenté. Cependant nous avons passé 1 jour pour cause d'un bogue. La constante représentant la taille de la pile noyau n'était pas assez grande.
  • le 27 juin : la terminaison de processus ayant quelques bogues, nous avons passé 1 jour à les résoudre. Ensuite, la majorité des tests sont passés sans grandes difficultés.

Fonctionnalités noyau et utilisateur

Notre système d'exploitation est divisé en deux modes : noyau et utilisateurs. Les phases 1 à 7 ont été développé, selon la spécification donnée (ensiwiki).

Implémentation noyau :

  • Gestion de l'affichage à l'écran (phase 1)
  • Gestion de processus, changement de contexte entre 2 processus (phase 2)
  • Gestion de l'ordonanacement, création dynamique, terminaison et filiation des processus (phase 3)
  • Gestion de la communication (sémaphores) et de l'endormissement (phase 4)

Implémentation utilisateur :

  • Ajout du mode utilisateur (phase 5)
  • Pilote clavier et console (phase 6)
  • Interprète de commandes (phase 7)

l'interprète de commande propose les commandes suivantes :

Commande Description

help

Affiche de l'ensemble des commandes avec leurs descrpitions

tests

Lancement de tous les tests fourni

clear

Efface l'écran

ps

Affiche la liste de tous les processus

sinfo

Affiche des informations sur les sémaphores existants

echo

Fait passer l'affichage en mode echo on ou echo off

sys_info

Affiche des informations utiles sur l'état du système


Aucune extension n'a été produite.

Média

Problèmes et conseils

Problèmes rencontrés

Comme cité plus haut (comparaison des diagrammes de Gantt théorique et effectif), nous avons rencontré plusieurs problèmes, qui nous a coûté du temps. L'accumulation du retard a ensuite diminué suite aux tests utilisateurs qui sont passés rapidement avec succès . Nous avons estimé, en fin de projet, que le retard est passé de 2-3 jours à 1 jour.

L'utilisation de logiciels de déboggage (gdb, ddd) ont été très utiles pour suivre et détecter nos bogues.

Conseils

Nos conseils vis à vis de ce projet sont nombreux :

  • Prendre du temps pour lire et comprendre la documentation du projet (dans l'odre des phases). L'ensemble des informations sont présentes mais nécessite de la réflexion pour une bonne conception.
  • Commencer les 2 premières phases en équipe afin de bien comprendre le contexte du projet. La phase 3 et 4 peuvent être parallélisées pour se rejoindre finalement vers les tests du noyau. Dès que l'ensemble des tests sont passés avec succès, nous conseillons de réaliser la phase 5 en équipe. Enfin, les phases 6 et 7 peuvent être, de nouveau, réalisés en parallèle.
  • Comprenez le mode utilisateur avant tout développement. Soyez sûr de vos instructions assembleurs car les problèmes peuvent vite apparaîtrent (le déboggage n'est pas forcément évident).
  • Un code clair et optimisé est appréciable pour l'ensemble de l'équipe.
  • L'utilisation de branches par module de développement vous permettra d'avoir une branche principale fonctionnelle.


L'utilisation de l'outil objdump peut être utile quant à l'instruction qui fait planter le système (écran bleu avec la valeur des registres). Faire :

  • objdump -D binaire.bin | less
  • Rentrer la valeur contenue dans le registre EIP  : /[valeur EIP de l'écran bleu].

Documentation

documentation du projet système
osdev.org

Fichier binaire

Veuillez nous contacter pour obtenir une version du noyau. Pour le lancer il suffira de l'extraire de l'archive puis lancer le kernel.bin avec qemu ou kvm.