PETITE SYNTHÈSE

A L'INTENTION DE CEUX

QUI N'ONT PAS CONNU

LE GAMMA 60

Retour

Le but de ce papier est de permettre à ceux qui n'ont pas vécu l'aventure du Gamma 60 de se faire, en quelques pages, une idée de ce qu'était cette machine, un peu mythique dans l'histoire de la Compagnie.

INTRODUCTION

Avant de décrire le Gamma 60 proprement dit, et pour comprendre l'importance du saut qualitatif que représentait l'introduction de cette machine sur le marché, il est nécessaire de présenter celles qui l'avaient précédé (nous nous bornerons aux matériels de la Compagnie des Machines Bull).

La Famille Gamma 3

Après les machines purement électromécaniques, dites "classiques" (tabulatrice, etc...), Bull introduisit en 1953 le Gamma 3, premier calculateur électronique de la Compagnie. Le Gamma 3 était connecté à une machine classique (en général une tabulatrice, qui faisait office à la fois de lecteur de carte, éventuellement de perforateur de carte, et d'imprimante). Celle-ci ayant, au cours d'un cycle mécanique, exécuté ses propres calculs grâce à ses organes électro-mécaniques, il restait un "entre-cycle" de 40 millisecondes qui était mis à profit par le Gamma 3 pour exécuter, grâce à sa vitesse électronique, des calculs beaucoup plus complexes. Mais le Gamma 3 était "asservi" à la tabulatrice et ne la commandait pas.

Le Gamma 3 était une machine dite "de Turing", c'est-à-dire une machine à programme câblé, donc un programme ne pouvant pas évoluer lors de son exécution. Le programme était affiché sur un tableau de connexions comportant au maximum 64 "pas de programme" ou instructions. Ce programme agissait sur 7 mémoires de 12 chiffres décimaux, en plus de la "mémoire-opérateur" ou accumulateur. Il faut noter que ces "mots" de 12 chiffres pouvaient être découpés en plusieurs opérandes, ce qui représentait un avantage significatif sur la concurrence.

Le Gamma 3 connut un très grand succès qui contribua largement au développement de la Compagnie des Machines Bull.

En 1957, Bull introduisit le Gamma A.E.T (Armoire Extension Tambour), dans lequel on "greffait" sur la Machine de Turing constituée par le Gamma 3, une machine dite "de Von Neuman". A l'inverse de la Machine de Turing dans laquelle un programme donné est câblé une fois pour toutes (on change de programme en changeant de tableau de connexions), dans la Machine Von Neuman le programme est enregistré en mémoire, donc susceptible d'être modifié. En particulier, on peut faire progresser les adresses des opérandes et ainsi exécuter la même opération sur un grand nombre d'opérandes successifs rangés à la suite en mémoire. Malheureusement, le Gamma A.E.T utilisant les instructions du Gamma 3 dans lesquelles on ne pouvait citer des numéros de mémoires que de 0 à 7, la progression d'adresses était rendue extrêmement compliquée, car il fallait sans cesse commuter des groupes de 8 mémoires, ce qui était source d'erreurs de programmation. Le Gamma A.E.T comportait 8 groupes de 8 mémoires, en plus des 8 mémoires Gamma 3. En plus de ces 72 mémoires, dites "rapides" (temps d'accès de 172 microsecondes), le Gamma A.E.T comportait un tambour magnétique de 8192 mots de 12 chiffres, dont le temps d'accès moyen était d'environ 12 millisecondes.

Le tableau de connection du Gamma 3 continuait d'être utilisé pour stocker des sous-programmes câblés, en particulier le P.D.F (Point Décimal Flottant - Floating Point - pour la gestion des nombres dans les calculs scientifiques).

Le Gamma A.E.T restait asservi à la machine classique (tabulatrice ou P.R.D - Perforatrice Reproductrice Duplicatrice-) à laquelle il était connecté.

En 1959, Bull lançait l'E.T Ordonnateur qui inversait les rôles et dans lequel c'étaient désormais les machines connectées qui étaient asservies à l'organe de calcul électronique.

La Rupture

Dès 1957, les ingénieurs de la Compagnie décidèrent de s'affranchir des contraintes du passé et de faire table rase de tout ce qui existait en concevant une machine entièrement nouvelle et extrêmement ambitieuse, mettant à profit les avancées technologiques que constituaient la découverte des transistors, celle des mémoires à tores magnétiques et celle des rubans magnétiques. Ce serait le Gamma 60, commercialisé à partir de 1960.

