Catégorie:Projets de spécialité Cette page présente brièvement le système d'exploitation osOS, réalisé dans le cadre du projet système sur PC 2013 par Paul Gannay et Dominique Lee.
osOS est un système d'exploitation multitâche préemptif gérant un mode utilisateur et la mémoire virtuelle.
osOS se présente pour l'utilisateur final sous la forme d'un interpréteur de commandes du nom d'interpreter. Ce dernier propose des commandes built-in et permet le lancement de programmes utilisateurs. Ces programmes ne peuvent prendre qu'un seul paramètre, auquel peuvent être ajoutés la priorité du processus et la taille de sa pile utilisateur. On peut aussi lancer un processus en tâche de fond en plaçant un '&' à la fin d'une commande.
De plus, certaines commandes peuvent être lancées à tout moment (notamment lors de l'exécution d'autres processus afin de les observer) via le clavier :
Commande |
Description |
|---|---|
help |
Affiche l'aide. |
exit |
Quitte l'interpréteur de commande courant. |
echo |
Active ou désactive l'echo sur la console. |
mem |
Affiche des informations sur la memoire utilisée dans le kernel. |
uptime |
Affiche le temps depuis lequel le systeme est allumé. |
qclean |
Libère toutes les files de messages utilisées. |
qinfo |
Donne des informations sur les files de messages. |
Le but premier d'osOS est de permettre le lancement de programmes utilisateurs et de leur fournir des accès au matériel sous la forme d'appels systèmes. Les programmes utilisateurs doivent se présenter sous la forme de programmes C classiques et doivent être compilés en même temps qu'osOS.
La bibliothèque d'appels systèmes (userlib.h) fournie correspond à la spécification demandée à laquelle on greffe getppid() qui permet de récupérer le pid du père du processus courant et printUsedMemory() qui permet d'afficher la quantité de mémoire utilisée. Ainsi, un programme interactif simple utilisera sans doute les primitives cons_read pour récupérer les saisies clavier et printf pour afficher des données à l'écran.
Un exemple de programme utilisateur présent par défaut est autotest, qui lance la base de tests fournie par l'équipe enseignante.
osOS étant multitâche préemptif, il est par conséquent capable de gérer plusieurs processus de manière simultanée. Pour cela, il utilise un ordonnanceur capable de gérer priorités et quotas de temps. Ces processus sont ordonnés par filiation et possèdent deux moyens de communication :
Il est ainsi fourni deux moyens de communications complémentaires qui permettent d'échanger des informations entre processus tout en assurant une certaine synchronisation. Il peut être intéressant pour l'utilisateur d'écrire un wrapper au-dessus des files de messages afin de simuler des sémaphores.
De manière complètement transparente pour l'utilisateur, osOS gère la mémoire virtuelle et un mode utilisateur. Cela permet d'assurer un minimum de sécurité en séparant les programmes utilisateurs du noyau du système. Non seulement un processus utilisateur ne connaît pas son emplacement réel en mémoire, mais il ne peut pas non plus accéder au code et aux données du noyau. Tout accès direct au noyau d'un processus utilisateur étant arrêté par la gestion des privilèges, la bibliothèque userlib.h devient la seule interface d'accès au noyau depuis l'extérieur.
Le noyau est téléchargeable et peut être exécuté selon les instructions de ce lien.
osOS n'a été testé que sous QEMU et sur clé USB.
Notre équipe est composée de deux étudiants en filière ISI:
Le projet système a pour objectif la réalisation d'un système d'exploitation minimaliste. Un cahier des charges minimal est fourni et présente les fonctionnalités de base à implémenter :
Le projet système s'est déroulé du 21 mai 2013 au 23 mai, puis du 3 juin 2013 au 20 juin.
L'équipe enseignante fournit une feuille de route détaillant les différentes étapes permettant de construire un système d'exploitation minimal. Ce découpage en étapes nous a permis de planifier le projet :