Projet système PC : 2013 - Julie DUMAS et Thomas HISCOCK

De Ensiwiki
Aller à : navigation, rechercher


ChOS7
ChOS7.png

Développeurs Julie Dumas
Thomas Hiscock

É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
ChOS7 en fonctionnement (commande help)

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

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

Il est possible de le lancer à l'aide d'un simulateur tel que qemu :

qemu-system-i386 -m 256 --no-kvm kernel.bin &

Ce binaire ne fonctionne pas sur machine réelle.

  • OSDev : Pleins d'informations sur la conception de systèmes d'exploitation.