Projet système PC : 2012 – Sarah DELLABANI, Méghane HARDIN et Manuel Alejandro SOTO FLORES

De Ensiwiki
Aller à : navigation, rechercher


LactOS
Nomilk.png

Développeurs Sarah DELLABANI, Méghane HARDIN, Manuel Alejandro Soto Flores

Contexte

Le projet de specialité s'inscrit dans le cadre de la formation Master 1 en 2ème année à l'Ensimag. Plusieurs sujets étaient proposés, parmis lesquels le projet de type système de conception d'un noyau de système d'exploitation que nous avons choisi.

Equipe

Etudiant :

Sarah DELLABANI ENIMAG SLE 2A

Méghane HARDIN ENIMAG SLE 2A

Manuel Alejandro Soto Flores ENSIMAG ISI 2A


Encadrant : Gregory MOUNIE

Objectifs

L'objectif de ce projet est de concevoir un système d'exploitation basique respectant un cahier des charges minimal, fournis par les enseignants de l'école. Il regroupe les fonctionnalités primaires que nous détaillerons dans la suite de cet article. Pour les groupes de trois membres il était demandé de réaliser au moins une extension (dont le choix était libre).

Environement

Le développement s'est fait en C et en assembleur sous Linux et la simulation du fonctionnement de notre système a été effectuée à l'aide d'une machine virtuelle (type VirtualBox).

Existant

Nous avions réalisé un bout de système d'exploitation gérant la console, l'horloge et le changement de contexte en Pratique Système et avions réalisé un Shell en cours de SEPC. Nous avons donc pu réutiliser ces sources en les adaptant à notre sujet.

Travail réalisé

Fonctionnalités de base

Le cahier des charges nous étant fournit, il s'agissait de l'implémenter au mieux. L'affichage à l'écran, la notion de processus, le changement de contexte (passage d'un processus à l'autre) ainsi que la gestion de l'horloge étaient implémentés dans les TP de pratique système. Les points autres aspects sont expliqués dans ce qui suit.

Ordonnancement

L’ordonnancement permet d’élire la tâche qui va être exécutée. L’ordonnanceur va interrompre la tâche en cours et lancer une tâche en attente à l'aide d'un changement de contexte. Les tâches en attente prêtes à être exécutées, sont dans une file d'attente activables. Cette file prend en compte les priorités et l'ordre d'arrivée (dans la file) des processus. En effet, à chaque appel de l’ordonnanceur, le prochain processus élu est le processus le plus vieux parmi les processus ayant la priorité la plus grande.

Synchronisation

Des sémaphores sont utilisés pour permettre la synchronisation entre les processus et la protection des données partagées. L'appel à la fonction wait_clock peut aussi permettre de réaliser cette synchronisation en endormant le processus jusqu'à une certaine heure.

Séparation Utilisateur/Noyau

Il s'agit de la séparation entre l’espace utilisateur et l'espace noyau. C'est la partie qui nous a posé le plus de problèmes et il faut bien s'assurer d'avoir compris les mécanismes sous-jacents au changement de contexte et aux interruptions (ce qu'on met dans les registres, pourquoi, ...) avant de se lancer dans le code.

Une difficulté supplémentaire pour cette partie a été que les outils de debug traditionnels sont mal adaptés à l'utilisation de code assembleur. Par exemple sous ddd, on ne peut pas accéder au code user depuis le kernel.bin et il faut utiliser des options particulières (que nous ne connaissions pas) pour debuger l'assembleur.

Pour tester si nous mettions bien les bonnes adresses dans les registres nous avons donc inséré dans l'assembleur des instructions int $3 qui provoquent une interruption et font appelle au debugger.

Extensions

Nous avons réalisé quatre extensions principales :

- 1 - Driver de souris

- 2 - Driver son sommaire

- 3 - Système de gestion de fichiers

- 4 - Extension du Shell

Driver de souris

Les informations sur l'implémentation de la souris se trouvent sur le site Osdev. La souris possède 3 boutons : droit, milieu et gauche. 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. L'affichage de la souris est très simple car nous n'avons pas beaucoup de primitive graphique. Nous avons donc utilisé la forme la plus simple, un rectangle représentant une case de l’écran.

La pression sur les boutons n'est pas gérer : ça ne produit qu'un message indiquant de quel bouton il s'agit.

Driver de son sommaire

Le PC Speaker est l'une des primitives de son les plus utilisées sur un ordinateur. Il permet de créer des beeps distincts suivant la fréquence donnée. Le code du PC Speaker a été fortement inspiré du code se trouvant à la page Osdev .

Système de gestion de fichiers

Le système de gestion de fichiers n'est basé sur aucun système existant.

Il a été codé en s'inspirant des résultats affichés lorsqu'on utilise les primitives du shell bash utilisé à l'ensimag, ne supporte pas les options et n'utilise pas les raccourcis ../ et ./.

Pour spécifier sur quel fichier/répertoire on désire faire une opération, on peut soit préciser le chemin complet depuis le répertoire racine (exemple : "touch /racine/dir1/file1") soit juste le nom de l'objet depuis le répertoire parent (exemple : on est dans le repertoire dir1, on fait un "touch file1").


Les opérations implémentées sont les suivantes :

- mkdir dir : crée un répertoire dir

- touch file : crée un fichier file

- rmdir dir : supprime le répertoire dir

- rm file : supprime le fichier file

- cd path : change de répertoire

- ls : liste les fichiers et répertoires présents dans le répertoire courant

- cp arg1 arg2 : copie l'objet arg1 dans l'objet arg2

- mv arg1 arg2 : déplace l'objet arg1 dans l'objet arg2

- pwd : affiche le chemin du répertoire courant depuis le répertoire racine

- open file  : renvoie un pointeur sur la structure du fichier qu'on veut ouvrir

- read file : renvoi le contenu de file dans le buffer en paramètre

- write file : écrit dans file le contenu du buffer en paramètre

Extension du Shell

Il était demandé de réaliser un Interpréteur de commandes gérant les commandes suivantes :

- ps : affiche les informations sur les processus existants: pid, état, nom du programme initial lors du lancement du processus

- sinfo : affiche des informations sur les sémaphores existants : leur numéro, les processus en attente et la valeur des compteurs

- exit : sortie du noyau

- echo : fait passer l'affichage en mode echo on ou echo off


Nous avions la liberté d'implémenter toute commande qui nous paraissait intéressante. Mise à part les commandes décrites dans le Système de fichiers implémenté, nous avons ajouté les fonctions

- dummy : affiche "PRINTING" et bloque la console

- test : permet de lancer le test

Nous avons géré la récupération des arguments tapés après les commandes.

En plus de ces commandes, nous avons implémenté un historique qui permet de naviguer dans les commandes précédemment tapées (avec les flèches du clavier).

Bilan

Apport du projet

Ce projet nous a permis de mettre en pratique les cours de système (Pratique du système,CSE et SEPC) suivis cette année à l'ensimag.

Il nous a notamment permis de mieux comprendre comment fonctionnaient le mode user et les changements de mode, ce qui était resté assez abstrait malgré les cours de CSE.

Difficultés rencontrés

Les principales difficultés rencontrées sont liées aux outils de débug que nous avons trouvé compliqués à utiliser/manipuler.

Gestion de projet

Nous étions 14 équipes à travailler sur ce sujet (par binômes ou trinômes), ce qui a été très utile pour situer notre progression et nous entraider.

Nous avions établi un planning au début du projet, ce qui nous a permis de gérer la quantité de travail à accomplir chaque jour et de finir le projet dans une atmosphère plutôt décontractée.

Documentation

OSDev La bible du système d'exploitation maison

Projet Système Documentation du wiki

Mouse driver tutorial by houbysoft et Mouse Input et pour la souris

PC Speaker pour le haut parleur

Software Developer’s Manual Documentation intel

Outils utilisés

Mercurial : gestionnaire de version pour distribuer et gérer le code entre les membres de l'équipe.

DDD et DDD pour débugger le système d'exploitation.

VirtualBox qui est un logiciel qui permet d'émuler un ordinateur. Virtual Box nous a permis de démarrer et redémarrer notre système d'exploitation plus facilement.

Planner pour éditer les diagrammes de GANTT.

Image du noyau