Projet système PC : 2019 - SAMAILLE Noé, MUGNIER Jean-Charles : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(Lundi 14 Juin 2019)
(Présentation)
 
(63 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 5 : Ligne 5 :
  
 
== Présentation ==
 
== Présentation ==
 +
 +
Cette page présente l'OS que nous avons réalisé au cours des 3 semaines bloquées de projet que nous avions. Avec les beaux jours, le nom de notre OS nous a paru comme évident, ce devait être AperOS !
 +
 +
=== Equipe ===
 +
 +
Noé Samaille : apprenti 2ème année
 +
 +
Jean-Charles Mugnier : apprenti 2ème année
 +
 +
=== Commandes disponibles ===
 +
 +
La commande ''help'' donne la liste des commandes utilisables :
 +
 +
[[Fichier:AperOS_screenshot_1.png]]
 +
 +
=== Captures d'écran ===
 +
 +
* Voici une capture d'écran de notre écran d'accueil :
 +
 +
[[Fichier:AperOS_screenshot_2.png]]
 +
 +
* Et une capture de l'exécution d'une commande (ps) :
 +
 +
[[Fichier:AperOS_screenshot_3.png]]
 +
 +
== Executable ==
 +
 +
Voici un lien pour télécharger l'OS que nous avons réalisé, il boot sur machine réelle et tourne aussi sur qemu.
 +
[[Fichier:Kernel_NS_JCM.bin.zip]]
  
 
== Planning ==
 
== Planning ==
  
 
=== Prévisionnel ===
 
=== Prévisionnel ===
 +
 +
'''Phase 1 :''' 1 jour
 +
 +
'''Phase 2 :''' 2,5 jours
 +
 +
'''Phase 3 :''' 2 jours
 +
 +
'''Phase 4 :''' 2 jours
 +
 +
'''Phase 5 :''' 2,5 jours
 +
 +
'''Phase 6 :''' 2 jours
 +
 +
'''Phase 7 :''' 2 jours
  
 
=== Effectif ===
 
=== Effectif ===
 +
 +
'''Phase 1 :''' 1 jour
 +
 +
'''Phase 2 :''' 2,5 jours
 +
 +
'''Phase 3 :''' 2 jours
 +
 +
'''Phase 4 :''' 3 jours
 +
 +
'''Phase 5 :''' 2 jours
 +
 +
'''Phase 6 :''' 1,5 jour
 +
 +
'''Phase 7 :''' 2 jours
  
 
== Avancement du projet ==
 
== Avancement du projet ==
Ligne 24 : Ligne 81 :
  
 
=== Phase 4 - Files de messages ===
 
=== Phase 4 - Files de messages ===
{{Avancement|20}}
+
{{Avancement|100}}
  
=== Phase 5 ===
+
=== Phase 5 - Protection de l'éxecution et appels systèmes===
{{Avancement|0}}
+
{{Avancement|95}}
  
=== Phase 6 ===
+
=== Phase 6 - Console ===
{{Avancement|0}}
+
{{Avancement|100}}
  
=== Phase 7 ===
+
=== Phase 7 - Interprète de commandes ===
{{Avancement|0}}
+
{{Avancement|100}}
  
 
=== Extensions ===
 
=== Extensions ===
  
=== Sources ===
+
 
 +
Toutes les fonctionnalités des 7 phases ont été développées.
 +
 
 +
Nous avons en plus réalisées les extensions suivantes :
 +
 
 +
* Meilleur shell grâce à la gestion des touches spéciales du clavier (début/fin/suppr) et gestion du mode "insertion"
 +
 
 +
* Plus de commandes disponibles (''test'', ''sleep'', ''loop'', etc)
 +
 
 +
* Un écran d'accueil spécial
  
 
== Journal de bord ==
 
== Journal de bord ==
  
Liste chronologique des jours, puis sous-liste chronologique des tâches
+
Liste chronologique des jours, puis sous-liste chronologique des tâches.
  
 
=== Mercredi 5 Juin 2019 ===
 
=== Mercredi 5 Juin 2019 ===
* Présentation initiale du projet par M. Mounié
+
* Présentation initiale du projet par M. Mounié.
 
* Jean-Charles et Noé : Mise en place (en parallèle) du code nécessaire à l'affichage.
 
* Jean-Charles et Noé : Mise en place (en parallèle) du code nécessaire à l'affichage.
 
* '''Fin de la phase 1'''.
 
* '''Fin de la phase 1'''.
* Jean-Charles et Noé: Début de la réflexion sur le changement de contexte entre processus
+
* Jean-Charles et Noé: Début de la réflexion sur le changement de contexte entre processus.
  
 
=== Jeudi 6 Juin 2019 ===
 
=== Jeudi 6 Juin 2019 ===
* Jean-Charles : démarrage des tests de la phase 1
+
* Jean-Charles : démarrage des tests de la phase 1.
* Noé : Mise en place des structures de processus
+
* Noé : Mise en place des structures de processus.
* Noé : Mise en place du changement de contexte
+
* Noé : Mise en place du changement de contexte.
* Jean-Charles et Noé : Choix d'un nom d'OS et d'un logo ASCII
+
* Jean-Charles et Noé : Choix d'un nom d'OS et d'un logo ASCII.
  
 
=== Vendredi 7 Juin 2019 ===
 
=== Vendredi 7 Juin 2019 ===
* Noé : '''Fin du changement de contexte'''
+
* Noé : '''Fin du changement de contexte'''.
* Noé : Mise en place du Timer
+
* Noé : Mise en place du Timer.
 
* Bon Week-end !
 
* Bon Week-end !
  
Ligne 63 : Ligne 129 :
  
 
* '''Fin de la phase 2'''
 
* '''Fin de la phase 2'''
* Jean-Charles : '''Fin des tests de la phase 1'''
+
* Jean-Charles : '''Fin des tests de la phase 1'''.
* Jean-Charles & Noé : merge branches tests -> master puis develop -> master
+
* Jean-Charles & Noé : merge branches tests -> master puis develop -> master.
* Jean-Charles & Noé : Début de la phase 3
+
* Jean-Charles & Noé : Début de la phase 3.
* Noé : Gestion de l'ordonnancement
+
* Noé : Gestion de l'ordonnancement.
  
 
=== Mercredi 12 Juin 2019 ===
 
=== Mercredi 12 Juin 2019 ===
  
* Noé : '''Fin gestion de l'ordonnancement'''
+
* Noé : '''Fin gestion de l'ordonnancement'''.
* Jean-Charles : Endormissement des processus
+
* Jean-Charles : Endormissement des processus.
* Noé : Terminaison des processus
+
* Noé : Terminaison des processus.
  
 
=== Jeudi 13 Juin 2019 ===
 
=== Jeudi 13 Juin 2019 ===
  
* Jean-Charles : implemenation des tests fournis
+
* Jean-Charles : implemenation des tests fournis.
* Jean-Charles & Noé: '''Fin de l'endormissement des processus'''
+
* Jean-Charles & Noé: '''Fin de l'endormissement des processus'''.
* Noé: '''Fin de la terminaison des processus'''
+
* Noé: '''Fin de la terminaison des processus'''.
* '''Fin de la phase 3'''
+
* '''Fin de la phase 3'''.
  
 
=== Vendredi 14 Juin 2019 ===
 
=== Vendredi 14 Juin 2019 ===
  
* Noé & Jean-Charles : Debbuging des 3 premieres phases sur les tests fournis
+
* Noé & Jean-Charles : Debbuging des 3 premieres phases sur les tests fournis.
* Noé : Tests 1, 2 et 3 PASSED
+
* Noé : Tests 1, 2 et 3 PASSED.
* Noé : Début de la phase 4 : File de messages
+
* Noé : Début de la phase 4 : File de messages.
* Jean-Charles : Tests 4 et 5 PASSED
+
* Jean-Charles : Tests 4 et 5 PASSED.
 
* Bon Week-end !
 
* Bon Week-end !
  
=== Lundi 14 Juin 2019 ===
+
=== Lundi 17 Juin 2019 ===
  
* Jean-Charles : Test 6 PASSED
+
* Jean-Charles : Test 6 PASSED.
* Noé : Tests 7, 8 et 9 PASSED
+
* Noé : Tests 7, 8, 9 PASSED.
* Noé : Implementation des files de messages
+
* Noé : Implementation des files de messages.
* Noé : Tests des files de messages
+
* Noé : Tests des files de messages.
* Noé : Test 10 PASSED
+
* Noé : Tests 10, 11, 12 PASSED.
 +
 
 +
=== Mardi 18 Juin 2019 ===
 +
 
 +
* Jean-Charles et Noé : Pair programming.
 +
** Tests 13-17 & 20 PASSED.
 +
* '''Fin de la phase 4'''.
 +
* Jean-Charles et Noé : Début phase 5, réflexions sur la protection de l'execution.
 +
 
 +
=== Mercredi 19 Juin 2019 ===
 +
 
 +
* Jean-Charles et Noé : Pair programming.
 +
* Jean-Charles et Noé : Initialisation du traitant d'intérruption 49.
 +
* Noé : Implémentation du traitant d'intérruption 49.
 +
** Switch kernel lançant la bonne primitive système.
 +
* Noé : Implémentation d'une fonction assembleur '''init_user''' qui modifie '''ESP0''' et permet le '''iret''' du premier processus user.
 +
* Noé : Implémentation de la primitive système '''cons_write'''.
 +
* Noé : Lancement du premier processus en mode user qui print '''hello world'''.
 +
 
 +
=== Jeudi 20 Juin 2019 ===
 +
 
 +
* Jean-Charles : début de la phase 6
 +
* Noé : Modification de init_user pour permettre le premier '''iret''' de chaque processus user.
 +
* Noé : Ajout de la fonction '''ret_user''' mappée côté kernel qui permet de gérer le '''return''' des processus user.
 +
* Noé : Implémentation et tests de chaque primitive système.
 +
* Noé : Passage des tests 1-8, 9-17 et 20 en mode user
 +
** Problème lors du '''user_stack_free''', que l'on traitera par la suite si le temps le permet.
 +
 
 +
=== Vendredi 21 Juin 2019 ===
 +
 
 +
* Noé : correction du problème de '''user_stack_free'''
 +
** Phase 5 : le kernel se fait hack par le test 18, on suppose que la pagination pourrait nous aider à corriger ce problème. Comme elle est optionnelle pour les apprentis, on passe à la suite.
 +
* '''Fin de la phase 5'''
 +
* Jean-Charles : Phase 6 - gestion du keyboard (traitant côté kernel et fonctions côté user).
 +
* Jean-Charles : Phase 6 - implémentation de '''cons_read'''.
 +
* Jean-Charles & Noé : Phase 6 - Pair programming.
 +
* '''Fin de la phase 6'''
 +
* Jean-Charles & Noé : Conception de notre interprète de commande.
 +
* Bon Week-End !
 +
 
 +
=== Lundi 24 Juin 2019 ===
 +
 
 +
* Jean-Charles & Noé : Mise à jours et intégration du parseur de commandes fourni avec l'ensishell dans notre OS.
 +
* Jean-Charles & Noé : Commande '''ps'''.
 +
* Noé : Commande '''test'''.
 +
* Jean-Charles : Gestion du backspace et des flèches directionnelles gauche et droite dans la console.
 +
* Noé : Reffonte visuelle de la console.
 +
** Avec appel système de changement de couleur
 +
* Noé : Gestion du '''CTRL+L''' dans la console.
 +
* Noé : Commande '''clear'''.
 +
* Noé : BUGFIX libération de la mémoire lors d'input vide.
 +
 
 +
=== Mardi 25 Juin 2019 ===
 +
 
 +
* Jean-Charles : Gestion du mode '''inser'''.
 +
* Jean-Charles : Refactoration du code '''keyboard'''.
 +
* Jean-Charles : Gestion des touches '''begin''', '''end''' et '''del'''.
 +
* Noé : Amélioration de la commande test (lancement d'un test particulier).
 +
* Noé : Commandes '''exit''', '''kill''', '''loop''' et '''waitpid''' pour la gestion des processus.
 +
* Noé : Commande '''reboot''' permettant de redémarrer la machine.
 +
** Trigger de reboot lors de l'exit du premier shell.
 +
* Noé : Modification du '''user_start''' affichant un écran d'accueil demandant le username.
 +
* Noé : Commande '''help''' affichant la documentation des différentes commandes.
 +
* Noé : Commande '''shell-fish''' lançant un nouveau shell.
 +
** Avec sauvegarde et restauration de la mémoire vidéo en switchant de shell.
 +
 
 +
== Apports du projet ==
 +
 
 +
Nous avons trouvé le projet très instructif. Nous sommes plus à l'aise sur le fonctionnement des processus et des interruptions. Nous sommes également plus à l'aise pour les interactions entre C et assembleur.
  
 
== Difficultés rencontrées ==
 
== Difficultés rencontrées ==
 +
 +
Lors de la phase 2, nous avons eu du mal à comprendre que la taille de la pile (à renseigner lors de la création d'un processus) était en réalité la taille de la pile utilisateur et que la taille de la pile kernel est commune à tous les processus. Nous avons donc eu une implémentation des processus fausses jusqu'à la phase 3. Nous nous sommes rendus compte du problème grâce aux tests fournis.
  
 
== Sources externes ==
 
== Sources externes ==
 +
 +
OSdev : https://wiki.osdev.org/

Version actuelle en date du 26 juin 2019 à 06:17

Project schedule.png
Titre du projet aperOS
Cadre Ensimag

Équipe Noé Samaille, Jean-Charles Mugnier
Encadrants Gregory Mounié, Patrick Reignier


Présentation

Cette page présente l'OS que nous avons réalisé au cours des 3 semaines bloquées de projet que nous avions. Avec les beaux jours, le nom de notre OS nous a paru comme évident, ce devait être AperOS !

Equipe

Noé Samaille : apprenti 2ème année

Jean-Charles Mugnier : apprenti 2ème année

Commandes disponibles

La commande help donne la liste des commandes utilisables :

AperOS screenshot 1.png

Captures d'écran

  • Voici une capture d'écran de notre écran d'accueil :

AperOS screenshot 2.png

  • Et une capture de l'exécution d'une commande (ps) :

AperOS screenshot 3.png

Executable

Voici un lien pour télécharger l'OS que nous avons réalisé, il boot sur machine réelle et tourne aussi sur qemu. Fichier:Kernel NS JCM.bin.zip

Planning

Prévisionnel

Phase 1 : 1 jour

Phase 2 : 2,5 jours

Phase 3 : 2 jours

Phase 4 : 2 jours

Phase 5 : 2,5 jours

Phase 6 : 2 jours

Phase 7 : 2 jours

Effectif

Phase 1 : 1 jour

Phase 2 : 2,5 jours

Phase 3 : 2 jours

Phase 4 : 3 jours

Phase 5 : 2 jours

Phase 6 : 1,5 jour

Phase 7 : 2 jours

Avancement du projet

Phase 1 - Prise en main de l'environnement

100 %

Phase 2 - Processus, changement de contexte gestion du temps (kernel)

100 %

Phase 3 - Ordonnancement et cycle de vie des processus (kernel)

100 %

Phase 4 - Files de messages

100 %

Phase 5 - Protection de l'éxecution et appels systèmes

95 %

Phase 6 - Console

100 %

Phase 7 - Interprète de commandes

100 %

Extensions

Toutes les fonctionnalités des 7 phases ont été développées.

Nous avons en plus réalisées les extensions suivantes :

  • Meilleur shell grâce à la gestion des touches spéciales du clavier (début/fin/suppr) et gestion du mode "insertion"
  • Plus de commandes disponibles (test, sleep, loop, etc)
  • Un écran d'accueil spécial

Journal de bord

Liste chronologique des jours, puis sous-liste chronologique des tâches.

Mercredi 5 Juin 2019

  • Présentation initiale du projet par M. Mounié.
  • Jean-Charles et Noé : Mise en place (en parallèle) du code nécessaire à l'affichage.
  • Fin de la phase 1.
  • Jean-Charles et Noé: Début de la réflexion sur le changement de contexte entre processus.

Jeudi 6 Juin 2019

  • Jean-Charles : démarrage des tests de la phase 1.
  • Noé : Mise en place des structures de processus.
  • Noé : Mise en place du changement de contexte.
  • Jean-Charles et Noé : Choix d'un nom d'OS et d'un logo ASCII.

Vendredi 7 Juin 2019

  • Noé : Fin du changement de contexte.
  • Noé : Mise en place du Timer.
  • Bon Week-end !

Mardi 11 Juin 2019

  • Fin de la phase 2
  • Jean-Charles : Fin des tests de la phase 1.
  • Jean-Charles & Noé : merge branches tests -> master puis develop -> master.
  • Jean-Charles & Noé : Début de la phase 3.
  • Noé : Gestion de l'ordonnancement.

Mercredi 12 Juin 2019

  • Noé : Fin gestion de l'ordonnancement.
  • Jean-Charles : Endormissement des processus.
  • Noé : Terminaison des processus.

Jeudi 13 Juin 2019

  • Jean-Charles : implemenation des tests fournis.
  • Jean-Charles & Noé: Fin de l'endormissement des processus.
  • Noé: Fin de la terminaison des processus.
  • Fin de la phase 3.

Vendredi 14 Juin 2019

  • Noé & Jean-Charles : Debbuging des 3 premieres phases sur les tests fournis.
  • Noé : Tests 1, 2 et 3 PASSED.
  • Noé : Début de la phase 4 : File de messages.
  • Jean-Charles : Tests 4 et 5 PASSED.
  • Bon Week-end !

Lundi 17 Juin 2019

  • Jean-Charles : Test 6 PASSED.
  • Noé : Tests 7, 8, 9 PASSED.
  • Noé : Implementation des files de messages.
  • Noé : Tests des files de messages.
  • Noé : Tests 10, 11, 12 PASSED.

Mardi 18 Juin 2019

  • Jean-Charles et Noé : Pair programming.
    • Tests 13-17 & 20 PASSED.
  • Fin de la phase 4.
  • Jean-Charles et Noé : Début phase 5, réflexions sur la protection de l'execution.

Mercredi 19 Juin 2019

  • Jean-Charles et Noé : Pair programming.
  • Jean-Charles et Noé : Initialisation du traitant d'intérruption 49.
  • Noé : Implémentation du traitant d'intérruption 49.
    • Switch kernel lançant la bonne primitive système.
  • Noé : Implémentation d'une fonction assembleur init_user qui modifie ESP0 et permet le iret du premier processus user.
  • Noé : Implémentation de la primitive système cons_write.
  • Noé : Lancement du premier processus en mode user qui print hello world.

Jeudi 20 Juin 2019

  • Jean-Charles : début de la phase 6
  • Noé : Modification de init_user pour permettre le premier iret de chaque processus user.
  • Noé : Ajout de la fonction ret_user mappée côté kernel qui permet de gérer le return des processus user.
  • Noé : Implémentation et tests de chaque primitive système.
  • Noé : Passage des tests 1-8, 9-17 et 20 en mode user
    • Problème lors du user_stack_free, que l'on traitera par la suite si le temps le permet.

Vendredi 21 Juin 2019

  • Noé : correction du problème de user_stack_free
    • Phase 5 : le kernel se fait hack par le test 18, on suppose que la pagination pourrait nous aider à corriger ce problème. Comme elle est optionnelle pour les apprentis, on passe à la suite.
  • Fin de la phase 5
  • Jean-Charles : Phase 6 - gestion du keyboard (traitant côté kernel et fonctions côté user).
  • Jean-Charles : Phase 6 - implémentation de cons_read.
  • Jean-Charles & Noé : Phase 6 - Pair programming.
  • Fin de la phase 6
  • Jean-Charles & Noé : Conception de notre interprète de commande.
  • Bon Week-End !

Lundi 24 Juin 2019

  • Jean-Charles & Noé : Mise à jours et intégration du parseur de commandes fourni avec l'ensishell dans notre OS.
  • Jean-Charles & Noé : Commande ps.
  • Noé : Commande test.
  • Jean-Charles : Gestion du backspace et des flèches directionnelles gauche et droite dans la console.
  • Noé : Reffonte visuelle de la console.
    • Avec appel système de changement de couleur
  • Noé : Gestion du CTRL+L dans la console.
  • Noé : Commande clear.
  • Noé : BUGFIX libération de la mémoire lors d'input vide.

Mardi 25 Juin 2019

  • Jean-Charles : Gestion du mode inser.
  • Jean-Charles : Refactoration du code keyboard.
  • Jean-Charles : Gestion des touches begin, end et del.
  • Noé : Amélioration de la commande test (lancement d'un test particulier).
  • Noé : Commandes exit, kill, loop et waitpid pour la gestion des processus.
  • Noé : Commande reboot permettant de redémarrer la machine.
    • Trigger de reboot lors de l'exit du premier shell.
  • Noé : Modification du user_start affichant un écran d'accueil demandant le username.
  • Noé : Commande help affichant la documentation des différentes commandes.
  • Noé : Commande shell-fish lançant un nouveau shell.
    • Avec sauvegarde et restauration de la mémoire vidéo en switchant de shell.

Apports du projet

Nous avons trouvé le projet très instructif. Nous sommes plus à l'aise sur le fonctionnement des processus et des interruptions. Nous sommes également plus à l'aise pour les interactions entre C et assembleur.

Difficultés rencontrées

Lors de la phase 2, nous avons eu du mal à comprendre que la taille de la pile (à renseigner lors de la création d'un processus) était en réalité la taille de la pile utilisateur et que la taille de la pile kernel est commune à tous les processus. Nous avons donc eu une implémentation des processus fausses jusqu'à la phase 3. Nous nous sommes rendus compte du problème grâce aux tests fournis.

Sources externes

OSdev : https://wiki.osdev.org/