Projet système PC : 2011 - Bastien DESHAYES et Felipe CHIES

De Ensiwiki
Révision de 10 juin 2011 à 09:43 par Deshayeb (discussion | contributions) (Difficultés rencontrées)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)
Aller à : navigation, rechercher


PassarOS
PassarOS.png

Développeurs Bastien DESHAYES
Felipe CHIES

L'équipe

Etudiants : Bastien DESHAYES et Felipe CHIES
Enseignant tuteur : Simon NIEUVIARTS

Nous sommes étudiants en filière Systèmes et Logiciels Embarqués.

Présentation

Dans le cadre du projet de spécialité (projet proposé en fin de deuxième année à l'Ensimag) se déroulant du 17 mai au 10 juin, nous avons élaboré un noyau de système d'exploitation pour PC que nous avons baptisé PassarOS. <br\> Notre produit se devait dans un premier temps de répondre à un cahier des charges minimal qui nous était fourni. Dans un second temps, nous avions à imaginer et à implémenter des extensions pour notre noyau.

Gestion des processus

Un processus est l'entité contrôlant et gérant l'exécution des programmes. Chaque processus est caractérisé par son contexte de fonctionnement et son flot d'exécution. Le nombre total de processus pouvant coexister à un instant donné dans le noyau de système est borné par une constante fixée à la compilation du noyau. Cette constante est nommée NBPROC. Le but du projet a été de gérer la création, la destruction et la coexistence des processus.

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.

Les principales commandes disponibles sont :

shell passarOS
Commande Description

help

Affiche les commandes disponibles.

exit

Permet de quitter le système d'exploitation.

clear

Nettoie l'écran.

ps

Affiche les processus existants.

sinfo

Affiche la liste des sémaphores.

pinfo

Affiche la liste des files de messages.

echo <on/off>

Permet d'activer ou de désactiver l'écho des caractères frappés au clavier.

clock_settings

Affiche la fréquence du quartz et la fréquence d'horloge.

test

Lance les tests fournis par les professeurs.


Extensions

Pilote de VGA en mode graphique

Pour l'interface graphique nous avons implémenté un pilote qui permet d'utiliser le mode 13h (résolution 320*200, 256 couleurs avec adressage linéaire de la mémoire vidéo) de la carte VGA. Voici quelques fonctions que propose ce pilote :

void plot_pixel(int x, int y, byte color);

Imprime le pixel color aux coordonnées (x,y) sur l'écran.

void draw_bitmap(BITMAP *bmp, int x, int y);

Dessine une image au format bitmap sur l'écran.


Voici un aperçu de ce que ce pilote nous permet de réaliser : <br\>

VGA1 VGA2

Amélioration de l'interface

Nous avons amélioré l'interface par rapport à la spécification. Beaucoup de petites extensions contribuent à l'amélioration de celle-ci.

  • Shell multi-consoles : c'est la principale extension de l'interface, il y a 6 consoles par défaut. On passe d'une console à l'autre en appuyant sur les touches F1 à F6.
  • Historique de commandes : Pour chaque consoles, un historique des commandes lancées est sauvegardé. Cette extension marche à peu près de la même façon que les terminaux UNIX. On peut naviguer dans cet historique avec les flèches HAUT et BAS du clavier.
  • Gestion des LEDs du clavier.
  • En appuyant sur Ctrl + C on tue le processus actif.
  • Affichage de l'heure réelle.

Raccourcis Clavier

Files de messages entre processus

Nous avons ajouté à notre système une librairie qui permet d'utiliser des files de messages permettant aux processus de communiquer entre eux. Nous avons donc rajouté des appels systèmes qui permettent à des processus de poster et de lire des messages.

int postcreate();

Crée une file de message. <br\> Cette fonction renvoi l'identifiant de la file de message créée ou une valeur strictement négative en cas d'échec.

int postreset(int post);

Vide la file de message d'identifiant post. <br\> La valeur de retour est strictement négative si l'identifiant n'est pas valide, et nulle sinon.

int postdelete(int post);

Supprime la file de message d'identifiant post. <br\> La valeur de retour est strictement négative si l'identifiant n'est pas valide, et nulle sinon.

int post_msg(int post, char *msg);

Poste un message. <br\> La valeur de retour est strictement négative en cas de paramètres invalides

int consum_msg(int post, char **msg);

Récupère un message, cette fonction est bloquante si aucun message n'est présent dans la file. <br\> La valeur de retour est strictement négative en cas de paramètres invalides.

Bilan

Notre produit remplit les exigences du cahier des charges minimal et passe intégralement les tests fournis par les professeurs. Nous avons de plus réussi à réaliser des extensions significatives. <br\> Ce projet nous a permis d'obtenir de plus amples connaissances dans le domaine des systèmes d'exploitation et de l'architecture des ordinateurs.

Difficultés rencontrées

  • Les premiers jours ont été difficiles car il a fallu se confronter à l'environnement de travail du projet système. Ce qui ne fut pas évident malgré l’expérience que nous avions acquise durant les TP de pratique du système.
  • Nous avons eu beaucoup de mal à nous familiariser avec le gestionnaire de versions Mercurial bien que nous maitrisions les outils similaires Git et Subversion.
  • Les derniers jours du projet ont été très éprouvants car il a fallu débugger les problèmes révélés par les tests fournis par les professeurs (plus de problèmes que prévu) et finir de préparer tous les documents pour la soutenance (page web, documentation, support de présentation...).
  • Le fait que nous étions seulement 2 pour le projet a été psychologiquement dur car nous avions constamment du retard sur les autres équipes. Cependant cela nous a été bénéfique par moment car des équipes en avance sur nous ont pu nous conseiller sur des problèmes qu'elles avaient rencontrées.

Outils utilisés

  • Mercurial pour distribuer et gérer le code entre les membres de l'équipe.
  • DDD et GDB 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.

Documentation