Projet système PC : 2012 – Raphaël BLEUSE, Yassir EL MESBAHI et Nicolas PERROT

De Ensiwiki
Aller à : navigation, rechercher


Anonym'OS

Développeurs Raphaël Bleuse
Yassir El Mesbahi
Nicolas Perrot


Présentation du Projet

Le projet système fait partie du Projet de Spécialité de l'Ensimag (plus de détail sur le site officiel de l'école).

L'Équipe

Ce projet est réalisé par l'équipe suivante :

Tuteur de l'équipe : Franck Rousseau

Objectif

L'objectif du projet système est d'écrire un noyau de système d'exploitation sur une architecture Intel 32bits. Le but d'un tel programme est de fournir à l'utilisateur une abstraction de sa machine. Ceci lui permet d'en exploiter au mieux les ressources sans se soucier des détails.

Concrètement, un cahier des charges défini le type de noyau demandé. Les principaux points abordés sont :

  • multi-tâche : plusieurs processus peuvent s'exécuter de manière "concurrente" (pseudo-parallèlisme).
  • synchronisation : les processus sont synchronisés à l'aide de sémaphores.
  • protection: l'utilisateur n'a pas acès à toutes les instructions du processeur, il doit faire appel au système. Ceci accroit la sécurité du noyau (plus de détail sur Wikipédia [1], en anglais).

Déroulement

Le projet système se déroule du 21 mai 2012 au 15 juin 2012 (rendu et soutenance). Il est organisé en deux étapes principales :


Réalisation

Cahier des charges minimal

Gestion des processus, ordonnancement & changement de contexte

La plus petite unité d'exécution de notre noyau est le processus. La première étape a été de définir les structures adaptées à leur gestion. L'ordonnancement est une partie critique du système, c'est ce qui permet la juste répartition des ressources aux processus. Le changement de contexte est une opération délicate écrite en assembleur. Une fois ces fonctions implémentées, nous avons travaillé sur les sémaphores et les entrées/sorties.

Passage au mode noyau et appels systèmes

Une fois notre noyau fonctionnel en mode kernel, nous avons réalisé le passage en mode utilisateur pour offrir une couche de protection et d'abstraction à un programmeur d'applications. Il a ensuite été nécessaire de fournir des fonctions permettant un passage au mode privilégié pour utiliser les fonctionnalités du système.

Shell

Lorsque nos appels systèmes ont été terminés, nous avons réalisé le pilote console nécessaire à la création du shell, ainsi que les commandes permettant de tester et de montrer les fonctionnalités de notre système d'exploitation. Quelques commandes sont disponibles :

Commande Utilisation Description

clear

clear

Efface l'écran.

echo

echo on|off ou echo [-n] [texte]

Active/désactive l'écho ou affiche du texte.

exit

exit

Termine le shell et met fin à la session en cours.

ps

ps

Affiche la liste des processus en cours d'exécution et leurs états respectifs.

sinfo

sinfo

Affiche les informations disponibles sur les sémaphores utilisés.

Extensions proposées

Pilote de haut parleur

Le pilote implémenté permet de faire des "bips" à une fréquence choisie grâce au haut parleur interne de l'ordinateur. Il est aussi possible de faire jouer un morceau sans bloquer le système et à une fréquence plus élevée que l'horloge système. Ceci est rendu possible par l'utilisation de la RTC : elle est programmée pour générer une interruption régulièrement. Le traitant de cette interruption est utilisé pour changer la note jouée par le haut parleur.

Pile réseau

Nous avons essayé de mettre au point un pilote pour les cartes réseau Intel 8254x (présentes sur nos machines et virtualisées par VirtualBox et QEMU) et d'intégrer lwIP, une implémentation légère de pile TCP/IP, à notre système.

Alors que le nécessaire de configuration de lwIP était réalisé, nous n'avons pas réussi à réaliser un pilote de carte réseau fonctionnel dans les temps à cause d'un problème de ports d'entrée/sortie.

Bilan

Organisation du projet

Nous avons travaillé dans les locaux de l'Ensimag, du lundi au samedi, par journées complètes (9h-13h et 14h-17h). Dans le cas où un membre de l'équipe n'était pas disponible, nous utilisions Trello pour coordonner les actions de l'équipe.

Les dépendances entre les premières tâches à réaliser nous ont forcé à réfléchir ensemble sur la conception et les structures à mettre en place. Puis, au fur et à mesure de l'avancement du projet, les parties à implémenter devenant moins dépendantes les unes des autres, nous nous sommes réparti le travail et avons travaillé de manière plus autonome afin d'optimiser la réalisation du projet.

Difficultés rencontrées

Les problèmes les plus sérieux sont apparus au moment du déroulement des tests fournis par les professeurs.
En effet, certains bugs "dormants" surgissaient à ce moment, ce qui compliquait davantage la tâche, et nous poussait même à revoir des structures que nous avions implémentées bien avant. Nous devions donc parvenir à surmonter les difficultés seuls.
Et si, tant bien que mal, le bug en question était corrigé, un "merge" avec le travail des autres provoquaient parfois d'autres bugs très persistants et délicats à corriger (dont certains nous ont pris plusieurs jours à déceler et neutraliser).


Points positifs

Le projet système se distingue des autres projets de spécialités en de nombreux points :

  • Il est unique en son genre puisqu'on programme à un très niveau bas (de plus, il est d'ailleurs rare qu'on développe plus d'un système d'exploitation dans sa vie).
  • C'est un projet assez difficile à déboguer car on manipule les piles, la mémoire, les registres, etc.
  • Il est délicat à mettre en place à cause de nombreuses parties critiques (changement de contexte, appels système, ...).

Ce fut une expérience riche et intéressante qui vaut la peine de vivre au moins une fois dans sa carrière d'ingénieur.
Réaliser ce système nous a permis de cerner de nombreuses notions qui peuvent paraître ambigües si on les abordait uniquement par la théorie. Mieux encore, des notions plus pointues sont maintenant moins obscures.
Qui plus est, certaines critiques très vulgarisées comparant les performances entre Windows, Mac OS et Linux nous paraissent à présent très nuancées.

Points négatifs

Pour un projet de cette ampleur, le temps imparti est très insuffisant. Le plus dur n'était pas de coder mais de débugger (nous avons passé plus de temps au débug qu'à la mise en place du code). De ce fait, nous regrettons uniquement de ne pas avoir eu assez de temps pour avoir un résultat plus complet.

Environnement de travail

Outils de travail

  • Outils techniques
  • Outils de gestion de projet
    • Trello, utilisé pour la répartition du travail.
    • Merlin, un outils de gestion de projet (diagramme Gantt ; gestion de ressources, de livrables).

Support matériel

Le développement du projet a été fait dans la salle système de l'Ensimag (D201) et sur nos machines personnelles. Notre environnement de travail est principalement basé sur la distribution Linux de l'Ensimag (Ensilinux).

Références

Livres

  • CORBET, J., RUBINI, A. et KROAH-HARTMAN, G. (2005). Linux Device Drivers, Third Edition, Sebastopol, O'Reilly, 615 pages.

Sites web

Sources

  • Sources initiales : le projet est basé sur les sources de PSE, disponibles ici.
  • Sources supplémentaires
    • lwIP, une implémentation légère des couches réseaux TCP/IP.

Binaire du noyau

À essayer sur machine virtuelle ou sur machine réelle (cf. Projet système : environnement pour la configuration).

Binaire