Catégorie:Projets de spécialité Bienvenue sur la page de présentation du projet de spécialité 2A de Remi QUINQUENEL et Alexandre DECUQ, étudiants-apprentis en 2ème année à l'Ensimag. Le projet a été effectué du jeudi 9 juin au vendredi 1er juillet 2011. Son objectif est la réalisation d'un noyau de système d'exploitation.
Travail effectué
Cahier des charges
Etat des lieux du projet
Phases 1, 2, 3, 4 : OK
Phases 5 et 6 : non terminées
Phase 7 : non implémentée
Plannings du projet
Planning syst.odt
Trace des dépots
Bilan
Apports du projet
Le projet permet d'avoir une vision du coeur de la machine en différenciant le noyau par rapport aux systèmes d'exploitation. En effet, le noyau correspond aux primitives qui permettent de dialoguer directement avec le matériel. Quant au système d'exploitation, il gère le plus haut niveau avec les processus, sémaphores et utilisateurs.
Les connaissances en langage de base (C et assembleur) sont renforcées
L'implémentation des sémaphores/processus est très intéressante, cela permet d'aller plus loin que leurs simples utilisations et de voir la compléxité de leurs gestions
Difficultés rencontrées
Ce projet nous a posé des problèmes à la fois techniques et organisationnel :
Tout d'abord, les premiers jours nous n'avons pas beaucoup avancé car nous avions le projet Web à finir
Ensuite notre groupe a eu quelques difficultés à se "replonger" dans le codage assembleur
Les prérequis n'était pas tous remplis :
pour le TP PSE1, la fonction traite_char() a été reprise
pour le TP PSE2, la fonction traintant() a été modifiée
L'implémentation des 4 premières phases s'est plutôt bien passée, mais les phases 5 et 6 n'ont pu être terminées :
Phase 5 : cette phase nécessite une très bonne compréhension des différents niveaux de sécurité et une excellente maitrîse des piles et des appels systèmes. La librairie "syscalls" a été implémentée, le "traitant49" également, nous avons bien pris en compte la construction de la pile superviseur (EIP,CS...) lors de la première exécution et l'appel a "demarrer_proc" qui exécute un iret, la modification de la DPL (valeur = 3). Lors de l'exécution du start_user, la fonction utilisateur appelle bien la fonction du noyau correspondante. Le problème survient lors de l'exécution du retour d'interruption (iret) pour revenir au programme utilisateur.
Phase 6 : les interruptions en provenance du clavier sont bien reconnues et l'on récupère bien les bons codes. Le problème vient de la gestion du tampon : en effet, le tampon de remplit bien mais le "cons_read" ne le lit pas comme il le faudrait.
Finalement, nous avons manqué de temps pour finir cette dernière phase car nous devions exécuter les tests. A noter également qu'un membre du binome a du s'absenter plusieurs fois pour passer le TOEFL et les rattrapages.
Conseils pour les futurs alternants
S'assurer d'avoir fini les TP PSE et qu'ils soient justes avant de commencer le projet
Relire les cours "Logiciel de base" de la première année
Negocier avec les enseignants pour n'avoir que le projet système à faire lors du commencement de ce dernier
Maitriser gdb, en particulier les commandes suivantes :
x /16x $esp : affiche le contenu de la pile
x /10i $eip : affiche les 10 instructions suivantes
i reg : affiche le contenu de tous les registres
Ne pas hésiter à discuter de la compréhension des phases délicates (3 et 5) entre les différents groupes
Se réserver 3-4 jours en fin de projet pour l'exécution des tests