Le Gamma 60 introduisait une mémoire centrale de grande capacité (jusqu'à 32768 mots de 24 chiffres binaires, ou "bits") sous forme de tores magnétiques d'accès rapide (10 microsecondes), adressable sans discontinuité de 0 à 32767. (On renoncera plus tard à cette linéarité intégrale de l'adressage, d'abord en réduisant la linéarité à 1 "partition" pour chaque programme, puis à n "segments" d'instructions et de données par programme, et ceci pour des raisons de protection des programmes, ou des sections de programme, vis-à-vis les uns des autres).

En plus d'une grande capacité d'adressage en mémoire centrale, le Gamma 60 possédait un grand nombre de périphériques et de supports de mémoire secondaire :

- plusieurs lecteurs-perforateurs de carte

- plusieurs lecteurs de bande perforée

- plusieurs perforateurs de bande

- un grand nombre d'imprimantes

- un grand nombre de dérouleurs de ruban magnétique

- plusieurs tambours magnétiques

tous fonctionnant sous le contrôle de l'Unité Centrale, ce qui justifiait le nom de "Cerveau Électronique" que l'on donnait alors volontiers à une telle installation.

L'opérateur commandait cet ensemble au moyen d'un pupitre de commande et de contrôle comportant une machine à écrire et un lecteur de bande perforée, et un jeu de commutateurs.

Le traitement d'information proprement dit était réalisé non pas par un processeur unique comme il est d'usage habituellement, mais par quatre processeurs centraux spécialisés travaillant en simultanéité les uns vis-à-vis des autres et en simultanéité avec les éléments périphériques :

- un Calculateur Arithmétique

- un Calculateur Logique

- un Comparateur Général

- un Traducteur

Le Gamma 60 introduisait, avant même que les termes n'apparaissent dans le langage, les concepts de multiprogrammation (en anglais multi-programming: exécution en parallèle de plusieurs programmes indépendants) et de multi-traitement (en anglais multi-processing: exécution simultanée de plusieurs séquences de programme à l'intérieur du même programme).

Le Gamma 60 constituait donc, avec ses simultanéités de traitement d'un grand nombre de programmes indépendants et ses nombreux organes périphériques travaillant en parallèle, une véritable "Usine à traiter l'information", sans commune mesure avec les matériels précédents de la Compagnie et sans équivalent chez les concurrents, même si les gros ordinateurs d'IBM étaient, en puissance de calcul pure, supérieurs (les processeurs centraux du Gamma 60 étaient relativement lents).

Il peut être intéressant d'évaluer, au regard des matériels actuels, ce que représentaient les premiers ordinateurs :

- Le Gamma 3 est comparable, du point de vue de la puissance de calcul, à une calculette scientifique programmable de bas de gamme : quelques mémoires, quelques dizaines de pas de programme (mais les calculettes actuelles possèdent des fonctions élaborées telles que les fonctions trigonométriques, logarithme, etc...; que ne possédait pas le Gamma 3, alors que ce dernier possédait des organes d'entrée-sortie dont sont dépourvues les calculettes).

- le Gamma A.E.T est comparable, toujours du point de vue puissance de calcul, à une calculette scientifique haut de gamme.

- le Gamma 60 est comparable, du point de vue processeur, à un microprocesseur de la première génération. Toutefois, du point de vue de sa capacité de connection de périphériques, il soutient la comparaison avec les plus puissants mainframes lui ayant succédé, sauf évidemment en ce qui concerne les disques magnétiques et les lignes de transmission de données, dont il était dépourvu.

ARCHITECTURE DU GAMMA 60

Le Gamma 60 sera ci-après défini autant par ce qu'il n'était pas ou ne possédait pas, au regard des critères modernes de caractérisation des architectures, que par ce qu'il était ou possédait.

Une des grandes ambitions du Gamma 60 était l'exécution simultanée d'un nombre théoriquement non limité d'applications n'ayant pas de rapport entre elles, telles qu'un programme de paie et un programme de calcul scientifique.

Or, paradoxalement, le concept de processus (au sens GCOS7, pas UNIX) n'est pas formalisé, même s'il est sous-jacent du fait des nombreuses simultanéités d'exécution de programme. En fait, s'il existe une "macro-simultanéité" d'exécution des "Unités de Traitement" (une Unité de Traitement est, en gros, une phase d'une application), simultanéité commandée et contrôlée par l'Operating System, il peut exister à l'intérieur de chaque Unité de Traitement une "micro-simultanéité" explicitement commandée et contrôlée par le programmeur. Cette simultanéité concerne l'exécution de séquences d'instruction, et non pas, comme dans GCOS7, l'enchaînement de séquences de procédures. Il aurait été difficile d'associer un "Process Control Block" a chacune des séquences élémentaires s'exécutant en simultanéité.

La plus grande originalité du Gamma 60 réside dans l'existence de plusieurs "Éléments Centraux" qui travaillent indépendamment les uns des autres et se partagent l'exécution d'une tâche normalement dévolue à un processeur principal. En fait ils se comportent comme les processeurs d'entrée-sortie que nous connaissons aujourd'hui et qui ont chacun leur programme local. Ces Éléments Centraux sont au nombre de quatre :

- Calculateur Arithmétique

- Calculateur Logique

- Comparateur Général

- Traducteur

En plus de ces Éléments Centraux, il y a des Éléments Périphériques :

- Tambour Magnétique (jusqu'à 4 unités)

- Contrôleur de Ruban Magnétique dénommé "Unisélecteur" (jusqu'à 10 unités), l'ensemble contrôlant jusqu'à 48 Dérouleurs de Ruban

- Lecteur-perforateur de carte (jusqu'à 4 unités)

- Lecteur de bande perforée (jusqu'à 4 unités)

- Perforateur de bande perforée (jusqu'à 4 unités)

- Imprimante (jusqu'à 8 unités)

L'ensemble est commandé par le pupitre de commande et de contrôle.

UNITÉ CENTRALE

Mémoire Centrale

La mémoire centrale peut comporter jusqu'à 32.768 "catènes". Un catène est un mot de 24 bits qui peut représenter soit 6 chiffres en décimal codé binaire, soit 4 caractères alpha-numériques, soit une instruction de programme.

Distributeur de Transferts

Il a pour but de gérer les transferts, via un bus collecteur et un bus distributeur, entre la mémoire centrale et les différents éléments, centraux ou périphériques, selon une priorité pré-établie, dépendant de la nature de l'élément demandeur, et non fixée par le programmeur ou l'exploitant. Ainsi, le tambour magnétique demandant le transfert d'un catène aura priorité sur le Calculateur arithmétique, pour la simple raison que, si sa demande n'était pas satisfaite, il pourrait perdre un tour de tambour.

Distributeur de Programme

Il reconnaît les instructions de "COUPURE", qui activent chaque élément central ou périphérique et indiquent que les instructions suivantes, jusqu'à la prochaine COUPURE, concernent cet élément.

Il alimente, en faisant appel au distributeur de transferts, et à la demande des différents éléments, les instructions qui constituent le programme local de chaque élément. De plus il exécute un certain nombre d'instructions simples, les "instructions centrales" (garnissage ou incrémentation/décrémentation de registres d'adresse, branchements conditionnels ou systématiques, etc...).

Il gère également les "chaînes de reprise", c'est-à-dire les structures de liste représentant les files d'attente des différents programmes s'exécutant en simultanéité, files d'attente sur élément central ou périphérique, ou sur le distributeur de programme lui-même.

STRUCTURATION DES PROGRAMMES

Instruction de COUPURE

Chaque programme élémentaire est divisé en séquences par des "Instructions de COUPURE". Une Coupure cite le nom d'un élément (ARIT pour Calculateur Arithmétique, LOGI pour Calculateur Logique, COMP pour Comparateur Général, TRAD pour Traducteur, TAMB pour Tambour Magnétique, etc...). L'ensemble des instructions suivant une Coupure, et jusqu'à la Coupure suivante constitue le programme local de l'élément. Ce programme comporte a la fois des "Directives" de l'élément, et des "Directives Centrales" qui sont immédiatement exécutées par le distributeur de programme. Quand l'élément a reçu sa dernière Directive, une "Directive d'Exécution", il se met au travail de façon autonome et libère le distributeur de programme qui peut alors travailler pour le compte d'un autre élément.

Simultanéité programmée

Un autre élément de la structuration des programmes est la simultanéité programmée par instruction SIMU qui peut être assimilée à une Coupure. Une instruction SIMU cite l'adresse d'une instruction ("branche extraordinaire") qui est forcément une Coupure. Les instructions suivant cette Coupure (Directives Préparatoires, Directives Centrales) s'exécutent jusqu'à rencontrer une Directive d'Exécution qui met au travail l'élément cité, et le programme reprend à l'instruction suivant la SIMU ("branche ordinaire").

ARCHITECTURE DES ÉLÉMENTS

Chaque élément central ou périphérique possède son architecture propre, mais tous ont en commun un certain nombre de points.

Ils possèdent un certain nombre de registres :

- RAI (Registre Adresse Instruction) : Il contient l'adresse courante de l'instruction du programme local

- Registre B : Il contient l'adresse du 1er catène de la "Chaîne de reprise", c-à-d la tête de liste des programmes en attente sur cet élément

- Registre C : Il contient l'adresse du dernier catène de la chaîne de reprise, c-à-d la queue de liste des programmes en attente

- 1 à 4 RAC's (Registre Adresse Courante) qui contiennent l'adresse des opérandes.

Toutes les adresses que nous avons mentionnées sont des adresses absolues. Un RAC fonctionne à la fois comme un Registre de Base (il contient une adresse) et comme un Registre d'Index (il progresse, soit automatiquement - mais on peut inhiber cette progression -, soit par addition ou soustraction explicite)

ARCHITECTURE DU DISTRIBUTEUR DE PROGRAMME

Comme les éléments, le Distributeur de Programme possède également un certain nombre de registres :

- RNE (Registre N° d’Élément) : Il contient le n° de l'élément pour lequel il travaille

- Registre A (Registre d'Analyse) : Il contient le "Catène Qualitatif" de l'élément, c-à-d 24 bits décrivant l'état de l'élément après exécution de la dernière instruction

- Registre B : Il contient l'adresse du premier catène de la chaîne de reprise du Distributeur de Programme. En effet plusieurs programmes locaux peuvent faire simultanément des demandes d'instructions au Distributeur de Programme et être en attente de sa disponibilité

- Registre C : Il contient l'adresse du dernier catène de la chaîne de reprise du Distributeur de Programme

- RAPA (Registre Adresse Programme Actuelle) : Il est chargé du contenu du RAI de l'élément lorsque celui-ci fait sa demande d'instruction. Il progresse de 1 à chaque instruction qu'exécute le distributeur de programme.

- RAPP (Registre Adresse Programme Progressée) : Il contient (RAPA) + 1. Il est transféré dans le RAI de l'élément quand celui-ci recommence à travailler en autonome

STRUCTURE DES INSTRUCTIONS

Toutes les instructions occupent un catène. Elles se décomposent en TK (Type de Catène), Partie Caractéristique et Partie X. Ces différents champs peuvent jouer des rôles différents, selon le TK, et pour une Directive Élément, ils seront interprétés en fonction de l'élément pour lequel l'instruction est exécutée. Globalement, le nombre d'instructions est très réduit, ce qui, ajouté à la structure fixe des instructions, pourrait faire qualifier le Gamma 60 de première architecture RISC au monde !!! Un exemple courant d'instruction est celui ou le TK désigne le type d'opération, la partie caractéristique spécifie la fonction adresse et la partie X désigne l'adresse.

La fonction adresse permet de spécifier adresse absolue ou adresse relative à l'implantation et de spécifier une indirection éventuelle. Il n'est pas possible de dire si la Gamma 60 est une machine à 1, 2 ou 3 adresses, puisque chaque élément peut posséder de 1 à 4 RAC's. Par contre, on peut dire que le Calculateur Arithmétique est une machine à 3 adresses.

CALCULATEUR ARITHMÉTIQUE

Le Calculateur arithmétique traite des nombres en virgule flottante (en décimal codé binaire) sur deux catènes (10 chiffres de mantisse, 2 chiffres d'exposant).

CALCULATEUR LOGIQUE

Le Calculateur Logique effectue les opérations de décalage, les opérations logiques et les opérations arithmétiques en virgule fixe sur des sous-chaînes de bits.

COMPARATEUR GÉNÉRAL

Le Comparateur Général effectue les comparaisons des quantités numériques ou alphanumériques, soit de deux quantités entre elles, soit d'une quantité par rapport à deux bornes. Il effectue également les transferts de chaînes de catènes, de mémoire à mémoire.

TRADUCTEUR

Le Traducteur est l'élément le plus original du Gamma 60. On peut regretter que l'idée n'en ait pas été reprise dans les générations suivantes d'ordinateurs.

Il prend une suite de données en entrée et produit une suite homologue de données en sortie, en suivant les instructions d'un "cliché" de traduction. Il fonctionne selon différents "cas d'emploi", par exemple Carte vers Traitement, ou Traitement vers Mémorisation, ou Carte vers Mémorisation, etc...Par exemple, dans ce dernier cas on pourra dire : prendre 15 colonnes alphanumériques, puis 7 colonnes numériques, etc... Si 9 des 15 colonnes alphanumériques comportent de l'information, elles seront transférées en sortie, suivies d'un code de tabulation, puis, si les 7 colonnes numériques comportent 3 chiffres significatifs cadrés à droite, on aura en sortie un code tabulation décimale suivi des 3 chiffres, etc...

Le traitement par interprétation de clichés est très puissant. On peut itérer sur un cliché, etc...

CONCLUSION

Le Gamma 60 apparaît avec le recul comme une très belle construction intellectuelle. Venant après le Gamma AET, dont on peut dire qu'il a été le fruit bâtard de la greffe d'une machine Von Neuman sur une machine de Turing, son architecture a de quoi séduire.

On a le sentiment que des gens ne se sont pas dit :" voilà ce qu'on a dans les mains, qu'est-ce qu'on pourrait bien en faire" (approche Bottom-up), mais :"voilà ce que l'on veut faire, comment va-t-on le réaliser ?" (approche Top-down). C'est à mon avis, avec la conception de Multics, un des grands moments de l'histoire de l'informatique, même si, dans un cas comme dans l'autre, le succès commercial n'a pas été au rendez-vous.

Le Gamma 60 a toutefois des défauts, dont le principal est sans conteste l'absence totale de protection mémoire, même si l'adressage relatif, permettant de réaliser des programmes relogeables, a apporté un petit élément de sécurité.

Un autre défaut, nettement moins grave, est le caractère totalement impur du code. Il est impur du fait du calcul d'instructions, mais grâce à l'existence des RAC's, on pouvait éviter d'y recourir, cela aurait simplement été une discipline de programmation. Mais, surtout, il est impur à cause de l'existence des fameux "catènes vierges" suivant les instructions de Coupure et de SIMU, catènes destinés à recevoir les éléments de structures de liste que constituaient les chaînes de reprise. Les procédures n'étaient donc pas partageables (au sens GCOS7 : une instanciation unique du code, n instanciations - une par processus - des données privées). Simplement les procédures pouvaient être rendues "réutilisables en série" (serially reusable) grâce aux instructions PROT et LIBé, fonctionnant comme instructions P et V sur des sémaphores de lock.

A signaler encore l'impossibilité de facturer le traitement central à un client : on ne sait absolument pas pour le compte de qui travaillent les éléments centraux. La seule possibilité sera, via les gestionnaires d'entrées-sorties, d'imputer le nombre de cartes lues ou le nombre de lignes imprimées, par exemple, mais il ne sera jamais possible de connaître le temps passé dans l'inversion d'une matrice.

Pourquoi le Gamma 60 fut-il un échec commercial ? Il y a à cela plusieurs raisons :

- le gigantisme de la machine, mal adaptée au marché. Du fait de son prix cette machine ne pouvait être acquise que par de très grosses entreprises ou institutions, privées ou publiques. Dix-sept exemplaires seulement du Gamma 60 furent commercialisés. Toutes les énergies avaient été mobilisées au profit du développement du Gamma 60, ce qui ne permit pas le développement, sur des bases similaires, d'une machine moyenne accessible à des entreprises plus modestes.

- une insuffisante fiabilité du matériel.

- l'absence d'un véritable système d'exploitation.

- la sous-estimation de la difficulté de mise au point des programmes, due à l'absence de langage de programmation, sinon de haut niveau, du moins dégagé des contingences matérielles de l'architecture de la machine. Les très grosses ambitions du langage AP3 ne purent jamais être atteintes, et laissèrent l'utilisateur avec un assembleur insuffisant comme seul outil de programmation pendant les deux premières années. Ce n'est qu'après cette période qu'un véritable assembleur fut disponible.

Malgré tout, le Gamma 60 reste cher au coeur de ceux qui ont vécu son aventure, il fut un peu notre Concorde à nous !

Claude Massuard

Retour