Projet système PC : 2011 - Clément Léger, Guillaume Sarrazin, Guillaume Lager

De Ensiwiki
Aller à : navigation, rechercher


Aramos
Logo ARamOS.jpg

Développeurs Clément Léger, Guillaume Sarrazin, Guillaume Lager

Présentation du projet

Le projet système PC a pour objectif de concevoir un système d'exploitation minimaliste.

Un système d'exploitation a pour but de rendre utilisable par une personne les ressources disponibles sur un pc. Pour illustrer, nous pouvons dire que le système d'exploitation est à l'ordinateur ce que le volant est à une voiture. Il permet de transmettre au reste du système des demandes formulées simplement par l'utilisateur.

Pour cela, une spécification du noyau nous a été fournie par l'équipe enseignante. Des extensions ont ensuite été choisies puis implantées dans le système afin de rendre celui-ci plus complet.

L’équipe ARamOs

L'équipe était composée que 3 étudiants de la filière Systèmes et Logiciels Embarqués :

L'équipe encadrante était composée de Simon Nieuviarts, Grégory Mounié, Franck Rousseau, Sébastien Viardot

Fonctionnalités de base

Changement de contexte et Ordonnancement

Le changement de contexte permet au PC de passer d'une tâche à l'autre. L’ordonnancement permet quant à lui de décider quand le changement de tâche aura lieu. L’ordonnanceur de base permet d’interrompre la tâche en cours et de lancer une tâche en attente grâce au changement de contexte. Les tâches à exécuter sont lancées selon un ordre de priorité défini au lancement des tâches. L'ordonnancement va se produire à intervalle régulier et lorsqu’une nouvelle tâche est lancée ou se termine.

Fonction de synchronisation

Des sémaphores permettent de synchroniser des tâches entre elles ainsi que de protéger certaines parties du code. D'autre fonctions permettent de synchroniser de façon temporelle (attente) les processus.

Séparation Utilisateur/Noyau

La partie noyau et les programmes utilisateurs disposent d'espace d’exécution séparé. Cette fonctionnalité est nécessaire afin d'assurer un minimum de sécurité dans le système. Les programmes utilisateurs s’exécutent avec des droit réduits. Lorsqu’un programme a besoin d'une fonctionnalité du noyau (sémaphore, accès à l'écran) celui-ci va devoir utiliser des fonctions spéciales exécutées par le noyau. Ces fonctions vont avoir aussi pour rôle de vérifier la validité des demandes.

Pilote de console

Le pilote de console de base permet aux programme utilisateur d'accéder à l'écran et au clavier. Un seul programme à la fois peut avoir accès aux entrés clavier, par-contre les affichages peuvent être entrelacés.


Interpréteur de commande (Shell)

Notre système est muni d'un interpréteur de commande : AramShell

Ce Shell permet de lancer divers programme à l'aide de commandes. Ces programmes peuvent soit être lancés en mode bloquant (le Shell est arrêté durant l'exécution du programme) soit en arrière plan (le Shell est exécuté suivant la priorité du programme lancé). Les commandes peuvent avoir un nombre d'arguments variables.

La liste des commandes est détaillée dans cet article : Commandes ARamShell

Note : un texte entre '"' est considéré comme un seul argument.

Extensions

Les extensions choisies sont présenté dans cette section. Toutes sont fonctionnelles sauf la paginations qui n'a pas totalement été mise en place.

Pilote Souris

Le driver souris a été fortement inspiré par les informations et le code mis sur OSdev. Nous sommes restés au mode par défaut avec 3 boutons par manque de temps car nous n'avons essayé de la gérer que vers la fin du projet. Le driver de la souris récupère les informations venant de celle-ci et les transmet au gestionnaire de souris.

Le gestionnaire de souris permet d'afficher une souris à l'écran en mode graphique. Le dessin de la souris est rudimentaire car nous n'avons pas beaucoup de primitive graphique. Nous avons donc utilisé la forme la plus simple, un rectangle.

Le gestionnaire de souris gère aussi un petit outil de dessin. En utilisant la commande set_draw_mode du terminal, on peut tracer des polylignes de façon interactive dans les fenêtres graphiques.

Pilote VGA

