Projet système PC : 2021 - BAUD Romain, SIDOT Vincent

De Ensiwiki
Aller à : navigation, rechercher
Project schedule.png
Titre du projet BabOs
Cadre Projet système

Équipe Romain BAUD Vincent SIDOT
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 d'un noyau de système d'exploitation sur une architecture Intel x86.

Executable binaire du projet : Fichier:Babos.zip

Sidotv baudro console.png

Équipe

Romain BAUD

Vincent SIDOT

Organisation

Nous avons développé en pair programming tout au long du projet à quelques exceptions près. Cela nous a permis de suivre à 2 toutes les étapes importantes et ainsi de comprendre l'ensemble du projet. Nous nous sommes de temps en temps partagés les tâches afin d'être plus rapide.

Phases du développement

Phase 1 : Prise en main de l'environnement

100 %

Cette première phase est très importante et permet de gagner du temps tout au long du projet si elle est bien réalisée. Nous avons donc pris notre temps pour lire la documentation afin de savoir retrouver les éléments lors des phases suivantes.

Nous avons également implémenté l'affichage printf sur l'écran grâce à la séance 1 de PSE.

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

100 %

Cette phase a été découpée en deux étapes distinctes. La première consistait à mettre en place la création, le lancement et le changement de processus. Pour cela, nous avons suivi le TP sur les processus. Cette phase fonctionne uniquement lorsqu'il y a un ou deux processus.

Dans un deuxième temps, nous avons implémenté un timer grâce au TP sur le timer. On a ainsi un timer de type HH:MM:SS qui se lance au démarrage du Projet et est affiché en haut à droite de l'écran.

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

100 %

Cette troisième phase a été découpée en trois parties. Tout d'abord, nous avons implémenté la partie ordonnancement en suivant le TP sur l'ordonnancement. Elle fonctionne maintenant avec plus de deux processus. Nous avons également développé dans cette partie la création dynamique des processus.

Puis, nous avons créé une nouvelle fonction dors qui va endormir un processus pendant x secondes. Afin que l'endormissement fonctionne, il a fallu modifier l'ordonnancement pour qu'il prenne en compte l'état endormi. Tout cela était expliqué dans le TP endormissement.

Avant de s'occuper de la terminaison, nous avons fait un gros refactoring du code et nous avons ajouté les premières primitives système. La fonction exit correspond au TP sur la terminaison

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

100 %

Dans cette quatrième phase, nous avons implémenté les files de message. Cela n'a pas été trè complexe mais nous avons du également réécrire tous les appels système afin que les tests kernel fonctionnent.

Cette phase a engendré de nombreux refacto et changements dans le code, notamment au niveau des structures et de l'ordonnancement.

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

0 %

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

0 %

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

0 %

Tests Kernel

19/19

Tests User

0/20

Journal de bord

Semaine 1

Lundi 7 juin

Phase 1 :

  • Lecture de la documentation
  • Prise en main de l'environnement

Mardi 8 juin

  • Mise en place de la page wiki

Phase 1 :

  • Création du fichier console.c et développement du printf

=> Fin de la phase 1

Phase 2 :

  • Début du TP sur les processus
  • Implémentation du changement de contexte

Mercredi 9 juin

  • Mise en place du debug
  • Configuration de VSCode pour pouvoir s'en servir comme un IDE

Phase 2 :

  • Fin du TP sur les processus
  • Début du TP sur le timer

Jeudi 10 juin

  • Déboggage du curseur lors de l'affichage

Phase 2 :

  • Fin du TP sur le timer

Vendredi 11 juin

Phase 2 :

  • Mise en place des tests
  • refactorisation du code

=> Fin de la phase 2

Phase 3 :

  • TP sur l'ordonnancement
  • Mise en place d'une queue pour gérer la priorité des processus

Semaine 2

Lundi 14 juin

Phase 3 :

  • Mise en place de la priorité sur les processus, avec des tests
  • TP sur l'endormissement
  • Début du TP sur la terminaison

Mardi 15 juin

Phase 3 :

  • Implémentation des premières primitives système : waitpid, exit, getpid, getprio, chprio
  • Changement de la structure processus_t afin d'ajouter l'information du parent et des fils
  • nouvelle struct list_t et fonctions associées

Mercredi 16 juin

Phase 3 :

  • Fin de l'implémentation des premières primitives système
  • Refactoring du code, notamment dans processus.c
  • Finalisation des tests

=> Fin de la phase 3

Phase 4 :

  • Lecture de la documentation

Jeudi 17 juin

Phase 4 :

  • Nouvelle structure pqueue_t pour gérer les messages
  • Implémentation des fonctions : pcreate, pdelete, preset, pcount
  • Changement de la structure processus_t avec l'ajout d'un paramètre pour le retour des fonctions preceive et psend
  • Nouveaux états pour les processus_t : ETAT_BLOQUE_FILE_PLEINE, ETAT_BLOQUE_FILE_VIDE, ETAT_WAITFILS
  • Ajout de macro foreach

Vendredi 18 juin

Phase 4 :

  • Implémentation des fonctions : psend et preceive
  • Début de la phase de test

Semaine 3

Lundi 21 juin

Phase 4 :

  • Réécriture des appels système : wait_clock, clock_settings, current_clock
  • Modification de l'ordonnancement
  • Réimplémentation de la gestion des priorités qui permet d'avoir n'importe quelle valeur de priorité dans la limite du nombre de processus

Mardi 22 juin

Phase 4 :

  • Correction de bugs pour faire passer les tests kernel
  • Passage des tests kernel : 1 à 3

Mercredi 23 juin

Phase 4 :

  • Passage des tests kernel : 4 à 11

Jeudi 24 juin

Phase 4 :

  • Passage des tests kernel : 12 à 20 sachant que le 19 ne fonctionne pas en kernel

=> Fin de la phase 4

=> Fin des tests kernel

Vendredi 25 juin

  • Aide aux groupes qui n'avaient pas encore passés tous les tests kernel
  • Soutenance

Difficultés rencontrées

  • Assez difficile d'utiliser gdb en tant que non initié
  • Beaucoup d'incompréhension vis à vis des fonctions à implémenter. On les comprend grâce aux tests donnés