Catégorie:Projets de spécialité

L'équipe

Etudiants : Sarah Dupont et Thibaut Rufflart
Enseignant tuteur : Simon Nieuviarts

Nous sommes deux étudiants de deuxième année à l'Ensimag (Grenoble) en filière Systèmes et Logiciels Embarqués.

Présentation

Du 20 mai au 16 juin 2010, nous avons élaboré un noyau de système d'exploitation pour PC que nous avons baptisé OSBusters. Ce projet s'est déroulé dans le cadre du projet de spécialité proposé à l'Ensimag en fin de deuxième année. Ainsi, un cahier des charges minimal nous était fourni. Nous avons également réfléchi à des extensions possibles.

Nous nous adressons ici à un public relativement novice en système. Pour des informations plus complètes, vous pouvez nous contacter.

Le shell

Le shell (ou interpréteur de commande) est l'interface textuelle dans laquelle l'utilisateur entre des commandes (comme dans les terminaux sous Linux par exemple) et qui lance les processus correspondants à ces commandes.

Le shell doit attendre que l'utilisateur finisse de rentrer une commande avant de la traiter.

Dans notre shell, il est impossible d'exécuter une commande en tâche de fond étant donné qu'il ne s'agit que de processus à interface textuelle. Il attend donc la fin de l'exécution du processus qu'il a lancé avant de reprendre la main pour inviter l'utilisateur à saisir une nouvelle commande.

Dans notre shell, les principales commandes disponibles sont :

Commande

Description

help

Afficher les commandes disponibles.

exit

Permet de quitter le système d'exploitation.

ps

Affiche les processus existants.

pinfo

Affiche la liste des files de messages.

clear

Nettoie l'écran.

run test

Lance les tests fournis.

aghostintheshell

Affiche l'écran de présentation de notre shell.

echo

Active ou desactive l'echo du clavier.

clock

Affiche ou masque l'horloge en haut à droite de l'écran.

setcolor

Fixe la couleur d'affichage à la couleur .

setbgcolor

Fixe la couleur de fond à la couleur .

Accédez à l'aide détaillée de chaque fonction en tapant la commande :

help 

Par exemple, en tapant help setcolor vous afficherez l'aide propre à la commande setcolor.

Les deux modes de protection

Dans un système classique, il y a plusieurs niveaux de protection, avec pour chaque niveau, une liste d'opérations possibles. Comme demandé dans la spécification du projet, nous gérons deux niveaux de protection :

Communication entre processus

Communication père-fils

Les processus connaissent leur père (le processus qui les a lancés) ainsi que leurs fils (les processus qu'ils ont lancés).

Ils communiquent entre père et fils par le biais des fonctions :

Lorsqu'un processus se termine de façon normale (sans effectuer d'exit de lui-même), il y a quand même un appel à exit afin de terminer proprement ce processus. Le père reçoit donc toujours une valeur de retour s'il le souhaite.

Les files de messages

L'autre moyen pour les processus de communiquer est par le biais de files de messages. Comme le nom l'indique, il s'agit de files donc de FIFO (First In First Out) dans lesquelles on fait transiter des messages.

Ainsi les processus peuvent au choix :

Les files ont une capacité limitée définie à leurs créations.

Une extension possible : les terminaux multiples

Parmi les diverses extensions possibles à ce projet, nous avons choisi de développer des terminaux multiples. Ainsi plusieurs shells tournent parallèlement dans notre système. Il est possible de passer de l'un à l'autre en appuyant sur les touches F1 à F4. Les processus lancés sur un des terminaux continuent à s'exécuter normalement lorsque l'on affiche un terminal différent à l'écran.

Dans notre système, il y a donc 4 terminaux.

Afin que tout se passe bien, il est nécessaire de bien séparer les commandes tapées dans chaque terminal afin qu'un terminal n'exécute pas une commande lancée dans un autre. De même il faut faire attention à bien rediriger la sortie d'un processus vers le terminal dans lequel il a été lancé.

Le bilan

Les apports de ce projet

Les difficultés rencontrées

Le noyau

Une version compilée de notre noyau est disponible ici

Documentation