Projet système PC : 2012 – Abderrahmane BOUSTELITANE, Christian DJAKOU et FERNANDES DE CONTO Eduardo

De Ensiwiki
Aller à : navigation, rechercher


WarningBrOS
Warningbros.jpg

Développeurs Abderrahmane BOUSTELITANE, Christian DJAKOU, FERNANDES DE CONTO Eduardo

Présentation du projet

Le projet système PC a pour objectif de concevoir un noyau de système d'exploitation minimaliste pour l'architecture Intel x86.

Il s'agit d'implémenter des fonctionnalités de bases d'un OS à savoir:

  • Gestion des processus
  • Primitives de synchronisation entre processus à base de sémaphores
  • Temps partagé
  • Pilote d’E/S
  • Interpréteur de commande

Ces fonctionnalités de base, ont été implémentées suivant la spécification du noyau qui nous a été fournie par l'équipe enseignante.

Nous avons proposé en plus quelques extensions afin de completer et personnaliser notre OS. Il s'agit principalement de l'implantation d'un gestionnaire de fichiers, et de l'implémentation du pilote de la carte son Sound Blaster 16.

L’équipe WarningBrOS

L'équipe était composée que 3 étudiants étudiants en filière Ingénierie des Systèmes d'Information et Systèmes et Logiciels Embarqués:

Durée du projet : 4 semaines

Encadrant d'équipe : Franck Rousseau

Fonctionnalités de Base

Création de processus, ordonnancement et changement de contexte

Il s'agit de la première étape de notre projet. Nous avons mis en place une structure nous permettant de gérer un processus et sa pile. Nous avons ensuite implémenté en assembleur notre fonction de Context Switch (changement de contexte) qui sera utilisée lors du processus d'ordonnancement de processus (passage d'un processus à l'autre). L'ordonnanceur quant à lui a été implanté selon la spécification fournie par les encadrants du projet. Il est appelé à intervalles de temps réguliers et son rôle est de sélectionner le prochain processus à s'éxecuter parmi les processus éligibles.

Synchronisation entre processus

