BabelOS (was Re: [Kos-dev] developpement de babel... abstraction (suite))

d2 kos-dev@enix.org
13 Jul 2001 13:22:41 +0200


Bonjour,

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@ifrance.com> writes:
    Thomas> C'est effectivement une chose a preciser : que veut-on que
    Thomas> soit Babel ?  Si on veut que ce soit un ORB generique,
    Thomas> alors il faudra un Babel-light (aka BabelOS) pour le
    Thomas> noyau.

Babel => moyen de representer des interfaces (liste de methodes) +
repertoire d'interface pour retrouver ces methodes + liste des
instances de ces interfaces.

Babel est donc un mecanisme de gestion d'objets. Se limite a implanter
2 choses : le repertoire d'interfaces, et le root_interface.

BabelOS => propose les interfaces Babel de base necessaires a la
gestion OS : exporte les 2 interfaces Babel de base (au dessus de
root_interface) utiles pour la passrelle cpl3-cpl0 (sous forme
d'invocation de methode). Se situe "au dessus" de Babel.

En gros, Babel est une architecture, et BabelOS est une API Babel pour
faire de l'OS.

    Thomas> Boah la, je crois qu'il faut pas trop s'embeter : chaque
    Thomas> driver doit pouvoir par un moyen ou par un autre dire
    Thomas> explicitement quelles methodes il veut "exporter". Ou plus
    Thomas> exactement, on a une interface, et seules les methodes
    Thomas> explicitement citees dans l'interface sont enregistrees
    Thomas> dans Babel. Donc point de vue securite, on peut imaginer
    Thomas> avoir des fonctions internes au driver sans aucun
    Thomas> probleme.

Ok, ca c'est pour le driver. Ca colle bien a Babel. Mais un driver
gere des ressources qui lui sont associees. Pour ces ressources, on a
besoin d'une interface Babel : l'"arborescence de ressources".

L'ensemble :
   classes de services (Interface Babel) + services (driver lie a une
   interface = instance Babel d'une classe de services) + arborescence
   de ressources (instances d'une interface ressource)

=> Constitue les 2 types Babel definis dans l'API BabelOS.

    Thomas> J'avoue que je ne vois pas bien quelles peuvent etre ces
    Thomas> variables privees d'interface. Le probleme avec ces
    Thomas> histoires de variables privees, c'est que deja on fixe une
    Thomas> interface comme contenant quelque chose. Or pour moi une
    Thomas> interface, c'est uniquement une liste de methodes.  Ceci
    Thomas> etant dit, si vous pensez qu'il y a besoin de telles
    Thomas> variables privees, vous devez avoir une bonne raison. Un
    Thomas> exemple concret ?

Une interface, vue de l'exterieur, ce n'est qu'une liste de
methodes. Mais ces methodes, elles peuvent agir sur 2 choses :
  - l'instance sur lesquelles elles sont invoquees => variables d'instances
  - l'interface de l'instance => variables d'interface, partagees par
    toutes les instances de l'interface

Des exemples ? Une variable d'interface, ca peut servir a maintenir un
compteur de references = nombre d'instances de l'interface. Ca peut
servir a dire qu'on n'a max 1 seule instance par interface, et a y
acceder (tres utilise en Java avec les fenetres par exemple, pour etre
sur de ne pas relancer des fenetres deja visibles).

    Thomas> c'est un peu vague de dire identification des ressources
    Thomas> non ? Je prefere la terminologie de Julien qui consiste a
    Thomas> dire "numero de methode".

Non.

  + methode = element d'une interface => niveau architecture Babel

  + ressource = entite (instance Babel) geree par un service (driver)
    = methodes+donnees => entite de l'API BabelOS

    Thomas> J'avoue que je vois pas bien qu'est-ce que cela change par
    Thomas> rapport a du Babel "normal".

Babel, ca definit une approche objet generique (repertoire
d'interfaces, lookup pour appel de methodes). BabelOS, c'est la boite
a outils des objets Babel necessaires a la passerelle cpl3-cpl0 dans
un OS.

On se situe a 2 niveaux differents. Un driver est un objet Babel,
l'arborescence des ressources d'un driver est une serie d'autres
objets Babel. Ces 2 entites Babel definissent BabelOS.

    Thomas> vous auriez pas encore plus complique ? Non, plus
    Thomas> serieusement, je vous rappelle que nous ne voulons pas
    Thomas> placer un ORB dans le noyau. Notre objectif initial est de
    Thomas> trouver un moyen clair et propre d'eviter le ioctl, et
    Thomas> d'organiser l'exportation des fonctions du noyau vers le
    Thomas> CPL3.

C'est pour ca que j'essaye de nous ramener au niveau de nos
besoins. C'est pour ca que j'ai parle de BabelOS. Comme ca, pour
definir Babel, on garde a l'esprit les besoins qu'on a reellement dans
BabelOS. Ca evitera de trop meta-meta-meta-iser Babel en se disant que
"tel mega truc de la mort generique servira peut-etre". On devra se
limiter en priorite aux besoins de BabelOS, et pas chercher a aller
plus loin dans un premier temps. Tout ca pour eviter que Babel ne se
transforme en CORBA bis.

    Thomas> C'est pour cela que tu proposes d'avoir deux choses : un
    Thomas> arbre des ressources d'une part, et une liste de services
    Thomas> d'autre part. Chaque noeud de l'arbre des ressources etant
    Thomas> lie a un service par une sorte de translator.

Pas tout a fait : pour chaque service, on a un arbre des ressources
associees. L'arbre des ressources n'est pas global au systeme : il
depend (est lie a) chaque service. Ca constitue l'espace de nommage au
sein de chaque service.

    Thomas> On pourrait citer klavier qui est un sous driver du driver
    Thomas> i8042. Le driver de CD SCSI est un sous driver du driver
    Thomas> carte SCSI, lui meme un sous driver du PCI.

Ce n'est pas une relation de "possede un ou plusieurs" comme dans une
arborescence (une ressource possede 1 ou plusieurs sous-ressources),
puisque les 2 drivers ne sont pas homogenes (pas la meme
interface). Par contre, c'est une relation de "utilise les services
de". Ca peut etre represente par une donnee speciale dans le driver.

    Thomas> Encore que ce soit discutable. Il est vrai que vouloir
    Thomas> absolument arborescencer (verbe transitif direct, "Classer
    Thomas> sous forme d'arborescence", Robert edition 13/07/2001) les
    Thomas> drivers est un peu stupide. Ce n'est pas un classement
    Thomas> naturel, comme celui des ressources.  Ca ferait un peu
    Thomas> force, et souvent nous ne saurions pas trop comment
    Thomas> arborescencer ces drivers.

Je pense la meme chose, mais je suis pas sur de l'absence de
contre-exemple. Mon meilleur argument est l'absence d'homogeneite dans
les drivers : j'imagine pas un sous-driver qui utilise la meme
interface qu'un driver (sur-driver) en rajoutant 1 ou 2 autres
methodes. Bref, j'imagine pas trop d'heritage avec ajout de methodes
entre implantations de drivers. J'imagine bien 2 drivers differents
qui ont un ensemble de methodes communes : c'est le principe d'avoir
plusieurs services differents par classe de services. Mais j'imagine
pas un service B sous-service d'un service A.

    Thomas> je crois que julien avait plutot interface = classe
    Thomas> instance = objet Avec interface != instance.

Il faudrait creuser ce point. Ca me parait important.

    >> htdocs/index.html est un objet *sur lequel* on peut invoquer la
    >> methode GET : c'est une _ressource_ sur laquelle la *methode*
    >> GET, *implantee* dans le _service_ 'http' et *definie* dans la
    >> _classe de service_ 'web', peut etre invoquee.

    Thomas> Julien voit donc protocols->http->get(file)

    Thomas> et David voit
    file-> get()

Moi je vois plutot :
  file->get_parent_service(file)->get();

    Thomas> Question a David : pourquoi ton file serait plus lie au
    Thomas> protocole HTTP qu'au protocole FTP. Je peux tres bien
    Thomas> HTTPise ce fichier ou le FTPise, ou le DCCise. Alors
    Thomas> j'aurais autant de liens a partir de ce fichier, que de
    Thomas> protocoles applicables a ce fichier ?

j'aurais 2 ressources differentes (c'est le cas en pratique) :
    :web:http:/path_www/file
    :web:ftp:/path_ftp/file
(ou :net: d'ailleurs a la place de :web:)

    Thomas> Voui, et je suis chiant, il faudrait aussi s'orienter vers
    Thomas> le coding.  Parce que Babel est un gros morceau, et
    Thomas> j'aimerais pas qu'on se retrouve bloque par quelque chose
    Thomas> que nous avons prevu autant de temps a l'avance, ce serait
    Thomas> bete.

D'accord. Au programmes des prochaines rencontres kossiennes ?

Bonne journee,

-- 
d2