Projet système PC : 2011 - Bachir Kosayyer, Timothé Mermet-Buffet et Philippe Roussille : Différence entre versions
(→Documentations et documents) |
|||
Ligne 262 : | Ligne 262 : | ||
Les sources initiales du projet sont les sources fournies en pratique du système, disponibles [https://ensiwiki.ensimag.fr/images/7/73/PSE_TP1_src.zip ici]. | Les sources initiales du projet sont les sources fournies en pratique du système, disponibles [https://ensiwiki.ensimag.fr/images/7/73/PSE_TP1_src.zip ici]. | ||
− | === | + | === Documentation === |
* Les structures utilisées pour le pilote graphique sont issues du noyau Linux, les surfaces inspirées de la librairie SDL. | * Les structures utilisées pour le pilote graphique sont issues du noyau Linux, les surfaces inspirées de la librairie SDL. |
Version du 10 juin 2011 à 08:08
SeriOS | |
---|---|
| |
Développeurs | Bachir KOSAYYER Timothé MERMET-BUFFET Philippe ROUSSILLE
|
Sommaire
Présentation
Équipe (Équipe 1)
Nous sommes une équipe de trois étudiants :
- Bachir KOSAYYER (ISI)
- Timothé MERMET-BUFFET (SLE)
- Philippe ROUSSILLE (ISI)
Notre encadrant est Franck Rousseau.
Motivations
Nous avons choisi le thème du Projet système comme projet de spécialité, en fin de deuxième année à l'ENSIMAG. Nous avons conçu un noyau de système d'exploitation, "SeriOS", développé à partir des sources minimales fournies.
Il n'est pas commun de participer à la création d'un système d'exploitation, et comme nous avions tous trois suivi les cours de Systèmes d'exploitation et programmation concurrente, Pratique du Système et Conception des Systèmes d'Exploitation. Comme la programmation d'un noyau nous était inconnue, nous avons vu dans ce projet la possibilité d'approfondir et de mettre en pratique les connaissances théoriques vues en cours au travers d'un produit concret.
Cadre du projet
Le développement du projet s'est organisé en deux principales étapes :
- répondre au cahier des charges demandé (détaillé grossièrement ici)
- multi-tâche : plusieurs processus (programmes) doivent pouvoir s'exécuter « en même temps » sur le système en partageant les ressources;
- synchronisé : les processus peuvent attendre un ou plusieurs processus en utilisant des sémaphores;
- mode utilisateur : l'utilisateur du système doit pouvoir utiliser les fonctions du système dans un environnement protégé, séparant les applications et le système.
- fournir une ou plusieurs extensions conséquentes (pilotes et/ou fonctions avancées du système)
Déroulement
Le projet s'est déroulé sur quatre semaines, du mardi 17 mai 2011 au vendredi 10 juin 2011 (rendu et soutenance). Les principales phases de développement ont été réalisées en salle système (D201).
Réalisation
Cahier des charges minimal
Liminaire
Nous avions tous trois fait le TP de PSE, le code de cette partie a pu être adapté facilement (timer, clavier et écran) pour nous permettre de faciliter le débogage et de surveiller l'état du système.
Création de processus, ordonnancement et changement de contexte
La première étape a été la conception de la structure adaptée aux processus, ainsi que la gestion de leurs piles respectives. L'étape cruciale est la partie de changement de contexte (faite en assembleur), car toutes les autres parties en dépendent. Une fois cette étape terminée, nous avons pu gérer les sémaphores et la filiation de processus, les attentes et blocages des processus. Nous nous sommes concentrés sur la partie noyau uniquement.
Passage au mode noyau et appels systèmes
Une fois notre noyau fonctionnel en mode privilégié (mode kernel), nous avons réalisé le passage en mode utilisateur (userland) pour offrir une couche de protection et d'abstraction à un programmeur d'applications. Nous modifions également l'espace d'adressage et de pile nécessaire à une allocation de mémoire plus importante, tout en empêchant l'écriture dans la zone mémoire privilégiée. 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. Plusieurs commandes sont disponibles (accessibles par la commande 'help' au sein de l'interface en ligne de commande) :
Commande | Utilisation | Description |
---|---|---|
about |
about |
Affiche la banderole de l'équipe. |
beep |
beep DURÉE FRÉQUENCE |
Utilise le haut-parleur système pour produire un bip à la fréquence et la durée données. |
clear |
clear |
Efface l'écran. |
chprio |
chprio |
Utilise le haut-parleur système pour produire un bip à la fréquence et la durée données. |
clock_settings |
clock_settings |
Renvoie les paramètres de l'horloge. |
collect |
collect PID |
Collecte un zombie et le termine. |
date |
date |
Affiche la date actuelle au format UNIX. |
echo |
echo on|off ou echo [-n] [texte] |
Active/désactive l'écho ou affiche du texte. |
exception |
exception |
Provoque une exception mémoire (écriture en zone noyau). |
exit |
exit |
Termine le shell et met fin à la session en cours. |
getprio |
getprio PID |
Renvoie la priorité du processus PID. |
kill |
kill PID |
Tue le processus PID. Il n'est pas possible de tuer un processus système. |
help |
help [commande] |
Affiche la liste des commandes disponibles, ou une aide sur la commande spécifiée. |
ps |
ps |
Affiche la liste des processus en cours d'exécution et leurs états respectifs. |
sleep |
sleep TEMPS |
Attend TEMPS millisecondes. |
sinfo |
sinfo |
Affiche les informations disponibles sur les sémaphores utilisés. |
startx |
startx |
Lance une démonstration de l'interface graphique (appel ne retournant pas). |
tests |
tests |
Lance la suite de tests fournie par les encadrants. |
utime |
utime |
Renvoie le temps d'utilisation du système (en millisecondes). |
write |
write FICHIER [TEXTE] |
Crée le fichier FICHIER et écrit TEXTE dans ce fichier. |
Les commandes de gestion du système de fichiers sont disponibles dans le répertoire /bin.
Extensions réalisées
Fonctionnalités systèmes
Mémoire paginée
Système de fichier virtuel
Amélioration du shell
Pilotes d'accès aux périphériques
Nous avons réalisé trois principaux pilotes.
Pilote de souris
Nous avons choisi d'implémenter un pilote de souris PS/2. Le pilote est chargé au démarrage du système avec les pilotes nécessaires (souris, haut-parleur, console...). La souris bascule automatiquement dans le mode le mieux adapté (deux boutons, activation de la roulette...). Nous fournissons un appel système pour accéder à l'état de la souris, ainsi qu'un gestionnaire d'événements accessible en mode utilisateur. Il est possible de redéfinir l'espace tri-dimensionnel dans lequel évolue la souris à tout moment.
Pilote de haut-parleur
Le second pilote implémenté permet d'effectuer un bip d'une fréquence et durée choisie en utilisant le haut-parleur PC. Un bip à une fréquence par défaut est également disponible par l'appel beep().
Pilote de carte graphique VESA
Le troisième pilote permet de fournir à l'utilisateur une abstraction de la carte graphique, garantissant un accès direct à la mémoire vidéo avec les primitives graphiques nécessaires (affichage d'un pixel, tracé de rectangles...). Le pilote permet à l'utilisateur de spécifier une résolution et une profondeur de couleur, et choisit le mode graphique le mieux adapté à ces contraintes.
Couche d'abstraction graphique
Afin de permettre une gestion simple et claire de la mémoire vidéo, nous fournissons une couche d'abstraction graphique optimisée, permettant l'utilisation de surfaces et de rect inspirées librement de la librairie SDL (gestion du clipping automatique et fusion alpha). Pour permettre à l'utilisateur d'écrire du texte, nous avons rendu disponible la création dynamique de polices à partir de surfaces - fonction qui peut être aisément supplanté au pilote de console pour fournir un environnement graphique complet. Le gestionnaire de fenêtre minimal utilise la police libre de droit Unispace. L'ajout de ressources graphiques au projet est facilité par l'utilisation du script Python fourni.
Captures d'écran
Bilan
Organisation du projet
Difficultés rencontrées
Points positifs
Points négatifs
Références
Sources initiales
Les sources initiales du projet sont les sources fournies en pratique du système, disponibles ici.
Documentation
- Les structures utilisées pour le pilote graphique sont issues du noyau Linux, les surfaces inspirées de la librairie SDL.
- Les pilotes gérant la souris, le haut parleur interne, la RTC, la carte graphique, le clavier, le gestionnaire d'interruptions et le minuteur, ont été faits grâce à la documentation fournie sur OSdev.
Adresses utiles
- Le wiki OSdev.
Outils utilisés
- mercurial, un gestionnaire de versions décentralisé
- VirtualBox, une machine virtuelle
- NetBeans, un EDI complet
- gedit et SCiTE, des éditeurs de texte
- planner, un gestionnaire de diagramme de Gantt
- gcc, un compilateur c
- gas, un assembleur
- ddd, gdb et Nemiver, des débugueurs