@@ -75,7 +75,13 @@ Ce périphérique est uniquement exposé virtuellement (c'est à dire de manièr
**Comportement du VMM**
Le VMM affiche le texte spécifié par le guest sur la sortie standard.
Le VMM affiche le texte spécifié par le guest sur la sortie standard. Attention, par défaut, la sortie standard (`stdout`) est bufferisée. Le texte écrit sur la sortie standard est *flushé* dans le terminal lorsque le caractère `\n` est rencontré ou lorsque le buffer interne lié à `stdout` est plein. La sortie standard peut être "débufférisée" avec le code suivant\ :
\small
```{.c}
setbuf(stdout, NULL);
```
\normalsize
**Guest: accès paravirtualisé**
...
...
@@ -127,7 +133,9 @@ Ce périphérique est exposé physiquement et virtuellement. Il offre une seule
**Comportement du VMM**
Le VMM ouvre une fenêtre graphique de la résolution spécifiée par le guest.
Le VMM ouvre une fenêtre graphique de la résolution spécifiée par le guest. Attention, le VMM doit uniquement ouvrir une fenêtre graphique lorsque "demandé" par le guest. Si le guest ne programme jamais d'initialisation d'affichage, le VMM ne doit pas ouvrir de fenêtre graphique\ !
Un moyen relativement simple pour gérer l'affichage en parallèle à l'exécution du CPU virtuel (vCPU) est de réaliser un hyperviseur multi-threadé. Comme l'affichage doit absolument être géré par le thread principal (cf. "Affichage graphique" dans section "Code source à disposition"), il vous faudra donc créer un nouveau thread pour gérer le vCPU (l'appel `ioctl KVM_RUN` qui est bloquant).
**Guest: accès paravirtualisé**
...
...
@@ -274,7 +282,7 @@ Le périphérique se programme en MMIO.
### (6) Clavier
Ce périphérique est exposé physiquement et virtuellement. Côté guest OS, lorsque l'interruption matérielle 1 est reçue, cela signifie qu'une touche clavier à été pressée et la valeur de celle-ci peut alors être récupérée par le guest.
Ce périphérique est exposé physiquement et virtuellement. Côté guest OS, lorsque l'interruption matérielle 1 est reçue, cela signifie qu'une touche clavier à été pressée et la valeur de celle-ci peut être récupérée par le guest.
**Comportement du VMM**
...
...
@@ -399,7 +407,7 @@ Le code lié au VMM est volontairement vide. Il se trouve dans le répertoire `v
Votre VMM devra ouvrir une fenêtre graphique et afficher des sprites. Pour cela, vous utiliserez la librairie SDL2. Afin de vous aider dans cette tâche, le petit *wrapper***`gfxlib`**, très simple d'utilisation, vous est fourni. Le projet est disponible sur [github ici](https://github.com/thxbb12/gfxlib) avec plusieurs exemples d'utilisation.
**IMPORTANT** : l'appel de fonctions SDL2 en dehors du thread principal (la fonction `main`) peut mener à des comportements indéterminés. En conséquence, il est absolument vital de n'appeler AUCUNE fonction SDL2 en dehors du thread `main`!
**IMPORTANT** : L'appel de fonctions SDL2 en dehors du thread principal (la fonction `main`) peut mener à des comportements indéterminés. En conséquence, il est absolument vital de n'appeler AUCUNE fonction SDL2 en dehors du thread `main`!
### Guest
...
...
@@ -440,7 +448,9 @@ L'écriture de l'hyperviseur vous prendra un temps non négligeable. Commencez p
Pour vous aider à tester votre VMM et vous assurer que son comportement est correct, différents OS guests seront mis à disposition sur le git. Vous pourrez les exécuter avec votre VMM et vérifier que vous obtenez bien les résultats attendus.
<!--
Le binaire de l'hyperviseur complet à réaliser vous sera également fourni afin que vous puissiez vérifier que le code de votre guest est également correct.