Projet système PC : 2019 - GRAVALLON Guillaume, MOISSIARD Anael : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(Phase 7 : Implémentation d'un interprète de commandes)
(24 Juin 2019)
Ligne 156 : Ligne 156 :
 
'''Tests User :'''
 
'''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)
 
* 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 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.
 
* 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.
 
* 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.

Version du 24 juin 2019 à 15:34

Project schedule.png
Titre du projet MorphOS
Cadre Projet système

Équipe Guillaume Gravallon, Anaël Moissiard
Encadrants Yves Denneulin , Gregory Mounie, Patrick Reignier


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.

Equipe

Phases de développement

Phase 1 : prise en main de l'environnement

100 %

Phase 2 : Création et lancement de processus de niveau noyau

100 %

Phase 3 : Ordonnancement, création dynamique et terminaison de processus de niveau noyau

100 %

Phase 4 : Gestion des communications et synchronisation de processus de niveau noyau

100 %

Phase 5 : Séparation des espaces mémoire noyau et utilisateur : gestion de processus utilisateur

100 %

Phase 6 : Gestion du clavier et implémentation d'un pilote de console

100 %

Phase 7 : Implémentation d'un interprète de commandes

50 %

Tests Kernel

100 %

Tests User

100 %

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.