Les sémaphores permettent de synchroniser des tâches entre elles (attente ou blocage sur sémaphore) ainsi que de protéger certaines parties du code qui manipulent des donnes partagés entre plusieurs processus (il permettre de implémenter l'exclusion mutuelle).

Séparation du mode kernel et du mode utilisateur

Dans la première partie du projet les processus était uniquement executés en mode maitre. Cependant, il se trouve que dans un système d'exploitation fonctionnel, la séparation des droits est indispensable afin de protéger les zones mémoires sensibles et les périphériques. Le mode utilisateur permet alors de protéger le système et de mette des restrictions sur les accès de l'utilisateur. A ce niveau il s'agit donc de mettre en place une fonction de transition de mode pour pouvoir permettre aux processus de s'executer en mode utilisateur. Les processus possedent donc 2 piles (1 par mode), et pour avoir accès à des informations systèmes, l'utilisateur procède par des appels système. Le système va déclencher une interruption pour passer au mode kernel et effectuer les opérations privilégiées qui ont été demandées par l'utilisateur.

Pilote Console

Le rôle de la console est de pouvoir envoyer des entrées aux programmes (par l'intermédiaire du clavier) et d'afficher des sorties (grâce à l'écran). Le clavier n'est utilisé que par un seul processus à la fois. Les touches saisies par l'utilisateur sont automatiquement enregistrées dans un tampon clavier et affichées ou non (selon que l'echo soit activé ou pas).

La pilote console de WarningBrOs peut associer des touches à des fonctions spécifiées par le programmeur. Cela permettre, par exemple, d'implémenter des raccourcis clavier et nous a été particulièrement utile pour implémenter l'historique du shell.

Shell: Invite de commandes

Le shell représente l'interface textuelle utilisateur-machine. Les commandes rentrées par l'utilisateur executeront les processus tels que décrits dans le tableau ci-dessous :

Commande Description de la commande

help

Afficher le listing des commandes du shell avec un descriptif

about

Affiche la banière de l'équipe de WarningBrOS

kill <pid>

Tue le processus identifié par pid

clear

Efface l'écran

clock

Affiche le nombre d'interruption horloge depuis le demarrage du système

sleep <sec>

Endort le processus pendant "sec" secondes

echo <on|off>

Active ou desactive l'affichage pendant la saisie

ps

Affiche la liste des processus

pwd

Affiche le repertoire courant

ls

Lister le contenu d'un repertoire

cd <nom_repertoire>

Se déplacer dans le repertoire "nom_repertoire"

sinfo

Affiche les informations sur les sémaphores actifs

exit

Arrête le système

looney

Lance le jingle de WarningBrOS

<F1> | <F2> <F3> | <F4>

Se déplace dans le terminal numéro 1, 2, 3 ou 4

Extensions

Implémentation d'un PC SPEAKER

Cette extension s'agit de produire des sons en utilisant le PC Speaker Nous nous sommes inspirés de la documentation fournie sur OS Dev pour implémenter la sortie et l'arret de son. En faisant varier les fréquences du son (en s'inspirant notamment des fréquences émises par des notes musicales) nous avons affecté à chaque touche un son particulier. Quand le buffer clavier est plein, et qu'une touche est pressée elle émet un bip propre à elle.

Pilote Carte Son Sound Blaster 16

Nous avons choisi d'implémenter un pilote pour la carte son Sound Blaster parce que cette carte son peut être simulée avec VirtualBox que nous utilisons dans le cardre de projet. Par ailleurs, la documentation est très précise et bien détaillée. Il existe plusieurs façons d'envoyer nos données à la SoundBlaster :

  • Direct Mode: C'est le mode le plus facile, où le processeur se charge lui même d'envoyer les données sonores à la carte.
  • Single Cycle Mode: On programme le DMA pour qu'il envoie un nombre déterminé d'octets à la carte son.
  • Auto Init Mode: Le DMA envoie les données du fichier son jusqu'à être interrompu par le processeur.

Nous avons utilisé le 2e mode pour programmer notre carte son. Bien qu'étant plus facile à implémenter, le Direct Mode présente l'inconvénient d'interrompre énormément le processus, et en plus, il ne fonctionne pas sur les émulateurs comme VirtualBox. Nous avons donc entièrement programmé en suivant la documentation, une DMA dont le rôle sera d'envoyer les octets du fichier son au processeur de la carte son qui est le DSP. Le buffer de la DMA étant limitée à 64Ko, l'astuce ici était de recharger dans le buffer les prochaines données du fichier son, avant qu'il n'achèvent le transfert des données en cours. Cette astuce permettait de lire notre fichier son, morceaux par morceaux sans avoir de discontinuités. Ces données du fichier son étaient représentées dans un tableau obtenu à partir d'un fichier WAV. La conversion du fichier son WAV en fichier .c (contenant les données du tableau d'octets du son) se fait grâce au source code disponible ici. Elle nous fournit en outre toutes les informations nécessaires comme le codage du fichier (8 ou 16 bits), la fréquence, et le nombre d'octets du fichier.

Multi Shell et historique

WarningBrOS propose une interface à plusieurs terminaux pouvant executer des processus en parallèle. Chaque terminal est dotée de son propre tampon et d'un "écran" à lui. Nous sauvegardons donc pour chacun des terminaux l'état de l'écran à chaque instant pour pouvoir le restaurer à n'importe quel instant dans son état courant. Il est possible de sa balader entre les terminaux en tapant les touches F1 à F4. Les terminaux ont aussi un historique qui sauvegarde les dernières commandes tapes, accessible avec les flèches haut et bas.

Affichage date et heure réel

Parce que le temps est l'outil indispensable d'un OS qui se respecte nous avons implémenté une petite extension qui nous permet d'avoir en temps réel l'heure et la date. Pour cet extension, nous récupérons, via l'interruption 40, les données de l'horloge calendaire dans le RTC (Horloge temps réel).

Gestionnaire de fichiers

Pour implémenter notre système de gestion de fichiers, nous avons du passer par plusieurs étapes intermédiaires.

Ecriture et lecture sur le disque

Il existe deux méthodes possibles pour écrire et lire sur une unité de disque IDE : l'utilisation des ports du processeur (PIO) et l'utilisation du DMA. Nous avons choisi d'utiliser les ports du processeur, cette méthode est beaucoup plus facile que l'utilisation du DMA. A la fin de cette étape on peut donc lire et écrire sur un disque IDE.

Utilisation d'un système de gestion de fichiers

Nous avons choisi d'utiliser le système de fichier Ext2FS, Nous avons donc implémenté un driver capable de lire une partition Ext2FS. Cependant nous n'avons pas eu le temps d'implémenter l'écriture. Depuis notre shell nous pouvons utiliser les commandes suivantes pour interagir avec le système de fichier :

- ls : Pour lister le contenu d'un répertoire.
- pwd : pour afficher le répertoire courant.
- cd : Pour se déplacer dans les dossiers.
- cat : pour afficher le contenu d'un fichier.

Nous nous sommes largement inspirés de ce site web [1], pour l'implémentation de notre système de gestion de fichiers.

Bilan et Résultats

Bilan

Nous avons pu implémenter toutes les fonctionnalités de base conformément au cahier des charges. Les apports du projet :

  • Appliquer les notions théoriques vues en cours de Conception de Systèmes d'Exploitation
  • La passion pour la recherche => Apprendre à décortiquer les documentations pour mieux cerner le matériel qu'on a en face
  • Découverte du debogage en système => Demande beaucoup de patience et de calme

Résultats

  • Fonctionnalités de base complètement implémentées et fonctionnelles (Tous les tests d'évaluation enseignants fournis sont bien passés)
  • Extension de gestionnaire de fichiers incomplète : Nous avons pas pu écrire sur le disque faute de temps.
  • Sortie de sons multiples : Par PC SPEAKER (Old Game) et par Sound Blaster 16 qui est plus moderne et plus utilisé par les programmes

Outils

  • VirtualBox: outil de virtualisation
  • Mercurial: gestionnaire de versions
  • Kate, Emacs, gedit: éditeur de code
  • Planner: éditeur de plannings
  • ddd: débogueur

Documentation

Page Web de Création d'OS

Programmation Carte Son SB16

Doc programmation SB16 "EN FRANCAIS"

Programmation PC Speaker

Tutoriel très intéressant sur la conception de systèmes d'exploitation

Autre tutoriel sur la conception de systèmes d'exploitation

Téléchargement

Vous pouvez exécuter et tester notre noyau avec VirtualBox en utilisant le fichier binaire Média:WarningBrOS.tar.gz.