Captures d'écrans
Il faut mettre beaucoup de guillemets ici, étant donné que l'intérêt de Sos ne réside
pas dans les effets graphiques, extrêmement pauvres comme le prouvent les photos suivantes. Cliquez sur les images pour les agrandir.
Article 9, 2ème volet : Périphériques bloc (cache de blocs, cache de pages, disques durs, partitions, contrôleur IDE)
Sur l'écran
qemu (en haut à droite) :
- quelques commandes lancées dans le shell
Sur la ligne série (en bas) :
- quelques commandes envoyées sur la ligne série, et leur réponse par SOS
Sur le terminal où bochs/qemu a été lancé (
ie port
0xe9, en haut à gauche) :
- les messages de debuggage classiques : on voit la partie qui montre qu'il y a cohérence entre mmap et les accès par read/write sur le disque dur (test blktest)
Note : pour lancer qemu dans cette démo, nous avons utilisé la ligne de commande suivante : "qemu -serial pty -fda fd.img -hda hd10M.img -boot a". Pour confectionner une image de disque dur utilisable par bochs/qemu (ici : hd10M.img), voir les indications fournies dans l'article de Février 2006 ou sur la SOSDownload.
Note 2 : pour déporter le port série de qemu sur un terminal Linux comme sur cette démo, voir les indications sur la SOSDownload (article 9).
Article 9, 1er volet : Périphériques caractère (tty, /dev/zero, /dev/mem, console, ligne série)
Sur l'écran
qemu (en haut à gauche) :
- quelques commandes lancées dans le shell
Sur la ligne série (en haut à droite) :
- quelques commandes envoyées sur la ligne série, et leur réponse par SOS
Sur le terminal où bochs/qemu a été lancé (
ie port
0xe9) :
- les messages de debuggage classiques
Note : pour lancer qemu dans cette démo, nous avons utilisé la ligne de commande suivante : "qemu -serial pty -fda fd.img". Pour déporter le port série de qemu sur un terminal Linux comme sur cette démo, voir les indications sur la SOSDownload.
Article 8 : VFS (open, read, write, mount, link, unlink, symlink, mount, etc.)
Sur la console :
- la même chose que pour l'article 7.5
Sur le terminal où bochs/qemu a été lancé (
ie port
0xe9) :
- environ 300 tests de open, read, mount, .... A l'ecran : un des 3 tests de mmap de fichier partagé entre 2 processus
Article "7 et demi" : Gestion de l'espace utilisateur (fork + Copy-on-write, exec, mmap, brk/malloc)
Sur la console :
- 1 programme qui mappe /dev/mem couvrant le mapping vidéo sur x86, 2 threads dans le processus qui utilisent ce mapping pour afficher des messages qui glissent en sens opposés
Sur le terminal ou bochs/qemu a été lancé (
ie port
0xe9) :
- la configuration de l'espace utilisateur en cours de fork/mmap/mprotect/mremap
- les threads utilisateur qui commettent des accès illégaux ou qui exécutent des instructions réservées au mode superviseur sont supprimés
Article 7 : Threads utilisateur, processus, appels système, chargement ELF simplissime
Sur la console :
- les mêmes tests que pour l'article 6.5 (threads noyau)
- le calcul de la charge processeur pour les 1, 5 et 15 dernières minutes (en bas à droite)
Sur le terminal ou bochs/qemu a été lancé :
- les affichages faits via le port 0xe9 par les applications utilisateur (bochs et qemu doivent être (re)compilés pour le supporter)
- 6 programmes ELF s'entremêlent et commettent (volontairement) des erreurs mémoire ou des violations de privilège
Article "6 et demi" : Threads noyau, ordonnancement et primitives de synchronisation
3 jeux de threads noyau :
- le thread "idle" (compteur vert foncé en haut à gauche)
- une série de threads pour la simulation de souris qui recherchent de la nourriture (le damier multicolore au milieu de l'écran) : environ 250 threads s'exécutent "en parallèle". Cette démo nous a été fournie par Cyril Dupuit, merci à lui !
- une série de threads ayant diverses priorités (les compteurs en bas de la photo)
Note : l'article du magazine décrit le fonctionnement du système avec un ordonnancement de type FIFO. Mais, dans les sources, nous fournissons une version améliorée supportant un ordonnancement de type O(1) mixte priorité fixe - timesharing Unix.
Article 6 : Variations sur la pile, routines bas-niveau pour le multi-tâche (changement de contexte, coroutines)
3 tests :
- ping-pong à 2 programmes pour afficher "Hello world" (invisible sur cette photo, visible sur bochs uniquement)
- évaluation d'une expression arithmétique entière par un pipeline lecture/lexer/parser
- demand paging
- backtrace
Article 5 : Allocateur de mémoire virtuelle pour le noyau
SOS alloue/désalloue des petits objets en grande quantité pour faire des calculs sur des grands nombres entiers. Ici une étape intermédiaire dans le calcul de "factorielle 1000" :
Article 4 : Pagination
SOS change la page physique sur laquelle il est en train d'exécuter le code, sans changer d'adresse virtuelle :
Article 3 : Gestion de la mémoire physique
SOS alloue un maximum de mémoire et la libère aussitôt en vérifiant qu'il n'y a eu aucun écrasement. Il affiche la quantité de RAM allouée/libérée :
Article 2 : Segmentation, gestion des interruptions et exceptions
SOS tourne avec 2 compteurs : 1 interruption matérielle (timer, à droite en vert), 1 exception en boucle (division par zéro, à gauche en rouge) :
Article 1 : SOS boote
Chargement de SOS par Grub :
Chargement avec le secteur de boot fourni avec SOS :