Projet système PC : 2012 – Charles ARACIL, Taoufik BENAYAD et Camille DESVERNOIS

De Ensiwiki
Aller à : navigation, rechercher


BunnyOS
BunnyOS.jpg

Développeurs Charles ARACIL,
Taoufik BENAYAD,
Camille DESVERNOIS


Équipe du projet

Le projet a été réalisé par:

Notre enseignant tuteur est : Damien DEJEAN

Présentation du projet

Le projet système se déroule dans le cadre du projet de spécialité de deuxième année à l'ENSIMAG qui dure un mois. Le but du projet est de concevoir un système d'exploitation avec un minimum de fonctionnalités (gestion de processus, pilote de console, interpréteur de commandes) et d'y rajouter des extensions selon le choix de l'équipe.
Le projet a démarré avec un cahier des charges minimal décrivant les fonctionnalités minimales nécessaires au bon fonctionnement du système d'exploitation. Les extensions ajoutées sont décrites plus bas sur cette page.

Contenu du système d'exploitation

Interprète de commandes

L'interprète de commandes (shell) représente l'interface homme machine de base par laquelle l'utilisateur communique avec le système d'exploitation et fait appel à ses services. Le shell qu'on a créé implémente les fonctionnalités de base décrites dans le cahier des charges mais aussi celles qui correspondent aux extensions.
Le shell gère le passage de paramètres (commande kill <pid> par exemple), et l'historique des commandes entrées. L'utilisateur a donc la possibilité de parcourir l'historique avec les flèches du clavier(haut, bas).

Commande Signification

ps

  • Afficher les informations sur les processus existants

sinfo

  • Afficher des informations sur les sémaphores existants

lspci

  • Lister tous des périphériques liés au PCI

echo

  • Activer ou désactiver l’écho sur la console

date

  • Afficher la date actuelle

couleur

  • Changer la couleur du texte du shell: couleur <couleur>

clear

  • Effacer l'écran

kill

  • Tuer le processus dont le pid est passé en paramètre: kill <pid>

exit

  • Sortir du noyau

ifconfig

  • Afficher l'adresse mac de la carte réseau

playmusic

  • Jouer un morceau de piano

test

  • Lancer les tests: test <nom du test>

bunny

  • Afficher la mascotte de BunnyOS

sleep

  • Passer le shell dans l’état endormi (paramètre en millisecondes): sleep <temps>

version

  • Afficher la version du noyau: [date-heure de compilation, identifiant personne qui a compilé]

clock

  • Afficher la fréquence des interruptions horloge

history

  • Afficher les commandes enregistrées dans l'espace historique

aide/help

  • Afficher les commandes disponibles
  • Pour plus d'informations, saisir: aide <commande>
Commande help sur le shell de BunnyOS

Extensions

Pilote souris PS/2

