Projet système PC : 2019 - GRAVALLON Guillaume, MOISSIARD Anael
![]() | |
---|---|
Titre du projet | MorphOS |
Cadre | Projet système
|
Équipe | Guillaume Gravallon, Anaël Moissiard |
Encadrants | Yves Denneulin , Gregory Mounie, Patrick Reignier |
Sommaire
- 1 Présentation
- 2 Equipe
- 3 Phases de développement
- 3.1 Phase 1 : prise en main de l'environnement
- 3.2 Phase 2 : Création et lancement de processus de niveau noyau
- 3.3 Phase 3 : Ordonnancement, création dynamique et terminaison de processus de niveau noyau
- 3.4 Phase 4 : Gestion des communications et synchronisation de processus de niveau noyau
- 3.5 Phase 5 : Séparation des espaces mémoire noyau et utilisateur : gestion de processus utilisateur
- 3.6 Phase 6 : Gestion du clavier et implémentation d'un pilote de console
- 3.7 Phase 7 : Implémentation d'un interprète de commandes
- 3.8 Tests Kernel
- 3.9 Tests User
- 4 Journal de bord
- 5 Difficultés rencontrées
Présentation
Voici la page de présentation du Projet Système réalisé dans le cadre de notre 2ème année en apprentissage à l'ENSIMAG.
L'objectif de ce projet est la réalisation, à partir de presque rien, d'un noyau de système d'exploitation sur une architecture Intel x86.
Le projet est basé autour des documents suivants, qui ont constitué les ressources principales sur lesquelles nous nous sommes appuyé lors de ces 4 semaines de développement:
Equipe
- Guillaume GRAVALLON (filière apprentissage)
- Anaël MOISSIARD (filière apprentissage)
Phases de développement
Phase 1 : prise en main de l'environnement
Phase 2 : Création et lancement de processus de niveau noyau
Phase 3 : Ordonnancement, création dynamique et terminaison de processus de niveau noyau
Phase 4 : Gestion des communications et synchronisation de processus de niveau noyau
Phase 5 : Séparation des espaces mémoire noyau et utilisateur : gestion de processus utilisateur
Phase 6 : Gestion du clavier et implémentation d'un pilote de console
Phase 7 : Implémentation d'un interprète de commandes
Tests Kernel
Tests User
Journal de bord
Semaine 1
05 Juin 2019
Phase 1 :
- Découverte et prise en main de l'environnement
- Récupération et modification du code utilisé en cours de Logiciel de Base de 1ère année pour permettre l'affichage de caractères à l'écran
Phase 2 :
- Création de la structure des processus
- Début de travail sur le lancement de processus et le changement de contexte entre processus
06 Juin 2019
Phase 2 :
- Correction de la structure des processus
- Lancement des processus
- Changement de contexte entre processus
07 Juin 2019
Phase 2 :
- Gestion des interruptions de l'horloge afin de procéder au changement de contexte entre processus à une fréquence déterminée
Phase 3 :
- Mise en place de l'ordonnancement grâce aux macros de gestion de liste chaînée pré-existantes
- Adaptation du changement de contexte pour la compatibilité avec la liste chaînée
Semaine 2
11 Juin 2019
Phases précédentes :
- Correction d'erreurs concernant le défilement à l'écran et le changement de processus
Phase 3 :
- Création dynamique de processus
- Réflexion sur la filiation entre processus et la terminaison de processus
12 Juin 2019
Phase 3 :
- Travail sur les primitives de gestion des processus:
- Terminaison du processus actif
- Terminaison d'un autre processus
- Obtention de la priorité d'un processus
- Obtention du PID du processus appelant
- Ajout de la gestion dynamique des identifiants de processus, avec possibilité pour un nouveau processus de récupérer l'identifiant d'un processus préalablement détruit
- Gestion de la fin de processus lorsque la fonction se termine
- Amélioration de la fonction d'ordonnancement
13 Juin 2019
Phase 3 :
- Finalisation des primitives de processus:
- Attente d'un processus fils par son père
- Correction sur les suppression de processus
Phase 4 :
- Endormissement des processus
- Ajout d'un processus idle qui prend la main lorsqu'il n'y a aucun autre processus activable
Tests Kernel :
- Correction de bugs pour le passage des tests Kernel 1 à 5
14 Juin 2019
Tests Kernel :
- Correction de bugs pour le passage des tests Kernel 6 à 9
Phase 4 :
- Réflexions sur les files de messages et début de création des structures et primitives associées
Semaine 3
17 Juin 2019
Phase 4 :
- Création des primitives liées aux communications par messages entre processus
Tests Kernel :
- Validation des tests 10 à 12
18 Juin 2019
Phase 4 :
- Rectification des primitives liées au communications de messages
Tests Kernel :
- Validation des tests 13 à 16 et 20
19 Juin 2019
Phase 5 :
- Travail sur l'initialisation de processus utilisateurs
- Saut du mode kernel au mode utilisateur
- Début de mise en place des interruptions qui permettront d'effectuer les appels systèmes
20 Juin 2019
Tests Kernel :
- Validation du test 17.
Note : Les tests 17, 18 et 19 ne sont pas destinés à être exécutés en mode Kernel, leur validation est optionnelle ou impossible.
Phase 5 :
- Finalisation du saut du mode kernel au mode user lors du lancement du système
- Rectification de la procédure de déclenchement et de la gestion de l'interruption 49
- Mise en place de la bibliothèque d'appels système
21 Juin 2019
Phase 5 :
- Libération de pile user anciennement allouée
- Ajout d'appels systèmes sécurisés testant les valeurs des pointeurs passés en paramètres des appels
Tests User :
- Validation des tests 1 à 18 et 20
22 Juin 2019
Phase 6 :
- Gestion du traitant 33 pour les interruptions claviers
Semaine 4
24 Juin 2019
Phase 6:
- Mise en place complète de la console avec echo et remplissage d'un buffer en vue d'un futur terminal
Tests User :
- Validation du test 19 (après rectification pour que la signature de cons_read soit conforme à ce qu'on nous demande d'implanter)
Phase 7:
- Mise en place d'un processus shell pouvant interpréter certaines commandes au travers d'appels système
Difficultés rencontrées
- Difficultés pour identifier l'origine de certains bugs, l'utilisation de gdb avec Qemu pour examiner la mémoire n'étant pas forcément triviale pour les non initiés.
- La phase 5, et notamment le passage en mode user depuis le mode kernel, était assez complexe et nécessitait une compréhension assez fine des mécanismes du processeur. Développer le code nécessaire à cette étape a sans nul doute été la partie la plus difficile du projet.