Projet système PC : 2017 - Aurélien Laviron, Elisa Lescarret, Félix Robinet

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

Équipe Aurélien Laviron Elisa Lescarret Félix Robinet
Encadrants François Broquedis , Gregory Mounie, Patrick Reignier


Présentation

Le projet de système a pour objectif le développement d'un noyau de système d'exploitation sur une architecture Intel. Ce noyau devra être minimaliste et permettre la création, l’exécution, la synchronisation et l’ordonnancement des processus, la gestion des entrées sorties et l'implémentation d'un shell.

Journal de bord

Première semaine

Les deux premiers jours nous nous sommes familiarisé avec l’environnement, implémenter l'affichage et débuter la phase 2.

8 juin 2017

Suite à la présentation du projet nous avons fait la phase 1. Afin de gérer l'affichage nous nous sommes servi du mini-projet que nous avions fait en Logiciel de base en l'adaptant. Nous avons ensuite commencé la phase 2 en débutant le développement de la fonction "start" qui a pour but l’exécution des processus

9 juin 2017

Nous avons continué la phase 2 et réaliser des tests. Pour la phase 2 nous avons repris le code de logiciel de base pour réaliser le timer. Pour la gestion des processus le développement fut plus difficile.

Deuxième semaine

12 juin 2017

Nous avons fini la phase 2 et commencé la phase 3. Le plus compliqué fut de gérer le changement de contexte qui est indispensable pour faire la suite. Pour la phase 3 nous avons commencer l'ordonnancement. Pour la phase 2 et 3 nous avons réalisé des tests.

13 juin 2017

Nous avons rapidement fini l'ordonnanceur et nous nous sommes attaqués à la filiation et à la terminaison

14 juin 2017 au 16 juin 2017

Après avoir fini l'implémentation de la filiation et la terminaison nous nous sommes attaqué au debug de cette phase 3. En parallèle nous avons réalisé l'implémentation et débuté le debug de la phase 4. Pour la phase 4, suite à des problèmes rencontrés avec la queue fournie nous avons implémenté notre propre liste chaînée FIFO pour la gestion d'une file de message.

Troisième semaine

19 juin 2017

Nous avons fini le debug de la phase 3 nous avons pu l'intégrer à la branche master et nous avons continuer que le débug de la phase 4 Nous avons implémenté une structure différente pour la gestion des files de messages pour pouvoir gérer les différentes files et les différentes queues de processus bloqués.

20 juin 2017

Nous avons fini le debug de la phase 4.

21 juin 2017

Nous avons commencé la phase 5. Pour cette phase nous avons choisi de transmettre les paramètres via la pile et non via les registres. Nous avons réalisé la fonction pour passer du mode kernel en mode user en parallèle de la réalisation de la bibliothèque des appels système. La fonction pour changer de mode a été terminée ce jour.

22 juin 2017

Nous avons fini la réalisation de la bibliothèque des appels système. Nous avons débuté la phase 6 et la protection d'exécution du code en parallèle.

23 juin 2017

Nous avons géré les piles utilisateurs et les piles superviseur, aussi nous avons revu le code du changement en mode user pour la phase 5. Nous avons continué la phase 6 en parallèle.

Quatrième semaine

26 juin 2017

Nous avons fini la phase 5, la phase 6 et la phase 7. Nous nous sommes penchés sur la réalisation des extensions.

27 juin 2017

28 juin 2017

Soutenance

Réalisation des différentes phases

Phase 1

Pour la phase 1 nous avons mis en place l'environnement sur nos machines. Puis nous avons intégré ce que nous avons fait lors du mini-projet de logiciel de base pour gérer l'affichage
Fin: 08/06/2017

100 %

Phase 2

Pour cette phase nous l'avons décomposé en deux:

  • Dans un premier temps la réalisation de la fonction "start" et la gestion des changements de contexte
  • Dans un deuxième temps la mise en place du timer et des interruptions

Il nous a été difficile de comprendre la documentation ainsi que les différents éléments présents dans les sources fournies.

Fin: 12/06/2017

100 %

Phase 3

Cette phase est décomposé en trois parties :

  • L'ordonnanceur
  • La gestion de la filiation
  • la terminaison des processus

Nous avons décidé d'ajouter une structure de liste chaînée pour gérer la filiation

Fin: 19/06/2017

100 %

Phase 4

Cette phase consiste à gérer le wait_clock et la file de message. Pour la gestion de la file de message nous avons décidé d'implémenter une liste chaînée FIFO car nous avons rencontré des problèmes en utilisant la queue fournie. Pour la gestion des processus en attente nous avons utilisé la queue fournie ce qui nous a permis de récupérer les processus par rapport à leur priorité.

Fin: 20/06/2017

100 %

Phase 5

La phase 5 consiste à la gestion du mode utilisateur. Il s'agit d'une phase très importante. La phase de documentation et de réflexion nous a pris un peu plus d'une demi-journée. Nous avons procédé en plusieurs étapes:

  • Mise en place d'une fonction pour passer en mode user
  • Réalisation la bibliothèque des appels système
  • Protection d’exécution du code

La réalisation de la bibliothèque d'appels système et la mise en place d'une fonction pour passer en mode user ont été fait en parallèle

100  %

Phase 6

Cette phase consiste à l'implémentation de la console Nous avons décomposé ça en plusieurs étapes :

  • Gestion les interruptions clavier
  • Gestion le buffer et les caractères spéciaux (enter, shift, delete)
  • Gestion les processus en attente d'interruption clavier
100  %

Phase 7

Cette phase consiste à la mise d'un shell. Pour celle ci nous avons mis en place les appels systèmes suivants:

  • ps
  • sys_info
  • echo
  • exit (qui reboot le système)
100  %

Extension

Les différentes extensions envisagées sont les suivantes:

  • l'amélioration du Shell
  • l'affichage de la date
  • la gestion de la souris

L'amélioration du Shell

Nous nous sommes penché sur l'amélioration du shell afin de permettre l'enchainement des commandes. Exemple: "ps && sys_info" Et aussi le lancement d'autres commande:

  • test <numéro>|all qui permet de lancer le test dont le numéro est indiqué ou tous les tests si all
  • sleep <nombre> qui permet de faire dormir le shell le nombre d'interruptions indiqué
  • clear qui permet lprintf("\tps - connaitre la liste des processus en cours\n");
  • man qui affiche la liste des tests
75  %

L'affichage de la date

Nous avons décidé d'ajouter la gestion de la date. pour cela nous nous sommes basé sur le mini-projet que nous avions réalisé en logiciel de base l'année dernière.

100 %

= La gestion de la souris

Nous avons comme idée de gérer la souris le plus grand problème que nous avons rencontré pour cette implémentation c'est que nous n'avons pas trouvé l'interruption

Choix techniques

IDE :

  • CLion

Gestionnaires de version :

  • Git