Projet système PC : 2011 - Ning Bo Hu, Maxime France-Pillois, Georges Savoundararadj

De Ensiwiki
Aller à : navigation, rechercher


Poulpos logo.jpg PoulpOS

Développeurs Ning Bo Hu, Georges Savoundaradj,
Maxime France-Pillois


L'équipe

Étudiants : Ning Bo Hu (filière Télecommunication), Georges Savoundararadj (filière Systèmes et Logiciels Embarqués) et Maxime France-Pillois (filière Systèmes et Logiciels Embarqués)
Enseignant tuteur : Gregory Mounié

Présentation

Étudiants en 2ème année à l'Ensimag (Grenoble-INP), nous avons pris part à un projet informatique du 17 mai au 10 juin 2011. L'objectif de celui-ci, est de concevoir un système d'exploitation basique.
Le projet est soumis au respect d'un cahier des charges minimal, fournis par les enseignants de l'école. Il regroupe les fonctionnalités primaires de tout système d'exploitation. Celles-ci seront détaillées dans la suite de cette article.
En plus de cette base imposée, des extensions étaient à implanter sur le système. Le choix des extensions étant laissé à notre guise.

Le projet

Le système d'exploitation qui nous est demandé de réaliser est un système multi-tâches permettant le lancement de plusieurs processus en parallèle. Pour mener à bien ce projet, nous avons suivi quatre phases majeurs de développement.

  • implantation des fonctionnalités de base d'un système d'exploitation (ordonnanceur, sémaphores, ...)
  • séparation de la mémoire utilisateur de la mémoire noyau. Protection de fonctionnalités noyau.
  • interface utilisateur : invite de commandes
  • extensions majeurs:
    • la carte son
    • le multi-terminal

C'est sont des différentes phases qui seront détaillées par la suite.

Fonctionnalités basiques d'un système d'exploitation

la commande poulpe affiche Paul l'emblème de l'OS

Un système d'exploitation a pour rôles de répartir les ressources matériels (temps processeur(s), mémoires, ...) entre les différents processus, ainsi que de fournir quelques primitives aux programmeurs.
Dans le but de réaliser cela, nous avons implanté un système d'ordonnancement permettant de répartir le temps d'exécution processeur entre les processus en cours, en fonction de leurs priorités. Pour cela, comme préconisé par l'équipe enseignante, nous avons implémenté un système de type "round-robin". Cette politique d'ordonnancement permet au processus de même priorité de s'exécuter les un après les autres selon le principe d'une file circulaire. Un point à noter, pour les programmeurs de notre système, est que la gestion des priorité en processus est une gestion statique, par conséquent un processus de priorité maximum ne rendant pas de lui même la main au système ne permettra pas l'exécution des autres processus de plus faibles priorités.
Conformément aux cahier des charges nous fournissons quelques primitives telles que l'attente de processus fils (waitpid), la temporisation (waitclock) ainsi que les fonctions de gestion (création, attente, réveille, destruction) de sémaphores.


Protection des espaces mémoires noyau / utilisateur

Un phase très importante lors du développement d'un système d'exploitation est la séparation des espaces mémoires utilisateur et noyau. Cela permet de protéger l'exécution du système. Ainsi, grâce à la séparation mémoire, l'utilisateur n'a pas accès à toutes les fonctions et informations noyau, ce qui permet de minimiser les risques de bugs du système.
Dans le but de respecter cette isolation, dans notre système d'exploitation, un processus faisant un accès à une fonction noyau non autorisée sera immédiatement tué.

L'interface utilisateur : Le shell

la commande poulpe affiche Paul l'emblème de l'OS

Une invite de commande (ou shell) a été implémentée sur PoulpOS pour permettre un utilisation facile. Ce shell regroupe les instructions suivantes :

Commande Description

help

Affiche les commandes disponibles et leurs descriptions.

exit

Quitte le shell.

ps

Affiche les processus lancés et leurs états (élu, éligible, bloqué).

clear

Nettoie l'écran.

echo <off | on>

Passe l'affichage en mode <off | on>.

history

Affiche toutes les commandes précédentes.

ifconfig

Affiche l'adresse MAC de la carte réseau si une carte est reconnue.

