Projet système PC : 2010 - BENAYAD Mohiieddine, DESSEAUVE Nicolas, EL HAOUAJI Anas

De Ensiwiki
Aller à : navigation, rechercher

Mycomputer.png  Deuxième Année 

Présentation du projet

Motivation

A la fin de la deuxième année à l'Ensimag, un projet de spécialité vise à mettre en oeuvre les connaissances acquises au cours de l'année. Dans ce cadre, le projet système est le prolongement des cours de système d'exploitation du premier et du second semestre.

L'équipe

Notre équipe pour ce projet était composée de trois personnes :

BENAYAD Mohiieddine
DESSEAUVE Nicolas
EL HAOUAJI Anas

But du projet

Nous devions concevoir la base d'un système d'exploitation pour un PC classique tout en respectant un certains nombre de contraintes de fonctionnement présentées dans un cahier des charges. Une partie extension nous a permis d'aller un peu plus loin et d'approfondir nos connaissances dans un domaine particulier.

Noyau de base

Le cahier des charges nous étant fournit, il s'agissait de l'implémenter au mieux. Sa lecture attentive et sa compréhension ont été les clés de notre réalisation. Quelques zones d'ombre ont pu être éclaircie grâce à la présence des enseignants.

Difficultés rencontrées

Les principales difficultés que nous avons rencontrée lors de la conception de notre système ont été :

  • la terminaison normale d'un processus (via return ou fin de fonction) : il fallait trouver un moyen de sortir du processus et de détruire les piles utilisateurs et noyau. Nous l'avons résolu par un saut vers un appel à la fonction exit().
  • file de message : une mauvaise interprétation du cahier des charge, notamment de la phrase "Si la file était pleine, il faut alors immédiatement compléter la file avec le message du premier processus bloqué sur file pleine ; ce processus devient activable ou actif selon sa priorité" à conduit à une première implémentation ne respectant pas les spécification. Cela nous a conduit à ré-écrire le code des files de messages presque entièrement.

Limitations

  • Certaines constantes du système sont modifiables lors de la compilation. Elles limitent sa capacité mais assurent également son fonctionnement dans de bonnes conditions.
NBPROC (1200) : Nombre maximal de processus simultané.
MAX_PRIO (256) : Valeur maximale de la priorité d'un processus.
SIZE_NOYAU (4096) : Taille de la pile alloué au mode kernel des processus.
CLOCKFREQ (1000) : Fréquence d'interruption de l'horloge.
SCHEDFREQ (50) : Fréquence de l'ordonnanceur.
NBQUEUE (1000) : Nombre maximal de files de message simultanées.
NBMESSAGE_MAX (3500) : Nombre maximal de message dans une file.
MAX_CAR (20) : Taille du buffer de saisie pour le clavier.
  • Pour les files de messages, nous ne garantissons pas la disponibilité de l'espace mémoire lors de l'allocation : une file de message n'occupe en mémoire que l'espace nécessaire à sa structure et aux messages réellement existant. Si la mémoire est pleine lors de l'ajout d'un message, la fonction psend retournera une erreur.

Extensions

Système audio

Nous avions choisi d'ajouter à notre système d'exploitation la possibilité de piloter une carte son.
Nous avons commencé par mettre en place la détection de la carte "sound blaster 16", proposée par les émulateurs VirtualBox et Qemu. C'était à priori la carte la plus simple, et même si elle est assez ancienne, elle est longtemps restée un standard. La détection de la carte passe bien, mais les émulateurs ne supportent pas les fonctions de pilotage direct (ce que nous avons mis longtemps à diagnostiquer).
L'utilisation du DMA pour le transfert des données audio nous aurait probablement permit de la faire fonctionner.

Nous avons ensuite fait des recherches sur le standard ac'97, disponible sur les machines des salles D200 et D201. Les puces ac'97 sont beaucoup plus récentes et très largement diffusées du fait de leur intégration à la carte mère des ordinateurs.
Elles sont connectées sur le bus pci, nous avons donc mis en place des procédures de lecture et d'écriture sur celui-ci. A l'aide de la documentation Intel nous avons réussi à dialoguer sur le bus pci avec le premier niveau de la puce, mais l'espace de configuration des codecs audio nous est resté inaccessible.

Système de fichier

cette extension modélise un mini-système de fichiers et répertoires :

  • les fichiers sont identifiés par un nom, une taille courante et une adresse de début, ils sont rangés dans une liste chainée
  • un répertoire est identifié par son nom, il peut contenir d'autres répertoires, d'autres fichiers, et peut être rangé dans une liste chainée au même niveau d'arborescence que d'autres répertoires

les commandes implémentées sont:

ls pour le listing des fichiers et répertoires
mkdir & rmdir pour la création et la destruction des répertoires
create & rm pour la création et la destruction des fichiers
cp & mv pour la copie et le renommage des fichiers
pwd pour l'affichage du répertoire courant
cd pour aller sur un autre répertoire
cat write pour lire et écrire dans un fichier


vous pouvez trouver les autres commandes du shell en tapant help

Bilan

Enseignements techniques

Grâce à ce projet nous avons beaucoup appris sur le fonctionnement d'un système d'exploitation, entre autres : la logique générale qui le gouverne, le changement de contexte entre processus, et les différents modes de privilèges (kernel, user )

Pour les phases optionnelles que nous avons pu implémenter, il a été question dans un premier temps de faire la conception et l'analyse du problème avant de se lancer dans le développement


Enseignements sur le travail en équipe

ce projet s'est déroulé dans des conditions favorables, les membres de l'équipe ont travaillé ensemble tout au long du projet ce qui a permis d'avancer dynamiquement et de discuter les problèmes en temps réel. L'importance du concept de chef d'équipe était claire pendant le projet GL déjà, donc nous n'avons pas tardé à en désigner un (Nicolas) qui nous a à plusieurs reprises fait gagner du temps en nous épargnant les compromis quand il fallait faire un choix (Typiquement il s'agissait de choix de conception et d'architecture).