Nous avons mis en place des procédures qui pilotent la carte VGA pour pouvoir passer du mode 13h (320*200, 256 couleurs avec adressage linéaire de la mémoire vidéo) au mode texte 3h. Cela se fait par des appels au BIOS à l'aide d'une fonction fournie par l'équipe d'encadrement.

ARamOs supporte plusieurs fenêtres graphiques. Pour cela nous avons mis en place des tampons mémoires contenant les données de chaque fenêtre. Un pointeur nous permet de connaître la fenêtre courante. Pour passer d'une fenêtre à l'autre, il faut utiliser les touches F5, F6 et F7.

Notre gestionnaire graphique contient un ensemble de primitives graphiques permettant de tracer des formes géométriques de base dans la mémoire vidéo d'une fenêtre graphique donnée: tracé de rectangles plein ou vides, segments et polylignes. Nous avons entamé l'affichage graphique vers la fin du projet. Par manque de temps, l'affichage graphique n'a pas pu être très développé.

Pilote de carte son

Afin d'apporter une interaction de plus avec l'utilisateur nous avons fait le choix d'implémenter un pilote de carte son.

Pilote du codec AC'97

Notre choix s'est porté sur les cartes son possédant un codec AC'97. Ce codec est maintenant répandu sur tous les ordinateurs et est relativement générique. La qualité de ce codec est très correcte et permet de jouer des échantillons stéréo codés sur 16-bit pour chaque canal. Afin de convertir des fichiers wave en tableau de short nous avons réalisé un programme téléchargeable ici : Wave_To_C. Cette carte est présente sur le bus PCI et il faut donc des routines permettant d'énumérer le bus et de trouver les périphériques présents sur celui ci.

Système audio

Pour permettre un développement plus modulable des pilotes de carte son pour notre système nous avons réalisé une couche audio supplémentaire permettant d'abstraire le fonctionnement du système de l’implémentation du pilote. Pour cela, chaque pilote doit implémenter une certaine structure contenant des fonctions à respecter. Le pilote de carte son est ensuite enregistré auprès du système audio et sera utilisé si la carte est détectée. Cela permet de rajouter facilement des pilotes de carte son sans pour autant devoir modifier la structure du système.

Architecture audio
Architecture audio

État de l'implémentation

Actuellement le pilote AC97 permet la lecture et l'enregistrement depuis la carte son. Deux fonction snd_read et snd_write permettent de lire les données en provenance de la carte son et en écrire. La fonction write est non bloquante et renvoie le nombre d'octet lus après avoir copier les données utilisateurs dans les buffers de la carte son. La fonction read quand à elle est bloquante et permet de lire les données des buffers de la carte son et les copient dans un buffer utilisateur. Les fonctions précédentes peuvent être testés à l'aide des commandes player, piano et record (voir ARamOS_Commandes)

Pilote de carte réseau

Développer un pilote de carte réseau s'est révélé être très intéressant et cela permet de communiquer avec l’extérieur.

Pilote de carte Intel 8254x (intel e1000)

Le développement du pilote à été facilité grâce aux sources du pilote e1000 du noyau Minix. Cette carte utilise le port PCI et le code de détection écrit pour la carte son à donc été réutilisé.

Pile réseau

A l'instar du système audio, la pile réseau a été pensé de manière à s'affranchir du comportement du pilote de carte réseau. Chaque pilote de carte réseau déclare une interface (structure) de communication (init, write, read, get_stat...) et l'enregistre auprès du gestionnaire Ethernet. Lors de l'initialisation du système Ethernet ce dernier va tenter d'initialiser chaque driver enregistré et utilisera le premier fonctionnel. Les pilotes réseaux doivent appeler la fonction net_read_packet afin de retransmettre le paquet reçu à la couche supérieure. La couche Ethernet permet l'ajout de protocoles simplement en utilisant le même système que pour les pilotes. Chaque gestionnaire de protocole sur Ethernet s'enregistre auprès du gestionnaire Ethernet et ce dernier dispatchera les paquets en provenance de la carte réseau en fonction du protocole. Il en est de même pour le gestionnaire de protocole ipv4. En effet plusieurs protocoles utilisent ce dernier.

Pile réseau d'AramOS.

Etat de l'implémentation