lspci

Affiche la liste des périphériques connectés au bus PCI.

kill NUM

Kill le processus de numéro "NUM".

poulpe

Affiche le symbole du système d'exploitation.

sinfo

Affiche les informations sur les sémaphores.

sleep NUM

Attend le nombre de secondes passées en paramètre!

<flèche du haut>

Remonte dans l'historique.

son1

Produit un son.

son_off

Arrête le son en cours.

record1

Enregistre l'entrée microphone. (environ 20 sec)

listen_record1

Ecoute du son enregistré par record1.

uptime

Affiche l'heure et le temps écoulé depuis que l'os a été lancé

Une extension mineure a été implémentée pour développer la facilité d'utilisation du shell. Il s'agit de l'historique de commande. Celle-ci permet de ré-accéder aux commandes précédemment tapées en appuyant simplement sur la flèche du haut.


Extensions du système d'exploitation

Carte son intel AC97 : pilote audio ALSA

Nous avons implémenté un driver permettant de gérer les sorties et les entrée audio de la carte son AC97. Nous avons choisi ce type de carte son car elle est émulée dans VirtualBox, de plus elle est installée dans les ordinateurs ENSIPSYS (salle D201 de l'Ensimag).

Nous pouvons actuellement lancer l'écoute d'un son (ou musique) en stéréo, en configurant simplement (fonction drivers "set_sound_info") quelques informations essentielles sur le son : adresse de base de l'emplacement mémoire des données, taille des données et fréquence d'échantillonnage de la musique. Puis le son peut être lancé avec la fonction "turn_on_sound". Une fonction "turn_off_sound" permet d'arrêter le son à tout instant.

Le driver réalisé permet aussi d'exploiter les possibilités d'enregistrement audio de la carte AC97. En effet, comme pour la sortie, trois fonctions simples permettent d'enregistrer un son à partir de l'entrée microphone. Dans un premier temps, un emplacement doit être réservé pour la capture des données. Puis, comme pour la sortie audio, la fonction driver "set_record_info" doit être utilisée pour renseigner l'adresse de base de données, la taille maximum des données, ainsi que la fréquence d'échantillonnage. Le lancement d'un enregistrement est commandé par la fonction "turn_on_record". L'enregistrement d'un son se termine lors de l'appel de la fonction "turn_off_record", ou lorsque que tout l'espace mémoire disponible a été enregistré. L'enregistrement peut ensuite être réécouter comme n'importe quel son.

Nous avons développer un programme permettant de convertir un fichier son .wav en variable c (sous forme de tableau) lisible par la carte son. Fichier:Wave2data.tgz

Multi-terminal

Le multi-terminal est une fonctionnalité permettant de visualiser sur le même écran plusieurs buffers texte contenant un écran (le tableau de la mémoire vidéo est simplement copié), comme proposé dans la plupart des systèmes d'exploitations. Ainsi, l'écriture sur l'écran passe systématiquement par un buffer et éventuellement sur l'écran, si le terminal choisi est celui du shell exécuté.

La permutation entre les différents terminaux se fait à l'aide des touches F1 à F4.

Apports et difficultés rencontrés

Le projet système nous a apporté l'expérience du développement d'un système d'exploitation à partir de presque rien, complétant ainsi les cours de SEPC et CSE.

Les difficultés que nous avons rencontré lors de ce projet, se trouvaient principalement dans le développement de la carte Ethernet. En effet, nous n'avons pas réussit à configurer la carte de sorte que l'envoie ou la réception de paquets fonctionne. De plus, le développement du multi-terminal traina en longueur malgré son apparente facilité de développement ce qui nous a fait prendre du retard dans le projet.

Documentation

OSDev : Un wiki sur le développement de système d'exploitation très utile
BareMetal OS : OS 64 bits écrit entièrement en assembleur
Documentation carte son AC97 : Fichier:Ac97 r23.pdf, Fichier:Ac97 doc1.pdf, Fichier:Ac97 doc2.pdf et Fichier:Ac97 doc3.pdf
Documentation carte réseau 8354xEM : Fichier:8254x GBe SDM.pdf

Outils utilisés


Réalisation : image du noyau

Fichier:Kernel.bin.tgz