Après activation du contrôleur PS/2, à chaque déplacement de la souris une interruption est levée et fait appel au traitant qui s'occupe d'interpréter les paquets de données envoyés par la souris.
Trois paquets de huit bits sont envoyés par la souris à chaque déplacement. Le premier indique le sens de déplacement de la souris selon les deux axes (et s'il y a clique sur les boutons droit, gauche ou milieu). Le second indique la variation du déplacement selon l'axe horizontal. Le dernier indique la variation du déplacement selon l'axe vertical.
La fonctionnement de la souris a été testé en mode VGA (voir plus bas) en simulant le curseur par une case rouge.

Pilote PCI

La réalisation d'extensions demande de pouvoir communiquer avec les différents composants et périphériques de l'ordinateur. Parmi ceux-ci on trouve les composants PCI. Nous avons donc réaliser un driver simple permettant de communiquer avec le bus PCI, en particulier il permet de rechercher un périphérique et enregistre l'espace de configuration PCI correspondant afin de le contrôler.

Commande lspci sur le shell de BunnyOS

Pilotes audio

Pilote SoundBlaster

Le pilote SoundBlaster était un standard présent sur les cartes éponymes de Creative. Nous avons commencé la programmation du driver puisque la VirtualBox est capable de la virtualiser, que le driver est bien documentée et donc relativement facile à faire. Nous avons cependant arrêté de le développer car nous voulions que notre OS puisse booter sur machinie. Or les cartes SoundBlaster sont désuètes depuis 2004, elles ne sont donc présentes ni dans les machines de l'école ni sur nos portables, et donc le driver ne peut fonctionner dessus. Nous avons donc préféré le driver décrit dans la partie suivante.

Pilote AC97

L'Audio Codec '97 (AC'97) est un standard développé par Intel encore présent dans bon nombre de cartes sons. Elles sont à fortiori présentes dans les pc de l'école, ce qui nous permet de générer du son non seulement sur VirtualBox, donc laquelle est présent le codec, mais aussi directement sur machine nue. Nous avons donc importé une musique se jouant au démarrage du système, et qui peut être rejouer sur demande par la commande playmusic du shell.

Interface utilisateur graphique

Console VGA 80x25

La première interface utilisateur utilise le mode console permettant d'écrire 25 lignes de 80 caractères de long à l'écran. L'interface graphique implémentée permet, via cet affichage simpliste, de gérer différents encarts pour surveiller l'activité du système ou réaliser des tâches de fond. Le passage d'un encart à l'autre se fait via une commande dans le shell ou par la combinaison de touches Alt+Tab.

Interface graphique VBE 2.0

La seconde étape vers une interface graphique évoluée passe par une gestion plus fine de l'affichage. Nous avons choisi d'implémenter les fonctionnalités offertes par la norme VBE 2.0 puisqu'elle est bien documentée et permet de gérer de grandes résolutions d'écran et offre un palette de couleurs satisfaisante. L'interface utilisateur VBE est encore inachevée, complexe à mettre en oeuvre du fait de le nécessité de passer un mode réel. A l'heure actuelle, les opérations de bas niveau concernant la manipulation de l'écran sont fonctionnelles. Toutefois notre but est de mettre en place un gestionnaire de fenêtres qui n'en est pour l'instant qu'à ses débuts.

Carte réseau

Étant donné la possibilité de VirtualBox de simuler plusieurs types de cartes réseau, on choisi d'utiliser les cartes AMD Am79C973/Am79C975. Au démarrage du système, le scan du bus PCI permet de détecter tous les périphériques connectés (image commande lspci) , en particulier les cartes réseau connectées. Ce scan nous permet de lire l'adresse de base (BAR) grâce à la quelle on accède à la mémoire EEPROM de la carte réseau. La documentation sur la carte nous l'emplacement où lire l'adresse MAC de cette carte.

Bilan

  • Mise en pratique des cours de SEPC (synchronisation et sémaphores) et CSE (passage kernel-user).
  • Maîtrise meilleure du fonctionnement de base de tout système d'exploitation.

Le projet système nous a permis de mettre en pratique les connaissances obtenues tout au long de l'année. C'est une expérience très profitable puisque c'est probablement la seule occasion que nous aurons de concevoir un noyau depuis le début, et pour cette raison nous nous sommes beaucoup investi et avons beaucoup appris de ce projet.

Outils Utilisés

  • VirtualBox: logiciel de virtualisation de systèmes d'exploitation
  • Mercurial: logiciel de gestion de versions
  • ddd: outil de débogage
  • Qemu: pour tester le noyau sur un autre support que la VB

Références

  • OsDev Wiki pour les développeurs de systèmes d'exploitation
  • Souris PS/2 Wiki sur les Souris PS/2
  • VBE 2.0 Spécification du VBE 2.0 par la VESA
  • Am79C973/Am79C975 Spécification cartes réseau AMD Am79C973/Am79C975
  • Norme AC'97 La norme AC'97 pour comprendre son fonctionnement

Téléchargement

Vous trouverez ici le binaire de notre noyau.