diff --git a/rapports/td1/rapport.md b/rapports/td1/rapport.md new file mode 100644 index 0000000..06bfaaa --- /dev/null +++ b/rapports/td1/rapport.md @@ -0,0 +1,135 @@ +--- +title: systèmes d'exploitation, rapport TD1 +documentclass: scrartcl +author: + - Cédric Cassin + - Yorick Barbanneau +fontsize: 13pt +mainfont: DejaVu Serif +geometry: [top=1.5cm, bottom=3cm, left=3cm, right=3cm] +header-includes: + - \definecolor{liens}{HTML}{de6a66} +urlcolor: liens +linkstyle: bold +... + +## Bilan + +Ce premier TD est notre premier contact avec Nachos, et il faut bien avouer +qu'il ne fut pas aussi mélodieux que dans *Rencontre du Troisième Type* de Steven +Spielberg. + +Pour nous qui sommes sortis de la licence ADSILLH [^n_adsillh] nous +avions un avantage sur nos autres camarades: nous avons eu des **cours (et TDs) sur +les appels systèmes GNU/Linux**. Nous avons aussi un handicap : nous sommes +inscrits en Master IDI, ce qui signifie que nous avons une vie professionnelle +en plus de notre vie étudiante, et pour l'un de nous une vie familiale. En gros +mois de temps personnels à consacrer à Nachos. + +Nachos n'en reste pas mois un sujets intéressant -- bon effectivement nous n'en +ferons pas notre dernière vague tel Patrick Swayze dans *Point Break* -- mais +developer ces premiers appels systèmes fut un travail enrichissant. + +[^n_adsillh]:Administrateur et Développeur de Systèmes Informatique sous + Licences Libres et Hybrides + +### Ce qui manque + +Comme vous pouvez l'imaginer après avoir lus les lignes précédentes, nous +n'avons pas eu le temps d'implémenter `printf` au moment où nous écrivons ces +lignes[^n_finir]. + +[^n_finir]:la première version de ce rapport mentionnait aussi `PutInt` et +`GetInt` mais nous avons réussi à les ajouter à la dernière minute. + +### Ce que nous avons + +Nous avons cependant bien implémenté `PutChar`, `PutString`, `GetChar` et +`Getstring`. Nous somme globalement satisfait du code que nous avons produit. +Cependant des doutes subsistent sur l'implémentation de `Getstring`. + +Nous avons aussi écrit les fonctions `CopyStringToMachine` et +`CopyStringFromMachine` que nous avons positionné dans le fichier +`userprog/exception.cc`. Ces deux fonctions pourraient en effet servir pour +d'autres appels systèmes. + +### Les bugs + +A part un bug lors de la compilation de notre source de test pour l'appel +système `PutString`, nous n'avons pas repérés de bugs sur nos différents ajouts. +Ce qui ne signifie pas pour autant qu'il n'y en a pas, mais les différents tests +mis en place n'ont pas révélés de problèmes particuliers. + +Le problème avec notre test de `PutString` (le source est dans +`test/pustring.c`) se produit à la compilation. Il semblerait aue si la chaine +de caractère passées en paramètre est inférieure à la taille du tampon +(`MAX_STRING_SIZE`), alors l'erreur suivante apparaît à la compilation: + +> putstring.c:(.text+0x10): dangerous relocation: Réadressage relatif GP utilisé alors que GP n'est pas défini + +La fonction semble pourtant fonctionner correctement puisque nous l'utilisons +dans le source servant à tester `GetString` et ce quel que soit la taille du +texte saisi. + +Mais cette erreur abordée sur le chat de l'UE a été réglée grace au conseil de +Samuel Thibaud de rajouter une option dans le `Makefile` du dossier `test/`. + +## Les points délicats. + +Nous exagèrerions juste un peu en disant que tout le TD fut un point délicat... +Il nous a fallut du temps pour comprendre **comment les différents éléments +s'imbriquent** pour former un tout cohérent et les ceux à modifier pour ajouter +ce qui était demandé[^n_modifs]. Certaines modifications nous ont parfois +explosées (virtuellement) au visage, un peu comme certaines inventions de Data +dans *Les Goonies*. + +[^n_modifs]:Pour les éléments où nous n'étions pas guidés par le sujet du TD. + +Le point le plus délicat fut tout de même l'écriture de l'appel système +`GetString`. Elle a nécessite beaucoup d'aller retour **compilation / test / +modification** un peu à la manière d'un jeu-vidéo de type Rogue-Like (aucune +manette de jeu, clavier ou souris a été blessée ou même malmenée durant ce TD). + +Afin de progresser sur cette partie, nous avons ajouté des `DEBUG` dans notre +code. Ainsi nous affichons **tout un tas d'informations utiles**. +Ces différents retours nous on permit de régler les problème que nous avions +dans les fonctions `CopyStringToMachine` et `ConsoleDriver::GetString`, mais +aussi améliorer globalement notre code. + +## Limitations + +Dans notre appel `GetString`, il est possible de passer une adresse mémoire vers +une chaine de caractère plus grande que la taille donnée en paramètre. Si nous +avons réussi à obliger `GetString` à respecter le paramètre `size` en comptant +le nombre de caractères écrits, nos **n'avons pas réussi à détecter ce cas de +figure** pour éventuellement lancer une exception. + +## Les tests + +Pour `PutString`, nous avons écrit un petit programme permettant de tester +quelques sorties plus ou moins longue. Les éléments de debug nous ont permis de +corriger un problème de caractère qui passait à la trappe lors du passage au +tampon suivant. + +Le test mets aussi en lumière une limitation de NachOS : **Il n'est pas très +doué question caractères français**, mais elle n'est pas de notre fait. +Voici un exemple de sortie de notre appel avec la sortie de debug activée: + +``` +[...] + ->copyFromMachine keycode:72 + ->copyFromMachine keycode:101 + ->copyFromMachine keycode:108 + ->copyFromMachine keycode:108 + ->copyFromMachine keycode:111 + ->copyFromMachine keycode:32 + ->copyFromMachine keycode:87 + ->copyFromMachine keycode:111 +Read buffer:Hello Wo, size:8 +Hello Wo +[...] +``` + +Pour `GetString`, nous avons aussi écrit un programme de test, celui-ci fait +une boucle infinie attendant une saisie utilisateur et la retranscrit grâce à un +`PutString`.