Téléchargement de SOS
Le code de SOS (sous GPL v2) est téléchargeable ici.
Article 10 : "Système de fichiers FAT" (par Anthoine Bourgeois)
Linux Magazine 98, Octobre 2007
Code source :
sos-code-art10-lm98.tgz (md5 3d21f1eb774972217a53d3cef35fb573)
[Patch] [Patch in readable Gzipped HTML format]
ATTENTION : il est très fortement très déconseillé de tester SOS sur machine réelle. Nous (les auteurs : Bourgeois/Decotigny/Petazzoni) ne pourrons pas être tenus responsables en cas de pertes de données ou de dommages causés sur votre matériel.
Article 9 (2ème volet) : "Pilotes de périphériques bloc" (cache de blocs, cache de pages, disques durs, partitions, contrôleur IDE)
http://www.gnulinuxmag.com/index.php?2006/01/26/18-gnu-linux-magazine-80-fevrier-2006-en-kiosque-le-27-janvier
Vous trouverez les sources directement ci-dessous :
Code source :
sos-code-art9.5-lm80.tgz (md5 c84578b6fe9cbe58cffba6c35e0f2b7e)
[Patch] [Patch in readable Gzipped HTML format]
ATTENTION : il est très fortement très déconseillé de tester SOS sur machine réelle. Nous (les auteurs : Decotigny/Petazzoni) ne pourrons pas être tenus responsables en cas de pertes de données ou de dommages causés sur votre matériel. En particulier, l'exécution de spawn blktest entraînera la perte irrémédiable de toutes les données sur toutes les partitions de votre disque dur !
Le
shell comporte de nouvelles commandes :
- partdump /chemin/vers/periph/bloc (par exemple partdump /dev/hda) : liste les partitions présentes sur le périphérique (disque dur) indiqué
- dd : copie simple de fichier à fichier. man dd sous Unix pour avoir son mode d'emploi, SOS ne reconnaît que les commutateurs if=, of=, bs=, count=
- spawn blktest quelques tests de lecture/écriture sur toutes les partitions de /dev/hda. Permet de tester les caches de blocs et de pages. Ecrase définitivement toutes les données présentes sur toutes les partitions du disque dur.
- les tests de l'article 9 : voir la section suivante
Pour confectionner une image de disque dur partitionnée, on se référera à l'article du Linux Magazine de Février. Ou sinon on pourra utiliser l'image compressée
extra/hd10M.img.gz présente avec les sources (après l'avoir décompressée). Pour l'utiliser avec
qemu, on utilisera l'option
-hda fichier_image -boot a. Pour l'utiliser dans bochs, on se référera au mode d'emploi donné dans l'article.
Note 1 : contrairement à ce qui est écrit dans l'article, le cache de pages d'un disque n'est pas partagé avec ses partitions. Il y a un cache de pages par disque, et un cache de page par (sous-(sous-...))partition. Ceci vient du fait que les partitions d'un disque ne commencent pas sur une frontière de pages (4ko), mais seulement sur une frontière de blocs (en général : 512 octets). Voir
ces commentaires et
http://sos.enix.org/lxr/source/sos/fs_pagecache.h#067.
Note 2 : le pilote IDE est conçu pour fonctionner avec les contrôleurs IDE simulés par bochs/qemu. Il est probable qu'il ne fonctionne pas correctement sur certaines machines PC réelles. C'est aussi pour cette raison que nous déconseillons très fortement de faire fonctionner SOS sur machine réelle.
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 9 (1er volet) : "Pilotes de périphériques caractère" (mknod, /dev/mem, /dev/zero, tty, pilotes clavier, série, écran)
Linux Magazine 79, Janvier 2006
Désormais Linux Magazine est édité sans CDROM. Vous trouverez les sources directement ci-dessous :
Code source :
sos-code-art9-lm79.tgz (md5 af8c4c1250c07f49d209ce4a61c3fbef)
[Patch] [Patch in readable Gzipped HTML format]
La démo du mois est un petit
shell accessible par le clavier et aussi
via la ligne série. Les commandes disponibles sont (voir
userland/shell.c) :
- uname (la plus importante) : affiche la version du système
- ls [repertoire a lister] : affiche le contenu du répertoire repertoire a lister ("/" par défaut)
- touch /chemin/vers/fichier : créer un fichier de taille nulle
- mkdir /chemin/vers/repertoire : créer un répertoire
- cat /chemin/vers/fichier : afficher le contenu d'un fichier
- edit /chemin/vers/fichier : modifier le contenu d'un fichier a partir du terminal (ie un peu comme cat > /chemin/vers/fichier sous Unix). Terminer la saisie en entrant une ligne vide
- test argument 1 2 3 : tester le shell
- devtest : quelques tests de mknod, /dev/mem, /dev/zero, etc. ATTENTION : ce test termine en écrivant 0xcc dans la totalité de /dev/mem c'est-à-dire qu'il explose volontairement le système, ce qui devrait se traduire à court terme par un message d'erreur ou un reboot de la machine
- fstest : les 300 tests de l'articles 8
Pour accéder au shell
via la ligne série :
- dans qemu :
- soit lancer "qemu -fda fd.img -serial vc", on accède alors au port série de SOS en allant dans la console 3 de qemu : taper Ctrl-Alt-3 pour y aller, Ctrl-Alt-1 pour en revenir
- soit lancer "qemu -fda fd.img -serial pty", repérer les premières lignes de qemu qui disent "char device redirected to /dev/pts/numéro", compiler extra/termslave (make -C extra termslave) puis faire "extra/termslave /dev/pts/numéro" dans un autre terminal. Avec qemu < 0.8.0, il est nécessaire d'appliquer ce patch à qemu.
- sur vraie machine (jamais testé) : brancher un cable null-modem et accéder à la ligne série depuis une autre machine en utilisant "extra/termslave /dev/ttyS0" (make -C extra termslave) après avoir configuré le port en 115200 bds 8N1 (en général stty speed 115200 < /dev/ttyS0 suffit)
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 8 : "Virtual File System" (read/write, mount, link/symlink and co)
http://www.linuxmag-france.org/produit.php?produit=396
Le code du présent article n'a pas été placé sur le CD-ROM du magazine. Vous trouverez les sources directement ci-dessous :
Code source :
sos-code-art8-lm74.tgz [Patch] [Patch in readable Gzipped HTML format]
Les fichiers intéressants pour cet article sont les suivants :
- sos/fs.h et sos/fs.c : décrit les éléments centraux du VFS (structures de données) ainsi que les fonctions noyau de gestion de ces élements (sos_fs_read, etc.)
- sos/fs_nscache.h et sos/fs_nscache.c : sous-module spécialisé dans la gestion de l'espace de nommage
- sos/hash.h et sos/hash.c : sous-systsème générique de gestion de tables de hâchage personnalisables
- drivers/fs_virtfs.h et drivers/fs_virtfs.c : système de fichier purement virtuel (les fichiers sont des données allouées en zone noyau) très sous-optimal (1 ré-allocation à chaque redimensionnement de "fichier")
- userland/fstest.c : environ 300 tests des fonctions du VFS
Pour se repérer dans la structure interne du VFS, nous fournissons le diagramme uml :
[PDF]
Le code intègre les modifications suggérées en Juin 2005 sur la mailing-list.
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 7 (2ème volet) : gestion de l'espace utilisateur (mmap and co, malloc utilisateur), fork, exec
Linux Magazine 72, Mai 2005
Le code du présent article n'a pas été placé sur le CD-ROM du magazine. Vous trouverez les sources directement ci-dessous :
Code source :
sos-code-art7.5-lm72.tgz [Patch] [Patch in readable Gzipped HTML format]
Code source
mis à jour :
sos-code-art7.5-pl1.tgz. Patch par rappport à la version "Linux Mag" :
[Patch] [Patch in readable HTML format].
Tient compte des modifications suivantes (voir pages
Bugs et
Contributions utilisateur) :
- corrige le bug de non-lancement des applis utilisateur avec bochs
- corrige le bug : taille de noyau trop large ne tenant pas sur la disquette
- corrige un bug grave de gestion du comptage de references sur les pages physiques dans le "driver" zero.c
- corrige quelques typos et la gestion incomplète des cas d'erreur signalés par Cyril Dupuit
- intègre la modification du secteur de boot pour déterminer la taille de la RAM de C. Goyet (permet de lancer SOS sans Grub)
Les applications utilisateur servant de démos du mois :
- init : le seul programme initial lancé par le noyau. Charge tous les programmes myprog7 à myprog14 et banner par appels à fork et exec
- myprog7 : montre qu'un mapping privé pour un processus est réellement privé. Ni père ni fils ne verront les modifications apportées par les autres. En profite pour faire de temps en temps des exec de tous les tests utilisateur de myprog1 à myprog5 (voir démos article 7 plus bas), histoire de stresser un peu le système
- myprog8 : montre qu'un mapping partagé pour un processus est réellement partagé avec ses fils. Père et fils verront les modifications apportées par les autres
- myprog9 : tests de munmap (4 configurations sont possibles)
- myprog10 : tests de mprotect (5 configurations sont possibles)
- myprog11 : tests de mremap (utilise la fonction mresize particulière à SOS)
- myprog12 : mapping de /dev/mem (affichage d'un simple message sur la console en utilisant le mapping vidéo x86) et de /dev/kmem (lecture des pages mappées du noyau, montre que le mécanisme de COW se met en marche car le mapping est privé, ce qui évite d'écrire dans le noyau quand on modifie cette zone)
- myprog13 : tests de brk et du malloc utilisateur
- myprog14 : tests des fonctions noyau de sos/uaccess.c. Montre que des fautes de pages peuvent avoir lieu quand le noyau accède à la zone utilisateur, qui peuvent être résolus normalement (COW, demand mapping, ...). Et si ces fautes de page ne sont pas résolues, le noyau ne plante pas, seule la fonction de sos/uaccess.c où la faute s'est produite retourne avec un code d'erreur
- banner : processus multithreadé. 2 threads sont créés pour afficher 2 bannières sur la console en utilisant le mapping vidéo x86 au travers d'un mapping de /dev/mem
- Les démos de l'article 7 au travers de myprog7
En plus de
bochs_write, 3 appels système temporaires sont utilisés par certains de ces programmes :
- 4012 : le noyau affiche (ioport 0xe9 bochs) le contenu d'une zone de mémoire utilisateur (façon hexdump) en utilisant les fonctions de sos/uaccess.c. Utilisé en particulier dans myprog14
- 4004 : affiche (ioport 0xe9 bochs) la liste des régions virtuelles de l'espace d'adressage courant
- 4008 : le "ps" du pauvre (affichage via ioport 0xe9 bochs)
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 7 (1er volet) : threads/applications utilisateur, changement de privilège, appels système
Linux Magazine 70, Mars 2005
Code source (version officielle Linux Mag) :
sos-code-art7-lm70.tgz [Patch] [Patch in readable HTML format]
Code source (version remise à jour) :
sos-code-art7.tgz [Patch] [Patch in readable Gzipped HTML format]
Les applications utilisateur servant de démos du mois :
- myprog1 : Affiche des messages sur la sortie de bochs (ioport 0xe9) et sort
- myprog2 : Fait une grosse boucle puis sort.
- myprog3 : Accède en écriture à une adresse non mappée en zone utilisateur. Le thread est tué
- myprog4 : Accède en lecture à une adresse non mappée en zone utilisateur. Le thread est tué
- myprog5 : Fait une boucle infinie, ne sort jamais. Permet d'augmenter la charge du système et de montrer que les threads utilisateur sont ordonnancés de façon préemptive
- myprog6 : Tente d'exécuter une instruction réservée au mode superviseur (cli). Le thread est tué
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 6 (2ème volet) : threads noyau, ordonnancement et synchronisation
http://www.linuxmag-france.org/produit.php?produit=379
Version "6.5" (ordonnancement FIFO) documentée dans l'article
Code source (version officielle Linux Mag) :
sos-code-art6.5-lm69.tgz [Patch] [Patch in readable HTML format]
Code source (version remise à jour) :
sos-code-art6.5.tgz [Patch] [Patch in readable HTML format]
Version "6.75" (ordonnancement O(1)) servant de base pour la suite
Code source (version officielle Linux Mag) :
sos-code-art6.75-lm69.tgz [Patch] [Patch in readable HTML format] (patch par rapport a la version 6.5 officielle)
Code source (version remise à jour) :
sos-code-art6.75.tgz [Patch] [Patch in readable HTML format]
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 6 (1er volet) : pile et changement de contexte
Linux Magazine 68, Janvier 2005
Suite à un problème, le code du présent article n'a pas pu être placé sur le CD-ROM du magazine. Vous trouverez les sources directement ci-dessous :
Code source (version officielle Linux Mag) :
sos-code-art6-lm68.tgz [Patch] [Patch in readable HTML format]
Code source (version remise à jour) :
sos-code-art6.tgz [Patch] [Patch in readable HTML format]
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 5 : gestion de la mémoire virtuelle du noyau
Linux Magazine 66, Novembre 2004
Code source (version officielle Linux Mag) :
sos-code-art5-lm66.tgz [Patch] [Patch in readable HTML format]
Code source (version remise à jour) :
sos-code-art5.tgz [Patch] [Patch in readable HTML format]
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 4 : gestion de la pagination
Linux Magazine 65, Octobre 2004
Code source :
sos-code-art4-lm65.tgz
Differences par rapport a l'article 3 :
[Patch] [Patch in readable HTML format]
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 3 : gestion de la mémoire physique
Linux Magazine 64, Septembre 2004
Dixit LMF 64 : "Suite à un problème, le code du présent article n'a pu être placé sur le CD-ROM du magazine. Vous trouverez les sources directement sur le site de www.ed-diamond.com ou sur le site officiel du projet SOS. Veuillez nous excuser pour ce désagrément."
Donc voici l'article disponible en ligne ci-dessous, en avance par rapport a l'habitude.
Code source :
sos-code-art3-lm64.tgz
Differences par rapport a l'article 2 :
[Patch] [Patch in readable HTML format]
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 2 : interruptions et exceptions
http://www.linuxmag-france.org/produit.php?produit=360
Code source (version officielle Linux Mag) :
sos-code-art2-lm63.tgz
Code source (version remise à jour) :
sos-code-art2.tgz
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]
Article 1 : boot
Linux Magazine 62, Juin 2004
Code source (version officielle Linux Mag) :
sos-code-art1-lm62.tgz
Code source (version remise à jour) :
sos-code-art1.tgz
Nous diffusons cet article sous forme électronique avec l'autorisation officielle de l'éditeur (Diamond Editions). En effet, les articles SOS sont la propriété de Diamond Editions, ils ne sont pas diffusés sous licence libre. En particulier, toute reproduction complète ou partielle doit faire l'objet d'une demande d'autorisation officielle à Diamond Editions (avec nous en Cc, pour notre curiosité). Texte de l'article :
[Gzipped PS] [PDF]