IV. Le NCP
Nous considérons que le NCP comporte cinq programmes composants, trois tables associatives, quelques files d'attente et tampons, et une table d'attribution des liens. Chaque site adaptera bien entendu cette conception à ses besoins ; notre conception n'est donc qu'illustrative.
Les programmes composants
1. Le gestionnaire d'entrée
Il s'agit d'une routine d'entrée pilotée par interruptions. Elle lance la transmission Imp-Host vers un tampon résident et réveille l'interpréteur d'entrée lorsque la transmission est terminée.
2. Le gestionnaire de sortie
Il s'agit d'une routine de sortie pilotée par interruptions. Elle lance la transmission Host-Imp depuis un tampon résident et réveille l'ordonnanceur de sortie lorsque la transmission est terminée.
3. L'interpréteur d'entrée
Ce programme détermine si l'entrée est un message ordinaire destiné à un utilisateur, un message de contrôle, un message Imp-Host ou une erreur. Pour chaque classe de message, ce programme entreprend l'action appropriée.
4. L'ordonnanceur de sortie
Trois classes de messages sont envoyées à l'Imp
-
Messages Host-Imp
-
Messages de contrôle
-
Messages ordinaires
Nous pensons qu'une priorité doit être imposée entre ces classes. La priorité que nous suggérons est l'ordre ci-dessus. L'ordonnanceur de sortie sélectionne le message de plus haute priorité et le remet au gestionnaire de sortie.
5. L'interpréteur d'appels système
Ce programme interprète les requêtes de l'utilisateur.
Les deux composants intéressants sont l'interpréteur d'entrée et l'interpréteur d'appels système. Ils se ressemblent en ce que l'interpréteur d'entrée traite les requêtes étrangères et l'interpréteur d'appels système traite les requêtes locales.
Tables associatives
Nous envisageons que l'essentiel de la base de données du NCP réside dans trois tables associatives. Par « associative », nous entendons qu'il existe une routine de recherche à laquelle on présente une clé et qui soit renvoie avec succès un pointeur vers l'entrée correspondante, soit échoue si aucune entrée ne correspond à la clé.
1. La table de rendez-vous
Les « demandes de connexion » et les autres attributs d'une connexion sont conservés dans cette table. On accède à cette table par le socket local, mais d'autres tables contiennent des pointeurs vers les entrées existantes.
Les composants d'une entrée sont :
-
socket local (clé)
-
socket étranger
-
lien
-
file des appelants
-
file de texte
-
état de la connexion
-
état du flux
-
pointeur vers le port rattaché
Une entrée est créée lorsqu'un utilisateur exécute un appel système Init ou Listen, ou lorsqu'un <RFC> est reçu. Certains champs restent inutilisés jusqu'à l'établissement de la connexion ; par exemple, le socket étranger n'est pas connu avant l'arrivée d'un <RFC> si l'utilisateur a fait un Listen.
2. La table des liens d'entrée
L'interpréteur d'entrée utilise le host étranger et le lien comme clé pour obtenir un pointeur vers l'entrée de la table de rendez-vous correspondant à la connexion qui utilise le lien entrant.
3. La table des liens de sortie
Pour interpréter les RFNM, l'interpréteur d'entrée a besoin d'une table de même forme que la table des liens d'entrée, mais portant sur les liens sortants.
Table d'attribution des liens
Il s'agit d'une structure très simple qui garde trace des liens utilisés pour chaque host. Un mot par host suffit probablement.
Le diagramme suivant représente notre conception du programme de contrôle du réseau. Les rectangles représentent les tables et les tampons, les rectangles à coins biseautés et à double fond représentent les files d'attente, et les rectangles dentelés représentent les programmes composants ; les flèches représentent les chemins de données.
Les noms abrégés ont les significations suivantes.
-
ILT: Table des liens d'entrée
-
OLT: Table des liens de sortie
-
LAT: Table d'attribution des liens
-
RT: Table de rendez-vous
-
HIQ: File d'attente Host-Imp
-
OCCQ: File d'attente des commandes de contrôle en sortie
-
ORMQ: File d'attente des messages ordinaires en sortie
-
IHBuf: Tampon rempli par le gestionnaire d'entrée à partir de l'IMP et vidé par l'interpréteur d'entrée
-
OHBuf: Tampon des messages sortants, rempli à partir des files d'attente par l'ordonnanceur de sortie et vidé par le gestionnaire de sortie.
+---------+
| I M P |
+---------+
v ^
| |
+---------------------------|-----|------------------------------+
| | | |
| /\/\/\/\/\/\/\ | | /\/\/\/\/\/\/\ |
| \ / <--------+ +---< \ / |
| / Input \ / Output \ |
| \ Handler / \ Handler / <----+ |
| / \ >------+ / \ | |
| \/\/\/\/\/\/\/ | \/\/\/\/\/\/\/ ^ |
| v +-----+ |
| +-----+ | OH | |
| | IM | | Buf | |
| | Buf | +-----+ |
| +-----+ /\/\/\/\/\/\/\/\ ^ |
| /\/\/\/\/\/\/\/\ v +----> \ / | |
| \ / | | / Output \ >--+ |
| / \ <------+ ^ \ / |
| \ Input / /-----\ / Scheduler \ |
| / \ >-------->| HIQ | \ / |
| \ Interpreter / |_____| / \ |
| / \ >----+ \_____/ \/\/\/\/\/\/\/\/ |
| \/\/\/\/\/\/\/\/ | ^ v ^ |
| ^ ^ ^ \ | /-----\ | | | /-----\ |
| | \ \ \ | | O | | | | | O | |
| | \ \ \ +--->| C |>----+ | +---<| R | |
| v v v \ | C | | | M | |
| +---+ +---+ +---+ \ | Q | v | Q | |
| | | | | | | \ |_____| +---------+ |_____| |
| |ILT| |LAT| |OLT| \ \_____/ | | \_____/ |
| | | | | | | \ ^ | R T | ^ |
| +---+ +---+ +---+ +------|-------->| | | |
| v | +---------+ | |
| | ^ ^ | |
| | /\/\/\/\/\/\/\/\ | | |
| | \ / | | |
| +----------->/ System \<-------+ | |
| \ Call / | |
| / Interpreter \>--------------------+ |
| \ / |
| +-->/ \>--+ |
| | \/\/\/\/\/\/\/\/ | |
+------------------|----------------------|----------------------+
| |
+---< system calls <---+
Note : Ce RFC a été mis sous forme lisible par machine pour être intégré aux archives RFC en ligne par Donald et Jill Eastlake en 1999.
[Note de l'éditeur : le diagramme original, dessiné à la main, représentait les files d'attente par des cylindres et les programmes composants par des « choses molles ressemblant à des amibes ».]