Catégorie:Projets de spécialité
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.
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 (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.
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 :
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.
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.
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é.
Une version compilée de notre noyau est disponible ici