Projet système PC : 2015 - PIGNE Quentin, SALL Amadou

De Ensiwiki
Aller à : navigation, rechercher
500px
Titre du projet K's'OS
Cadre Projet système d'exploitation 2015
Page principale Projet_système

Équipe Quentin Pigné Amadou Sall
Encadrants David Beniamine Gaëtan Morin Grégory Mounié


Présentation du projet

Objectifs

Ce projet consistait à implémenter un embryon de noyau de système d'exploitation, nous permettant ainsi de faire le lien avec les notions vues en cours : les processus, leur ordonnancement et leur synchronisation, la gestion de la mémoire, des différents niveaux de protection et éventuellement des systèmes de fichier. Le projet était découpé en 7 phases, présentant ainsi une approche itérative et nous permettant d'appréhender bien plus simplement le développement du système d'exploitation. Chaque phase consistait à implémenter un ensemble de primitives, progressant au fur et à mesure en complexité et en fonctionnalités.

Cahier des charges

Les spécifications complètes du projet peuvent être consultées sur la page Wiki correspondante : Projet système : spécification.

Apports du projet

Gestion du projet

Méthode de travail

Nous avons décidé au début du projet de travailler en pair-programming. Cette technique, bien connue dans le monde du développement logiciel et en particulier en méthodes agiles de gestion de projet, consiste à travailler par paire sur un seul PC. Un développeur étant chargé de taper le code au clavier pendant que le deuxième le relis afin de pouvoir déceler les premiers bugs à la source. Cela permet aussi de réfléchir à deux sur un problème ce qui a grandement augmenter notre efficacité. Dans le cadre de notre projet, cela nous a aussi permis d'être toujours au même niveau de connaissance sur les aspects techniques du noyau et nous a éviter les longs moments d'explications que nous aurions eu si nous nous étions partagés le travail.

Nous avons ainsi réalisé le travail à deux tout au long du projet.

Gestion de versions

L'utilisation de git était imposée par le projet. Le dépôt fourni était hébergé sur le serveur de l'école et devait en premier lieu être récupéré par un clone. Le fait de travailler en pair-programming nous a aussi permis d'éviter tous les problèmes de conflit de code que nous aurions pu avoir avec git et nous avons ainsi utilisé uniquement une seule branche : master.


Planning

Trello psys.png

Les différentes phases du projet

Phase 1

Prendre en main l'environnement de développement (chargement et débogage de noyau) et gérer l'affichage à l'écran

Cette phase est la plus simple et par conséquent la plus rapide du projet. Elle consiste en premier lieu à récupérer les sources de départ du projet via le dépôt git et se familiariser avec l'exécution du noyau, le débogage... Puis dans un deuxième temps à implémenter la gestion d'un mode d'affichage à l'écran simple, géré par toutes les cartes graphiques. Cela correspondait à la première séance du mini projet fait en cours de logiciel de base de 1ère année dont nous avons récupéré les sources afin de les adapter au projet système.

Temps estimé : 1 journée

Temps passé : 1 journée

Avancement :

100 %

Phase 2

Gérer la notion de processus, et le changement de contexte entre deux processus (au niveau noyau).

Cette phase, bien que relativement simple, est nettement plus conséquente que la précédente. Elle consiste en effet à implémenter toute la structure d'un processus ce qui représente les fondations de notre système.

Temps estimé : 2 journées

Temps passé : 3 journées

Avancement :

100 %

Phase 3

Gérer l'ordonnancement, la création dynamique, la terminaison et la filiation des processus.

Cette phase consistait à gérer (presque) complètement le cycle de vie des processus. Les processus possédant plusieurs états, l'ordonnanceur avait pour rôle d'agencer tout cela en donnant tour à tour du temps processeur au différents processus et selon des critères bien définies.

Cette phase nous a permis de comprendre comment le système d'exploitation "simuler" le parallélisme dans un modèle d'exécution séquentielle.

Temps estimé : 2 journées

Temps passé : 2 journées

Avancement :

100 %

Phase 4

Gérer la communication (via l'emploi de file de message) et l'endormissement (appel wait_clock) des processus.

Les files de messages sont une technique de communication inter-processus. Une file d'attente stockait des messages émis par les expéditeurs, jusqu'à ce que les destinataires les recherche. Les expéditeurs se bloquaient dès que la file d'attente devenait et les destinataires se bloquaient dès qu'elle devenait vide.

L'appel système wait_clock permettait à un processus de s'endormir pendant un laps de temps.

Temps estimé : 2 journées

Temps passé : 2 journées

Avancement :

100 %

Phase 5

Séparer les espaces mémoires du noyau et des processus en utilisant la mémoire virtuelle (facultatif pour les apprentis) et ajouter le mode utilisateur.

Temps estimé : 3 journées

Temps passé : 3 journées

Avancement :

100 %

Phase 6

Développer un pilote de console.

Cette phase est le complémentaire de la phase 1 : La console est constitué de l'ensemble de l'écran et du clavier. Ayant déjà géré l'écran à la phase 1, il s'agissait ici d'écrire des pilotes claviers pour permettre au processus de pouvoir utiliser des entrées que l'utilisateur aura donné. Nous n'avons pas pu terminer cette phase par manque de temps mais nous avons pu gérer le tampon du clavier selon un modèle producteur-consommateur où les consommateurs étaient les processus devant lire dans le tampon du clavier et LE producteur était la clavier. L'interaction clavier/OS se faisait selon un mécanisme d'interruption.

Avancement :

50 %

Phase 7

Développer un interprète de commandes, shell.

Nous n'avons malheureusement pas pu arriver jusqu'à cette phase, Nous nous la réservons pour les moments de tristesse où nous pourrons nous ressourcer grâce au projet système.

Avancement :

0 %

Tests