Projet commencé en 1981 a l'Université de Vrije (Pays-Bas).
But du projet = OS distribué pour le calcul parallèle (plusieurs processeurs) et distribué.
L'utilisateur se logge, édite des programme, les compile, lit son mail, etc.
Ces actions font intervenir différentes machines.
L'utilisateur ne le voit pas.
Un utilisateur ne se logge pas sur une machine particulière, mais au système entier.
Il n'y a pas de "home machine".
Le shell s'exécute sur une machine quelconque.
Les commandes s'exécutent sur des machines quelconques (en général différente de celle du shell).
le système recherche à chaque fois la
machine la moins chargée.
Amoeba est très "location
transparent".
Exemple de commande : amake (amoeba's make).
C'est le système qui détermine les compilations qui peuvent s'exécuter en parallèle ou en série et sur quelle(s) machine(s).
Un langage spécifique qui tient compte du parallélisme et de la distribution a été créé : Orca.
Ce sont des cartes avec une connexion réseau.
Pas d'écran, de clavier ou de souris et partage de la même source d'énergie.
Si on a pas de pool de processeurs, on peut utiliser un pool de stations, éventuellement délocalisées.
On accède à Amoeba à travers un terminal X banalisé.
Notion de threads : x threads dans 1 processus = 1 seul espace d'adressage.
Gestion basique de la mémoire : les threads peuvent allouer et libérer des segments de mémoire.
Gestion des communications : paradigme client / serveur et diffusion. Le protocole de communication est FLIP.
Gestion des E/S : pour chaque chaque périphérique est associé un pilote (driver) dans le noyau.
Minimiser la taille du kernel.
Accroître la flexibilité :
changer un serveur ou une version de serveur est facile.
On peut avoir en même temps plusieurs versions différentes pour des utilisateurs différents.
Au coeur de Amoeba = notion d' objet.
Données encapsulées + Opérations.
Un processus crée un objet le serveur qui
gère cela retourne une capacité ( capability) protégée par
cryptage.
Touts les objets du système (objets physiques ou logiques) sont : nommés, protégés et gérés par des capabilities.
Exemple : fichiers, directories, segments mémoire, fenêtres, processeurs, disques, etc.
Interface uniforme généricité et
simplicité.
Une fois créé, un fichier ne peut pas être modifié.
Moins de problèmes de cohérence des
données.
Duplication facilitée.
Il y a le directory server qui gère les directories et le replication server.
L'utilisateur est libre d'utiliser les serveurs d'origine ou de créer ses propres serveurs.
Adresse des objets non-importante (même machine ou a l'autre bout du pays, ...).
Capacité =
Un client veut faire une opération :
La capability est renvoyé au client avec tous les droits ON.
Si le client veut utiliser lui-seul l'objet, il resttreint les droits.
Quand le serveur reçoit une capability
XOR avec les nouveaux droits
fonction
one-way.
y = f(x) avec x facile de trouver y. Avec y, parcours exhaustif de toutes les valeurs possibles de x.
Différent de Unix (pas de duplication du processus père).
Process descriptor : contient par exemple :
Prend en paramètre le descripteur de processus + capability du serveur.