Ajout du rapport
This commit is contained in:
parent
a2b87601fa
commit
e2df8860bd
1 changed files with 135 additions and 0 deletions
135
rapports/td1/rapport.md
Normal file
135
rapports/td1/rapport.md
Normal file
|
@ -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`.
|
Loading…
Add table
Add a link
Reference in a new issue