Projet système PC : 2010 - Mohamed Taoufiq El Aissaoui et Ahmed El Rheddane

De Ensiwiki
Aller à : navigation, rechercher

Introduction

L'objectif de ce projet était de réaliser un noyau de système d'exploitation pour une architecture PC classique. Il s'agissait en particulier de gérer le cycle de vie des processus, la communication entre ceux-ci à l'aide des files de message, la prise en compte de l'entrée/sortie standards et la séparation, cruciale en matière de programmation système, entre le noyau et l'espace utilisateur. Comme extensions, nous nous sommes proposés d'utiliser la VGA en mode graphique, le mode textuel étant son mode de fonctionnement par défaut, ainsi que l'exploitation de la carte son.

Le fruit de se projet s'adresse donc plus à un public connaisseur qui pourrait éventuellement se servir de ces outils pour l'élaboration d'u système d'exploitation abouti, qu'à un utilisateur lambda à la recherche d'un système d'exploitation pour sa machine personnelle.

Equipe

Notre équipe se compose de : Mohamed Taoufiq El Aissaoui et Ahmed El Rheddane, les deux en 2ème année à l'Ensimag, filière Ingénierie des Systèmes d'Information.

Equipe encadrée par : Grégory Mounié.

Projet

Ce projet se compose en 2 parties : la première consiste à implémenter les différentes fonctions spécifiées dans le cahier des charges fourni, et la seconde à la réalisations des extensions que nous nous sommes proposés de faire.

Gestion du projet

Notre planning s'est essentiellement basé sur la feuille de route fournie pour la réalisation pour la partie basique du projet. Nous avons ensuite bien veillé à tester le bon fonctionnement de celle-ci avant de passer aux extensions. Par ailleurs, l'outil de gestion de version Subversion nous a été d'une aide précieuse pour la mise en commun des parties réalisées par les différents membres et a nettement facilité la gestion à ce niveau-ci.

Fonctionnalités de base

Entrée/sortie et horloge

Cette partie a déjà été réalisée au cours de TPs antérieurs, elle concerne la lecture des entrées sur le clavier, l'affichage de texte sur l'écran et la gestion du temps. Notre travail consistait donc surtout à vérifier la conformité avec la spécification fournie.

Cycle de vie des processus

Nous avons implémenté, lors de cette partie, les différentes fonctions permettant la création, destruction et différents cas de blocage d'un processus, mais aussi l'ordonnancement entre processus, notre noyau permettant d'exécuter plusieurs processus en parallèle.

Files de messages

Il s'agit de structure globales permettant à des processus d'y déposer des messages et à d'autres d'en retirer. Elles assurent donc la communication entre les processus qui sont autrement isolés.

Console

Pour pouvoir tester les différents fonctionnalités, nous avons réalisé une console dont les commandes suivent :

  • clear : nettoie l'écran.
  • decho : désactive l'écho lors de la frappe au clavier.
  • echo : active l'écho.
  • music : joue de la musique sur la carte son.
  • ps : liste les processus courants.
  • pinfo : liste les files de messages courantes.
  • test : lance le programme test fourni.
  • text : bascule en mode textuel.
  • vga : bascule en mode vga, affiche une petite animation.
  • sysinfo : affiche l'état du système (équivaut à un ps + pinfo)

Extensions

VGA en mode graphique

Par défaut, le noyau se charge dans le mode textuel, l'écran y correspond donc à un tableau de 80x25 cases, chacune pouvant contenir un caractère. Le mode graphique nous permet de gérer l'écran pixel par pixel, le mode pour lequel on a opté, dit : mode 13h, correspont à une résolution de 320x200 à 256 couleurs.

Pour basculer vers ce mode, nous avons d'abord essayé de manipuler directement les registres de la carte VGA, en nous basant sur la configuration correspondante [1]. Cependant, faute de documentation complète et exhaustive, nous n'avons pas réussi à le faire de cette manière. Nous nous sommes donc retournés vers l'appel au Bios avec le bon paramètre, qui se chargera lui-même de charger les bonnes valeurs dans les différents registres de la carte. L'appel au Bios se fait en utilisant le code fourni par Simon Nieuviarts, et nous l'en remercions.

Carte son

Nous avons développé un pilote de carte son type Sound Blaster 16. Ce pilote permet de lire des données audio représentées sous le format PCM.

Le principe du fonctionnement de cette carte son est assez simple. On utilise la DMA, qui est un composant matériel qui permet de transférer des données de la mémoire centrale à un périphérique (ou dans l'autre sens). À travers de cette DMA, on arrive à transférer les données qui représentent le son au controleur de la carte nommé DSP (Digital Sound Processor). Ces transferts se font par morceau, selon une taille prédéfinie à la compilation du noyau. Une fois qu'un morceau a été transféré, le DSP déclenche une interruption au processeur, qui se chargera de mettre à jour les structures nécessaires afin de lancer un nouveau transfert. Et ainsi, on obtient un son fluide et continu.

Il existe cependant d'autres modes de la carte son plus optimisés qui permettent d'avoir une meilleur qualité de son, malheureusement nous n'avons pas eu le temps d'aborder ces modes (le mode exploité dans notre driver s'appelle : Single cycle mode).

En ce qui concerne les tests, sachant que nous n'avons pas de système de fichiers pour gérer les fichiers son, nous avons développé un programme qui prend un paramètre un fichier audio wave, et donne en sortie un fichier C compilable contenant les données du son sous forme d'un tableau.

Sachant que ce programme n'est inclus ni dans notre projet, ni dans notre driver, nous nous permettons d'en publier les sources afin que vous puissiez tester notre driver avec votre chanson préférée : media:Gen_wav.tar.gz

Difficultés rencontrées

Nous avions rencontré une difficulté particulière au début du projet, qui consistait à s'y mettre dedans totalement. Le projet étant très conséquent, nous avions du mal à avoir une vue d'ensemble dès les premiers jours. Cependant, dès le 4eme jour, les choses se sont éclaircies, et le rythme du développement est monté en flèche.

Une autre difficulté rencontrée est de trouver les bonnes documentations lors du développement des extensions. En effet, internet est devenu tellement immense qu'on a du mal à trouver des documents techniques et précis ! Car avec les moteurs de recherche habituels, on tombe souvent sur des sites de vulgarisation qui explique le principe globale, sans donner des détails qui permettront de développer de manière concrète.

Produit

Afin de vous permettre de tester notre produit dans les meilleurs conditions, nous fournissons deux versions.

Une première qui inclut le pilote de la carte son Sound Blaster 16 : Media:Kernel_carte_son.tar.gz

Et une autre qui n'inclut ce pilote : Media:Kernel_sans_carte_son.tar.gz

Liens externes

http://wiki.osdev.org/Main_Page : Un site assez complet qui contient la plupart des documentations nécessaires au developpement d'un OS. http://www.nondot.org/sabre/os/files/Sound/SoundBlaster/sb-hardware-prog-guide.pdf : La documentation officielle de la carte son Sound Blaster. http://www.nondot.org/sabre/os/files/MiscHW/DMA_RTI.txt : Un document très intéressant qui explique en détail le fonctionnement d'une DMA. http://www.nondot.org/sabre/os/files/MiscHW/DMA_VLA.txt : Un autre document qui donne quelques exemples de codes en assembleur pour contrôler et manipuler la DMA.