Projet système PC : 2014 - GRAILLAT Amaury, LAVIRON Joël, LE CAËR Antoine

De Ensiwiki
Aller à : navigation, rechercher
ghOSt
GhOSt.png
ghOSt est un système d'exploitation crée lors du Projet de Spécialité 2A 2014.

Développeurs GRAILLAT Amaury (SLE)

LAVIRON Joël (MMIS)

LE CAËR Antoine (ISI)

Environnement x86

Langue Français

Type Système d'Exploitation

ghOSt est un système d'exploitation crée dans le cadre du Projet de Spécialité 2A 2014. Il implémente les mécanismes de bases des OS (gestion des processus, mémoire virtuelle, multi-tâches etc). Bien entendu, ses fonctionnalités ne sont comparables à celles des OS actuels les plus utilisés par faute de temps et de ressources. Nous détaillons ci-dessous les fonctionnalités implantées.


Les fonctionnalités implémentées

Les principaux appels système

Les appels système de la spécification

Tous les appels systèmes de la spécifications (mis à part ceux concernant les sémaphores) ont été implémentés. Vous trouverez la liste ici! De plus, nous avons implémenté les appels systèmes suivants :

wait

  void wait(unsigned long time);

La fonction wait bloque le processus qui l'a appelé pendant time millisecondes (dans les limitations de l'horloge). C'est une fonction bien plus user-friendly que wait_clock.

pslist

  void pslist();

Cet appel système joue le même rôle que la commande ps : Il affiche dans la console des informations sur les processus courants.

Les commandes shell déjà implémentées

  • ps : Affiche la liste des processus en vie et fournit des informations à leur propos.
  • testread : Attends l'arrivée d'une chaîne de caractère et retourne à l'utilisateur ce qu'il a écrit (10 caractères maximum).
  • kill : Arrête le processus par son pid

Sécurité

Pour la sécurité, lors des appels systèmes, nous vérifions la validité des adresses. Nous interdisons ainsi aux utilisateurs d'effectuer des appels systèmes en spécifiant des adresses dans la zone mémoire du kernel. Cette vérification est assez simple puisque l'isolation entre les processus est garantie par le table des pages.

Mémoire partagée

Lors de la libération de la mémoire d'un processus, nous effectuons shm_release sur la mémoire partagée qui n'a pas encore été relâchée.

Shell

Exécution des processus en tâche de fond (commande &)

Nous avons choisis de gérer les touches flèche droite et flèche gauche du pavé numérique afin de pouvoir naviguer dans le buffer. L'ajout de caractère se réalise par insertion et non pas par écrasement. Il en va de même pour la suppression d'un caractère.

Le buffer a une taille de 128 caractères, raisonnable sans être excessif, cela permet d'écrire entre une et deux lignes complètes de commande textuelle maximum.


Utilisation de notre OS

Utilisation Courante

Notre OS se lance sur un programme de type shell. Il servira à lancer les programmes placés dans le dossier user (voir créer un programme, plus bas). Un programme peut être simplement appelé en tapant son nom et en donnant ses arguments. Un appel est bloquant mais si le dernier argument d'un programme est le caractère '&', il sera exécuté en tâche de fond.

Nos choix d'Implémentation

Libération de la mémoire des processus

Pour libérer la mémoire : soit le processus est bloqué ou prêt, dans ce cas on peut libérer sa mémoire directement. Soit il est en train de s'exécuter dans ce cas, nous ne pouvons pas libérer sa mémoire tant qu'il est en exécution (car on utilise sa table des pages et si on ne modifie pas context_switch, on a aussi besoin de sa pile kernel).

Nous créons ainsi une variable contenant le dernier processus supprimé (ou 0 s'il n'y en a pas). Au prochain ordonnancement, on libère la mémoire (tpage, pile kernel, pile user) du processus qu'elle contient.

Suppression des files de messages

Pour gérer la suppression, nous utilisons pour chaque file, une liste Supprime des processus dont la file a été supprimée.

Lors de la suppression, nous déplaçons les processus en attente sur file pleine et en attente sur file vide dans la listes Supprime. En suite, on réveil chacun des processus et on les supprime de la liste (après son réveil).

Au réveil, ni un processus bloqué sur file vide ou pleine est dans la liste Suppression, il renvoie une erreur pour indiquer que sa file a été supprimée.

Bugs connus

L'horloge déplace le curseur pour s'afficher. Ainsi, le curseur n'est jamais visible sur l'écran.

Le petit mot de l'équipe : Apports et difficultés

En réalisant un tel projet, bien entendu, nous avions tous en tête son aspect pédagogique. Le but ici était bien entendu de poser les bases d'un système d'exploitation sur lesquelles il serait possible de construire quelque chose d'efficace et d'utile. De tels logiciels sont essentiels pour qu'un utilisateur puisse interagir avec la machine, et leur aspect critique et universel nous a motivé à en comprendre plus en détails les rouages. C'est donc avec un groupe hétérogène (ISI, MMIS, SLE), composé d'éléments qui ne se connaissaient pas très bien au début du Projet, que nous nous sommes lancés à l'assaut de ce Projet Système.

Joël étant en MMIS, il n'avait pas suivi le cours de PSE (Pratique du système d'exploitation) qui correspondait aux deux premières phases du projet système : gestion de la console et des interruptions de l'horloge. Il a donc été chargé de faire ces deux phases, en suivant les instructions des TP de CSE. En définitive, il a trouvé que ne pas avoir suivi le cours de PSE n'était pas un problème pour faire le projet système d'exploitation.

Conclusion

Ce projet a été très enrichissant du point de vu connaissance. C'est pour nous un bon complément au CSE.

Outre l'aspect pédagogique, nous retiendrons l'intérêt des tests et de la programmation défensive lors de la programmation système. Une bonne expérience a été la programmation en binôme qui s'est montrée très efficace.