Aller au contenu principal

Une implémentation sur PDP-10

Bien que ce qui suit puisse être implémenté soit comme un ensemble de routines utilisateur, soit intégré au moniteur sous forme d'UUO (notre première implémentation sera la première solution), c'est la seconde version qui sera utilisée à des fins de description. Les UUO seraient :

UUOOpérandesDescription
PUTFCH, EPoser un fanion
PUTDCH, EPoser des données
PUTCH, EPoser un enregistrement
GETFDCH, EObtenir un fanion ou des données
GETCH, EObtenir un enregistrement

Dans ce qui précède, « CH » est le numéro de canal logique. L'UUO habituel OPEN ou INIT est utilisé pour ouvrir le canal. Des tampons utilisateurs au format standard sont affectés. Toutefois, l'anneau et les en-têtes de tampon seront utilisés d'une manière non standard, de sorte que le mode de données 12 est affecté à l'utilisation avec le tamponnement Network et que le bit 31 d'état de fichier doit être actif en entrée. (N'importe lequel des dispositifs DSK, DTA, MTA ou IMP peut être utilisé dans ce mode.)

Dans l'implémentation du NCP et du protocole HOST-HOST de Harvard, les tampons utilisateurs ne correspondent pas directement aux messages. En sortie, chaque tampon utilisateur sera formaté en un message ; en entrée, un message peut devenir un ou deux chargements de tampon utilisateur (des tampons de 128 mots sont utilisés afin de tirer le meilleur parti des facilités des routines de service de disque).

PUTF UUO​

Cet UUO place un fanion dans le tampon de sortie. L'adresse effective est l'emplacement d'un mot :

         XWD operation, count

Dans le cas des fanions de bloc, le compte est ignoré, car il sera calculé à partir du nombre d'octets effectivement placés dans le tampon avant la prochaine utilisation de PUTF. PUTF et PUTD inséreront automatiquement des fanions EOM à mesure que chaque tampon se remplit ; si des octets de données sont en cours de placement dans le tampon par PUTD, il insérera également un fanion EOM après avoir calculé le compte pour le fanion de bloc précédent dans le tampon, et placera un nouveau fanion de bloc du même type au début du tampon suivant, après avoir inséré un fanion SIZE indiquant la taille d'octet alors en vigueur.

PUTD UUO​

Cet UUO place des données dans le tampon de sortie. L'adresse effective est l'emplacement de l'octet de données (si la taille d'octet est inférieure à 36) ou du prochain mot de 36 bits de données à placer dans le tampon. Dans le premier cas, l'octet est supposé se trouver dans la partie de poids faible du mot adressé. Dans le second cas, le mot de données contenant les derniers bits de l'octet les contient dans la partie de poids fort du mot, et l'octet de données suivant commence un nouveau mot dans le stockage du PDP-10. Ainsi, pour une taille d'octet de 64, deux entrées dans PUTD seraient utilisées par octet transmis, la première contenant 36 bits et la seconde contenant 28 bits, justifiés à gauche. Cette stratégie permet un usage maximal des instructions de manipulation d'octets du PDP-10.

PUT UUO​

Cet UUO place tout un enregistrement logique dans le ou les tampons de sortie. L'adresse effective est celle d'un mot :

         IOWD count, location

Un UUO PUTF doit avoir été utilisé pour émettre le fanion SIZE approprié. Par la suite, chaque utilisation de PUT émettra un fanion BLOCK, [3] simulera un certain nombre d'appels à PUTD en utilisant l'IOWD pour découvrir l'emplacement et la taille de la zone de données utilisateur, puis émettra un fanion RS pour indiquer la fin d'enregistrement.

Dans le cas d'une taille d'octet inférieure à 36 bits, PUT utilisera l'instruction ILDB pour prélever les octets à émettre par PUTD. Par conséquent, le format standard de manipulation d'octets du PDP-10 est utilisé, et la partie de comptage de l'IOWD est le nombre total d'octets, et non le nombre de mots.

Les UUO ci-dessus ont à la fois un retour d'erreur et un retour normal.

GETFD UUO​

La séquence d'appel de cet UUO est :

         GETFD CH, E
error return
whyte flag return
block flag return
data return

L'adresse effective est l'emplacement auquel le fanion ou les données seront renvoyés. Le fanion est renvoyé dans le même format que pour PUTF et les données dans le même format que pour PUTD. Certains fanions (NUL, IGNORE et EOM) seront traités entièrement à l'intérieur de l'UUO et ne seront pas signalés à l'utilisateur. SYS devrait à terme être traité de cette façon, mais sera initialement traité par l'utilisateur.

GET UUO​

La séquence d'appel de cet UUO est :

         GET CH, E
error return
end of file return
end of group return
normal return

GET transmet l'enregistrement logique suivant à l'utilisateur, en utilisant GETFD conjointement avec un IOWD dans le même format que pour PUT. Si le compte de l'IOWD s'épuise avant la fin de l'enregistrement, le reste de l'enregistrement sera ignoré. Dans tous les cas, l'IOWD mis à jour sera renvoyé à l'adresse effective de l'UUO afin d'informer l'utilisateur de la quantité de données transmise ou ignorée.