Projet système PC : 2013 - Julie DUMAS et Thomas HISCOCK
ChOS7 | |
---|---|
| |
Développeurs | Julie Dumas Thomas Hiscock
|
Sommaire
Équipe
Julie Dumas, filière SLE
Thomas Hiscock, filière SLE
Présentation
Le projet système consiste à développer un système d'exploitation[1] pour une machine monocoeur intel 32bit (IA32). Notre système s'appelle chOS7.
Cahier des charges
Une spécification détaillée des fonctionnalités est fournie [2]. Notre système doit fournir un certain nombre de fonctionnalités de bases.
- Gestion de l'affichage
Pouvoir afficher des caractères à l'écran en mode console 80x25.
- Processus
Il faut que notre système puisse lancer plusieurs processus, et répartir le temps processeur entre eux.
- File de message
Nous devons implanter un gestionnaire de file de message pour permettre la communication et la synchronisation entre les différents processus.
- Mémoire virtuelle, Séparation mode user, mode kernel
La partie programme utilisateur devra s'exécuter dans un espace protégé. La mémoire virtuelle permet de fournir un espace virtuel au processus. Il faudra interdire à l'utilisateur tout accès au système autre que les appels systèmes spécifiés afin de ne pas effacer le noyau entre autre.
- Pilote de console
Enfin pour rendre notre système utilisable par n'importe quel possesseur d'une machine IA32, il faut implémenter une console. Celle-ci récupère les données tapées au clavier et les interprète comme des commandes à exécuter.
Réalisations
Cahier des charges minimal
Notre système d'exploitation respecte ce cahier des charges minimal. Son fonctionnement est validé par plusieurs éléments :
- Le jeu de 20 tests fourni par les enseignants
- Des tests unitaires réalisés par nos soins
Commandes
Commande | Description |
---|---|
help |
Affiche l'ensemble des commandes du shell |
clear |
Efface l'écran |
pinfo |
Donne les informations sur les files de message utilisées |
ps |
Liste les processus avec leur priorité |
sysinfo |
Affiche les informations systèmes (pinfo et ps) |
exec nom |
Exécute l'application nom si elle est reconnu comme valide |
logo |
Affiche le logo de notre OS |
exit |
Quitte le shell courant |
kill n |
Tue le processus de pid n |
hist |
Affiche l'historique du shell courant |
echo on/off |
Active/désactive l'affichage |
tests |
Lance les tests automatiques |
testclavier |
Lance le test du clavier |
crshell |
Crée un nouveau shell |
swshell n |
Bascule vers le shell n |
Extensions
Nos extensions ont principalement visés à améliorer le shell. Nous avons réalisé un historique de commande ainsi qu'une gestion de plusieurs shells.
Historique de commandes
Chaque shell enregistre les 10 dernières commandes exécutées.
- La commande hist permet d'afficher cet historique.
- Il est possible de réexécuter une commande à partir de son numéro dans l'historique (commande run).
- On ne peut pas réexécuter une commande run.
Consoles multiples
La deuxième extension que nous avons commencée est la gestion de multi-shell. Il faut pour cela mettre en place une redirection des entrées clavier vers le shell actuel. De même il faut afficher à l'écran seulement le shell actuel. Dans notre système nous avons redirigé seulement les entrées. Mais comme nous ne gérons pas le lancement de tâches de fond, l'affichage reste cohérent.
- La commande crshell permet de créer un nouveau shell.
- On peut ensuite naviguer entre les shells créés avec les touches F1, F2, F3, F4.
- Cette navigation peut être faite manuellement à l'aide de la commande swshell n
- Bugs connus
Nous avons notés quelques bugs lorsque l'on créer plus de deux shells, les changements ne s'effectuent plus vers le bon shell, seulement deux shells sont utilisables.
Difficultés rencontrées
Les principales difficultés rencontrées lors de ce projet ont été les suivantes :
- Peu de liberté, des contraintes fortes sur les spécifications, en particulier les appels systèmes.
- L'ajout de la mémoire virtuelle cette année. Il s'agit d'une partie difficilement débogable et elle complique la séparation user/kernel.
- La durée du projet a été réduite cette année à 2 semaines à plein temps, au lieu de 4 les années précédentes.
Bilan
Nous regrettons d'avoir eu moins de temps que les années précédentes et de n'avoir pas eu le temps d'améliorer le shell. Nous aurions aimé réaliser les améliorations suivantes :
- Multi-shell avec redirection des entrées/sorties de tous les shells,
- Tâche de fond pour exploiter le multi-shell,
- Système de gestion de fichiers.
Ce projet a été l'occasion de :
- Mettre en pratique nos connaissances en système d'exploitation
- Comprendre de nombreux mécanismes bas niveaux que l'on retrouve dans de nombreux systèmes
- Mieux comprendre le fonctionnement et l'intérêt de la mémoire virtuel
À la fin de ce projet nous comprenons beaucoup mieux le fonctionnement d'un système d'exploitation.
Binaire du noyau et liens utiles
- Binaire du noyau, à executer dans qemu : Binaire du noyau
Il est possible de le lancer à l'aide d'un simulateur tel que qemu :
qemu-system-i386 -m 256 --no-kvm kernel.bin &
- OSDev : Pleins d'informations sur la conception de systèmes d'exploitation.