Projet système PC : 2012 – Laura DELAPORTE, Pauline JEAN-MARIE et Siméon MARIJON

De Ensiwiki
Aller à : navigation, rechercher


Nespress'OS
Im.png

Développeurs Siméon Marijon
Laura Delaporte
Pauline Jean-Marie


Cette page présente brièvement le système d'exploitation Nespress'OS. Ce système a été réalisé par Laura Delaporte, Pauline Jean-Marie et Siméon Marijon dans le cadre du projet système sur PC 2012, encadré par Damien Dejean.

Présentation:

Le projet de spécialité systèmes consiste à programmer un petit système d'exploitation. Un cahier des charges, fourni, nous donnait les fonctionnalités minimales à implémenter :

Gestion du matériel 
  • Affichage à l'écran
  • Lecture du clavier
Gestion des processus 
  • Création, lancement, arrêt de l'exécution des programmes
  • Ordonnancement (qui a le droit de s'exécuter et pour combien de temps)
Implémentation d'un shell
  • Commandes pour obtenir et gérer l'état du système (ps, clock...)
  • Gestion des processus (lancement d'une application au premier ou en arrière plan, kill, ...)

Les détails du cahier des charges se trouvent [ici]

A ce cahier des charges nous avons ajouté un ensemble de fonctionnalités:

  • Une gestion minimale de la mémoire virtuelle
  • La possibilité de lancer plusieurs shells en parallèle.

Illustration de nos extensions

Mémoire Virtuelle

Nous avons choisi de faire cette extension par intérêt pédagogique plus que par utilité. En effet, le fonctionnement théorique de la mémoire virtuelle nous a parfois semblé compliqué, voilà pourquoi nous avons voulu le mettre en pratique. Sinon, l'intérêt de la mémoire virtuelle est de permettre à deux processus de se partager la mémoire et de mettre en place des mécanismes de protection mémoire. Néanmoins, nous n'avons pas eu le temps d'implanter une vraie mémoire virtuelle ; voici les principaux manques :

  • L'allocation des pages virtuelles ne se fait qu'au démarrage du processus, car le traitement de l'exception "page fault" n'a pas donné les résultats attendus
  • L'allocation sur le tas en mode user ne fonctionne pas, bien que le tas soit alloué
  • Chaque processus a sa mémoire virtuelle mais le code copié en mémoire est le même pour tous, "user.bin", au lieu que ce ne soit que le code du processus en question.
  • Enfin, peu de tests ont été faits, pour l'instant nous savons seulement que le passage en mode user se passe correctement, que des instructions simples sont exécutées et que l'on peut démarrer de nouveaux processus en mode user.

De manière globale, notre mémoire virtuelle est construite de la manière suivante :

  • jusqu'à 64Mo, adresses virtuelles et adresses physiques sont les mêmes. Le kernel étant de 0 à 16Mo, il y a un partage de l'espace kernel pour tous les processus. Il manque une protection des adresses de 16 à 64 Mo pour qu'on ne puisse pas accéder aux cases physiques par ces adresses.
  • A partir de 1 Go il y a l'espace "user" avec son code et sa pile allouée. On peut allouer le tas mais il faut alors le diminuer pour pouvoir avoir plusieurs processus en même temps.
  • Normalement toutes les cases prises pour un processus sont libérées à sa mort mais cela n'a pas pu être testé.


Traitement des exceptions

Multi-Shell

Notre système d'exploitation est également capable de gérer simultanément jusqu'à quatre shells (ce nombre est fixé par une variable modifiable dans le code), créés au démarrage. Il ne s'agit pas de fenêtres distinctes : un seul shell est visible à la fois. On peut passer de l'un à l'autre en appuyant sur les touches F1 à F4. Il est ainsi possible de lancer un processus dans un shell, puis d'aller exécuter d'autres commandes dans un autre, de revenir au premier afin de vérifier la progression du processus lancé. Nous avons également implémenté le raccourci clavier Ctrl+C pour arrêter un processus en cours. Les commandes disponibles dans un shell sont les suivantes :

clear
Efface tout l'écran.
clock 
Affiche le temps écoulé depuis le démarrage du système
echo
Permet d'activer/désactiver l'affichage des caractères frappés:
  • echo off désactive l'affichage
  • echo on active l'affichage
  • un appui sur la touche 'Escape' permet de réactiver l'affichage
help
Affiche les différentes commandes disponibles dans le système.
kill <pid>
Tue le processus identifié par le pid passé en argument
logo 
affiche le logo de Nespress'OS
ps 
affiche à l’écran les informations utiles (PID, nom, état, priorité) des processus existants dans le système. Le shell dans lequel on se trouve est indiqué par une astérisque.
sinfo 
affiche les informations des sémaphores existants dans le système (identifiant, valeur du compteur, processus bloqués)
test 
lance le processus "poisson rouge" qui affiche son nom en continu (permet par exemple de vérifier la restauration correcte de l'affichage lors des changements de console, et des commandes telles que ps, kill ou Ctrl+C)

Apports et difficultés

Une des difficultés majeures a été d'implémenter le passage du mode kernel au mode user. En effet, tous les processus sont à leur création dans le mode kernel, mais pour pouvoir les faire passer dans le mode user, il faut donner l'illusion qu'ils viennent de faire un passage du mode user au mode kernel.

Le principal apport de ce projet est bien sûr une meilleure compréhension des systèmes d'exploitation. Ce projet complète les cours théoriques de SEPC et de CSE, et s'inscrit dans le prolongement des travaux pratiques de PSE.

Le binaire du noyau

Notre OS peut-être testé grâce à Virtualbox. Vous le trouverez Fichier:Kernel.tgz. Cette version affiche notre logo au démarrage et lance 4 shells.

Références

Documentations et sources empruntées

  • Documentation intel: [1]
  • OSDev.org
  • Pagination: [2]