La couche réseau actuelle supporte le protocole arp ainsi que les datagrammes IPV4 basiques. Une partie du protocole ICMP est aussi implémentée permettant ainsi de répondre et d'envoyer des ping. Les fonctionnalités précédentes peuvent être testé à l'aide des commandes net_info et ping.

Système de fichier

Le système de fichier permet de créer des fichiers et des répertoires, de les supprimer, de se déplacer dans l'arborescence, de lire et éditer des fichiers. Nous avons repris le principe des inodes mais en le simplifiant. Par exemple nous n'avons pas plusieurs rangs d'indirection. Si la place alloué pour le fichier courant est trop faible alors on rajoute un bloc à la fin du fichier comme un élément à la fin d'une liste. Un répertoire est un fichier comme un autre, seul un champ indique qu'il s'agit d'un répertoire.

Concernant la suppression de fichier (ou de répertoire), on se contente d'invalider le fichier. Il sera réellement supprimé de la mémoire quand on écrira un nouveau fichier dans le même répertoire que le fichier supprimé.

Ordonnancement

Une amélioration a été apportée à l'ordonnancement. Un quantum est associé à chaque processus, lorsqu'un processus est lancé la valeur de ce quantum est initialisé à TIMER_FREQ_CLOCK/SCHED_FREQ. À chaque interruption d'horloge ce quantum est décrémenté et, lorsqu'il atteint 0 l'ordonnanceur est appelé.

Cette stratégie permet à chaque processus de s’exécuter pendant la même durée. Dans l'ordonnancement de base, l'ordonnanceur était appelé à intervalle fixe et ne tenait pas en compte depuis quand le processus était actif.

Pagination

La base du mécanisme de pagination est disponible dans ARamOS.

Mécanisme de pagination en 32-bits

Mécanisme de pagination implanté. Le mode de pagination utilisé est le mode 32-bit. Ce mode est sur 2 niveaux de page. Comme le montre le schéma suivant, le registre cr3 contient l'adresse de la première table des pages (page directory) les 10 premiers bits de l'adresse virtuelle vont déterminer une entrée dans la première table des pages. L'entrée déterminée va contenir l'adresse de la seconde table des pages. Les 10 bits suivants de la table des pages vont permettre de déterminer l'entrée dans la seconde table des pages (page table). Cette entrée va contenir l'adresse de la page physique. Les bits restant vont permettre de déterminer le mot dans l'adresse physique.

Pagination 32bits sur les processeurs Intel

Implémentation

Le mécanisme d'affectation d'une page physique à une page virtuelle a été implémenté dans notre système. Ainsi lors d'une erreur de page (correspondance @vir->@phy non trouvée), il est possible d'allouer une page et de la relier à l'adresse virtuelle.

L'allocation de page est gérée par un module qui entretient une liste de page_libre. Ce module prend ces pages dans un emplacement mémoire réservé. A terme, les allocations des programmes utilisateurs ne devront passer que par ce mécanisme.

État Avancement

Des tests on été réalisés pour vérifier l'accès en écriture et en lecture à une adresse non présente initialement. Ces tests ce sont révélés concluant mais des bugs persistent et la pagination n'est pas encore utilisable dans le système.

Démonstrations

Passage de la batterie de tests

Les tests fournis par les enseignants passent tous sur AramOs. Aussi bien sur machines virtuelles que sur machines nues. Fichier:Video test aramos.ogg

Captures d'écrans

Ecran de démarrage Ecran en mode VGA commande net_info

Bilan

Points forts

  • Tous les tests passent sur machine nue
  • Nombreuses extensions

Points faibles

  • Extensions non compatible sur machines réelles
  • Pagination non terminée
  • Affichage graphique peu développé
  • UDP non implémenté

Téléchargement

Outils

Mercurial : gestionnaire de version

Gtalk : Messagerie instantanée

Meld : outils de merge

Virtual-Box : Logiciel de Virtualisation

Documentation

Simple OS : Site de la conception d'un Système d'exploitation

Norme AC'97 La norme AC'97 détaillant les valeurs des registres de la carte son

OSDev La bible du système d'exploitation maison

Software developer manual i8254 Manuel du développeur logiciel pour la famille de cartes réseau intel 8254x

Minix Le système d'exploitation à but pédagogique réalisé par Andrew Tanenbaum