[Kos-misc] Re: Informations sur KOS
Thomas Petazzoni
thomas.petazzoni@enix.org
Thu, 16 Jan 2003 15:41:33 +0100
Jean-Philippe Durot <Jean-Philippe.Durot@etu.univ-savoie.fr> writes:
Bonjour,
> Nous somme étudiants en licence informatique et dans le
> cadre de nos études nous devons faire un exposé sur un
> système d'exploitation. Nous avons choisi KOS mais nous
> aurions besoin de quelques renseignements que nous n'avons
> pas trouvé sur le site.
Comment avez-vous connu KOS ? Ca fait plaisir de voir que des
personnes s'interessent a ce projet ;-) Si vous pouviez m'envoyer,
apres votre expose les documents que vous avez ecrits, ce serait tres
sympathique.
> - Qu'est ce que le reverse mapping et l'identity mapping ?
Pour répondre à ces deux questions, je vais supposer que vous
connaissez comment fonctionne le mécanisme de pagination (qui permet
de créer une représentation virtuelle de la mémoire, en association
des pages virtuelles à des pages physiques en utilisant des tables de
pages et des repertoires de pages).
La pagination permet donc d'avoir une relation directe entre une page
virtuelle et une page physique. Toutefois, a partir d'une page
physique, on ne peut pas retrouver simplement grace au mecanisme de
pagination la (ou les) page(s) virtuelle(s)
correspondante(s). Pourtant, dès que l'on essaie de swapper des pages
physiques, on doit les marquer comme non présentes dans les tables de
pages et répertoires de pages, et ce pour chaque page virtuelle
pointant sur la page physique que l'on souhaite swapper. Le reverse
mapping propose donc de maintenir pour chaque page physique, la liste
des mappings virtuels.
La liste des mappings virtuels est maintenue donc dans chaque page
physique (representée par la structure gpfme,
modules/pmm/pmm.h). Chaque élément de la liste est de la forme
(structure définie dans modules/arch/mm/mm.h).
typedef struct mapping_s
{
k_ui32_t index_team :10;
k_ui32_t index_pde :10;
k_ui32_t index_pte :10;
k_ui32_t is_pt :1;
k_ui32_t unused :1;
struct mapping_s *next;
} mapping_t;
On maintient donc pour chaque mapping, l'index de la team (espace
d'adressage) correspondant, l'index dans le PD (repertoire de pages),
l'index dans le PT (table de pages), ainsi qu'une information
permettant de savoir si la page physique contient ou non un PT.
L'identity mapping n'est presque pas utilise dans KOS. Un identity
mapping est simplement construit par le loader pour son fonctionnement
interne, puis detruit par la fonction remove_identity_mapping
(modules/init/_bootstrap.c). L'identity mapping consiste a mapper à
l'identique les pages virtuelles sur les pages physiques.
Ainsi l'adresse virtuelle 0 correspondra à l'adresse physique 0,
l'adresse virtuelle 0x1000 à l'adresse physique 0x1000,
etc... L'identity mapping est bien entendu réalisable dans la limite
de la quantité de RAM présente sur la machine.
> - Comment se passe la gestion des fichiers ?
Vous touchez la à un point sur lequel nous travaillons
actuellement.
Je vais essayer d'expliquer assez simplement comment cela
fonctionne. Nous souhaitions, dans KOS, disposer d'un moyen plus
souple que les ioctl() Unix pour etendre les possibilites des
drivers. Nous avons donc decide de realiser Babel, qui permet aux
drivers de s'enregistrer et de proposer d'une part des méthodes pour
le noyau, et d'autre part des méthodes pour l'utilisateur.
Babel se charge aussi de la gestion de l'espace de nommage
(modules/babel/tower/_tower_namespace.c), en redirigeant vers le bon
driver l'appel recu. Par exemple si l'on souhaite lire /home/toto et
que /home est une partition FAT, c'est la methode read() du driver FAT
qui sera appelee. C'est donc bien Babel qui centralise tous les appels
lies a l'espace de nommage.
Toutefois, Babel n'etait qu'un prototype, que nous allons remplacer
par le Kares (Kos Abstraction and Resource Export Services), qui
permettra d'écrire les drivers en C++, et de manière plus souple. Il
comblera aussi différents manques que nous avons pu rencontrer dans
l'utilisation de Babel.
Pour résumer, on peut dire que pour le moment, le driver FAT
fonctionne avec Babel, mais cela n'est que temporaire.
Je ne sais pas ce que doit contenir votre expose exactement, mais je
pense que notre travail sur Babel/Kares et sur les facons d'exporter
les methodes noyau vers l'utilisateur est une des parties les plus
interessantes de KOS, meme si elle n'est pas terminee pour le moment.
> Pourriez-vous nous répondre avant mardi, date à laquelle
> nous présenterons cet exposé.
Mail recu a 15:19, repondu a 15:40 ;-)
Si vous avez d'autres questions, n'hesitez pas a me contacter par
mail, ou a me rejoindre sur IRC (irc.freenode.net, #kosdev).
Enfin, sachez que j'ai realise en juillet 2002 une presentation de KOS
aux LSM, et que je peux vous faire parvenir les slides si ceux-ci vous
interessent.
Bonne journee,
Thomas
--
PETAZZONI Thomas - thomas.petazzoni@enix.org - UIN : 34937744
(Perso) http://www.enix.org/~thomas/
(KOS) http://kos.enix.org/
(Club LinUT) http://club-linut.enix.org