Update putint and getint
And rapport for TD1
This commit is contained in:
parent
e2df8860bd
commit
26f9a4226f
4 changed files with 84 additions and 41 deletions
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: systèmes d'exploitation, rapport TD1
|
||||
title: systèmes d'exploitation, TD1
|
||||
documentclass: scrartcl
|
||||
author:
|
||||
- Cédric Cassin
|
||||
|
@ -15,16 +15,15 @@ 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.
|
||||
Ce premier TD est notre première approche de Nachos, et il faut bien avouer
|
||||
qu'il ne fut pas aussi mélodieux que le premier contact 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.
|
||||
Nous qui sommes sortis de la licence ADSILLH [^n_adsillh] disposons un avantage
|
||||
sur certains de 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. En gros moins 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
|
||||
|
@ -36,34 +35,41 @@ developer ces premiers appels systèmes fut un travail enrichissant.
|
|||
### 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'avons pas eu le temps d'implémenter un élément : `printf` manque à l'appel 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.
|
||||
|
||||
Nous avons aussi implémenté la gestion des erreurs de mémoire dans les fonctions
|
||||
`copyStringFromMachine` et `copyStringToMachine`, ces fonctions retourne **-1**
|
||||
si une erreur se produit dans les instructions `ReadMem` et `WriteMem` (elles
|
||||
retourne alors *false*), **mais** nous n'avons pas implémenté la gestion de ce
|
||||
cas de figure dans les appels `PutString` et `Getstring`.
|
||||
|
||||
### 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 implémenté `PutChar`, `PutString`, `GetChar` et `Getstring`.
|
||||
Nous sommes 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.
|
||||
d'autres appels système.
|
||||
|
||||
### 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.
|
||||
Ce qui ne signifie pas pour autant qu'il n'y en ai 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:
|
||||
`test/pustring.c`) se produisait à la compilation. d'après nos constatation, il
|
||||
semblerait que 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
|
||||
|
||||
|
@ -86,9 +92,10 @@ 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 /
|
||||
`GetString`. Il 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).
|
||||
manette de jeu, clavier ou souris a été blessé ou même malmené 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**.
|
||||
|
@ -104,16 +111,36 @@ avons réussi à obliger `GetString` à respecter le paramètre `size` en compta
|
|||
le nombre de caractères écrits, nos **n'avons pas réussi à détecter ce cas de
|
||||
figure** pour éventuellement lancer une exception.
|
||||
|
||||
Un problème de sécurite peux alors se produite et il est simple à tester avec
|
||||
`test/getstring_2`, le voici illustré :
|
||||
|
||||
```
|
||||
/test@machine $ ./nachos -x ../test/getstring_2
|
||||
12345678912345678ls
|
||||
1234567891234567
|
||||
[...]
|
||||
test@machine $ ls
|
||||
addrspace.cc bitmap.cc consoledriver.cc console.o
|
||||
[...]
|
||||
```
|
||||
|
||||
On voit bien que les caractères dépassant le tampon de 16 caractères on **été
|
||||
transmit à la console du système hôte** de NachOS. dans notre test, un simple
|
||||
`ls` a été effectué, mais un `rm -rf ~` serait un peu plus problematique.
|
||||
|
||||
Nos différents tests sur le chaînes de caractères mettent aussi en lumière une
|
||||
limitation de NachOS : **Il n'est pas très doué question caractères accentués**,
|
||||
et a l'air de ne pas parler l'UTF-8 mais cette limitation n'est pas de notre
|
||||
fait.
|
||||
|
||||
## 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:
|
||||
Voici un exemple de sortie de cet appel avec la sortie de debug activée:
|
||||
|
||||
```
|
||||
[...]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue