--- 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`.