Projet système PC : 2010 - André BENOIT et Luc MICHEL

De Ensiwiki
Aller à : navigation, rechercher

Vous trouverez ici une brève présentation de SpeculoOS, un noyau de système d'exploitation minimaliste. Il a été développé à l'Ensimag lors de l'édition 2010 du projet système PC par André Benoit et Luc Michel.

Fonctionnalités

Fonctionnalités de base

SpeculoOS permet de lancer des threads de manière concurrente par le biais d'un ordonnanceur préemptif à quantum fixe. Les threads comportent un priorité, et seuls ceux activables de priorité la plus haute sont susceptibles de prendre la main.

Affichage de l'aide dans la console
Affichage de l'aide

Ce noyau dispose d'un mode noyau et d'un mode utilisateur, ce qui assure sa stabilité en cas de bug d'un processus utilisateur, et garantit l'exécution de l'ordonnanceur. Les threads peuvent communiquer entre eux par le biais de files de messages. Il est à noter que dans le cas où une file est pleine, et qu'un processus attend pour écrire un message, quand le processus récepteur accepte un nouveau message, il n'ira pas le chercher dans la file mais privilégiera celui en attente d'écriture, qui sera donc transmis sans même utiliser la file. Un interpréteur de commandes permet l'accès à certaines informations systèmes :

  • help : affiche l'aide.
  • ps : permet de lister les processus, par PID, en affichant leur nom, et leur état courant ;
  • pinfo : liste les files en cours d'utilisation triées par leur FID, avec leur taille, et les processus en attente s'il y en a. (Il y en a toujours au moins une, l'exécution de la commande nécessitant elle même l'utilisation d'une file ;
  • echo : un premier appel coupe l'affichage à l'écran des caractères tapés au clavier, un second appel le rétablit.
  • exit : quitte le shell et redémarre la machine.
  • kill <pid> : détruit le processus n°PID.
  • uptime : permet de lancer un processus Uptime (affichant l'uptime en haut à droite de l'écran).
  • clear : efface l'écran.
  • gatto : lance le programme de chat Gatto (cf paragraphes suivants).

Extensions

Les extensions que nous avons développées sont au nombre de trois : support de la carte réseaux, portage d'une pile IP libre (lwip) et logiciel de chat dans un style IRC (Gatto).

Support de la carte réseau
Notre choix s'est porté sur les carte Intel(R) de la famille i8245x. Cette famille regroupe un grand nombre de cartes qui se comportent de la même façon. En particulier, on trouve dans VirtualBox une émulation de la carte Intel(R) 82545EM. Dans les salles TP, les PC sont équipés de carte Intel(R) 82546EB. Notre driver fonctionne donc avec ces deux cartes. Pour détecter la présence de la carte sur le système, la première étape est de scanner le bus PCI. C'est pourquoi avant d'écrire le driver pour la carte, nous avons commencé par écrire un petit driver PCI, qui scanne le bus, et référence tous les périphériques. Le driver de la carte peut ensuite scruter cette liste pour déterminer la présence ou non d'une carte compatible. Si la carte est présente, le driver l'initialise conformément à la documentation de celle-ci et il associe l'IRQ de la carte à son traitant d'interruption. Il met ensuite à disposition des primitives pour envoyer un paquet sur le réseau, et lire dans le buffer de réception. Il permet enfin d'appeler une fonction de callback lorsqu'il reçoit une interruption car un paquet est arrivé.


Portage de lwip
A partir du moment où l'on dispose d'un driver capable d'envoyer et recevoir des données du réseau, il peut être intéressent d'ajouter la possibilité de pouvoir dialoguer avec d'autres machines. La pile de protocole qui fait l'unanimité aujourd'hui est TCP/IP. C'est un jeu de protocoles utilisé par quasiment tous les ordinateurs en réseau. Il est assez complexe de mettre en œuvre un telle pile, c'est pourquoi notre choix s'est porté vers une pile déjà faite, libre, est prête à être portée sur un système: lwip. Ce port n'a pu être mené à son terme, néanmoins notre système est capable de répondre au ping.


Logiciel de chat (Gatto)

Exemple d'execution de Gatto
Gatto

Ce petit programme démontre les fonctionnalités de notre driver ethernet. Il implémente un petit protocole de chat, juste au dessus du protocole Ethernet. Il envoie des trames en broadcast, ainsi, n'importe quelle machine connectée au même switch, executant Gatto peut communiquer avec les autres.

Démonstrations

Utilisation des commandes de base

Cette première vidéo montre l'utilisation des commandes de base de l'interpréteur. [1]

Passage de la batterie de tests

Cette seconde vidéo montre SpeculoOS en train de passer la batterie de tests. [2]

Fonctionnement de notre IRC-like, Gatto

Cette troisième vidéo montre Gatto en fonctionnement. [3]


Bilan

Points forts de SpeculoOS

SpeculoOS respecte les spécifications demandées. Il est de plus capable d'explorer le bus PCI, d'y trouver et d'utiliser la carte réseau. Une machine fonctionnant avec SpeculoOS peut être répond à un ping. Par ailleurs, gatto permet de communiquer entre différentes machines, en passant directement au dessus de l'ethernet.

Difficultés rencontrées

Le développement de l'OS n'est pas toujours facilement parallélisable. Nous ne sommes pas parvenus par ailleurs à porter la pile lwip complètement.

Conclusions personnelles

Nous avons beaucoup appris dans ce projet, notamment sur la gestion pratique des threads et du couple bus PCI/carte réseau.

Annexes