« TIME-SHARING » ET GAMMA M40

Retour

La puissance actuelle des unités centrales d’ordinateurs serait mal utilisée si l’on admettait de multiples interventions des opérateurs pour exécuter les différentes phases d’un travail, ou passer d’un travail au suivant.

La méthode de la gestion automatique des programmes par un programme « moniteur » apporte dans de nombreux cas une solution satisfaisante: le programme moniteur est chargé d’« appeler » l’un après l’autre les travaux à exécuter au cours d’une période d’exploitation, qui s’enchaînent alors automatiquement. Il faut cependant pour ce faire que l’ordre d’exécution ait pu être fixé par avance: ceci suppose une exploitation planifiée, avec une préparation préalable des fichiers et une répartition des heures machine dûment calculée.

Cette méthode est donc difficile à adapter quand il s’agit de faire bénéficier un nombre assez important d’utilisateurs de la capacité de traitement d’un ordinateur: ce problème est en particulier celui des utilisateurs scientifiques; c’est celui des laboratoires de calcul des universités et des bureaux d’études, chargés des calculs numériques, des dépouillements de résultats expérimentaux, des simulations économiques ou physiques, des problèmes documentaires, etc. Ces travaux se plient mal à une planification rigide, ils conduisent à préparer, mettre au point et exploiter des programmes diversifiés, pour lesquels il convient de réduire au maximum le temps d’attente, sous peine d’une augmentation fâcheuse des délais globaux de fourniture des résultats.

La méthode proposée ici permet de mettre simultanément à la disposition d’un nombre élevé d’utilisateurs un même ordinateur, en l’occurrence le Gamma M 40. Chacun cependant utilise à son gré la machine. Il dispose en effet de son poste d’entrée/sortie, organe matériel qui lui permet un dialogue direct avec l’ordinateur. Tout se passe donc pour lui comme s’il travaillait sur son propre calculateur alors qu’il exploite en fait un ordinateur; puissant et bénéficie en conséquence de moyens de programmation importants. Pour l’unité centrale, les postes périphériques se partagent le temps disponible et de plus, ils lui laissent la possibilité, compte tenu de leur lenteur relative et de leur agencement interne en vue de la multiprogrammation, de dérouler parallèlement une chaîne de travaux séquentiels, ce qui maintient un taux global d’utilisation élevé de la machine.

Nous décrivons ici une réalisation permettant de connecter jusqu’à 23 postes périphériques d’entrée et de sortie à l’unité centrale d’un Gamma M 40 et de les exploiter simultanément selon la méthode du « partage de temps » (time-sharing en anglais), de telle sorte que l’unité centrale ne travaille qu’environ 5% du temps, ce qui laisse place, si la capacité de mémoire est suffisante, à d’autres types d’exploitation grâce à la multiprogrammation.

MOYENS MIS EN OEUVRE

Pour réaliser des traitements multiples avec « partage de temps » le Gamma M 40 dispose:

· d’une organisation logique interne appropriée aux travaux en multiprogrammation;

· d’appareils périphériques permettant à plusieurs utilisateurs de dialoguer avec l’unité centrale;

· d’un système de programmation spécialement conçu pour ce type d’application.

1. Organisation centrale.

Le Gamma M 40 est agencé pour travailler en multiprogrammation, car il dispose:

· d’un dispositif d’interruption de programme;

· de la protection de mémoire.

Le dispositif d’interruption de programme permet, à partir d’appels d’interruption émanant d’un appareil externe, de mettre en attente la séquence de programme qui se déroule pour lancer une séquence de programme plus prioritaire: c’est grâce à l’interruption de programme que l’on peut interrompre une unité de traitement à déroulement séquentiel, au profit d’une courte séquence de traitement demandée par un poste périphérique.

La protection de mémoire permet de réserver à un programme donné une tranche de mémoire, sans qu’un autre programme ait la possibilité d’y inscrire une donnée qui le concerne; cette disposition est indispensable si l’un des travaux effectués en multiprogrammation est un travail de mise au point de programme, dans lequel une erreur d’affectation de zone peut toujours se rencontrer.

Nous ne nous étendrons pas davantage ici sur ces dispositifs, qui font partie de la conception logique du Gamma M 40 et qui, de ce fait, sont décrits par ailleurs.

Du point de vue « central », on notera encore que la capacité minimum de mémoire centrale nécessaire à une exploitation avec « partage de temps » est de 12.288 mots, en effet les programmes généraux indispensables à son exécution occupent une zone de 9.000 mots. Les emplacements de mémoire restants sont répartis dynamiquement entre les différents utilisateurs, selon le procédé exposé plus loin.

2. Equipement périphérique.

Les postes périphériques terminaux mis à la disposition des utilisateurs peuvent être équipes:

· soit de machines à écrire, de même type que celle qui est normalement utilisée au pupitre de la machine;

· soit de téléimprimeurs utilisant un code standard à 5 moments.

Ces différents appareils sont regroupés sur un élément spécial appelé « sélecteur de sous-canaux ». Le sélecteur de sous-canaux est relié d’une part au « canal normal » d’entrée/sortie de l’unité centrale; d’autre part à un nombre variable de « sous-canaux » desservant chacun un poste terminal; chaque sous-canal comporte 8 voies binaires sur lesquelles s’opère caractère par caractère la transmission d’information dans les deux sens.

Dans une première réalisation, on a prévu de connecter jusqu’à 23 postes terminaux, reliés à 23 sous-canaux. Un sous-canal supplémentaire à 24 voies binaires regroupe des signaux de demande émanant de chaque poste terminal, destinés à l’unité centrale: ces signaux indiquent que l’appareil terminal est prêt à émettre ou à recevoir un caractère d’information; ils seront testés par programme systématiquement.

L’emploi de machines à écrire ou de téléimprimeurs dépend des besoins de l’installation; la distance maximum sans relais intermédiaire entre une machine à écrire et le sélecteur de sous-canaux est de 50 mètres, cette distance peut être portée à plusieurs kilomètres avec un dispositif simple de liaison; un téléimprimeur par contre, connecté à l’ordinateur par relais télégraphique, peut se trouver à distance quelconque.

3. Les moyens de programmation (software).

Pour l’exploitation envisagée trois programmes de base se trouvent en permanence enregistrés en mémoire centrale: ce sont:

· le superviseur, qui gère normalement les interruptions de programme, organise les fonctions d’entrée/sortie et répartit le temps alloué entre les différents sous-canaux à l’aide d’un rythmeur;

. le compilateur de programme « L.S.A. » (langage symbolique algébrique) qui permet aux utilisateurs scientifiques d’écrire leur programme dans un langage simple;

· le moniteur d’exploitation par « partage du temps » qui répartit les demandes de postes terminaux.

Le superviseur est le programme qui permet normalement de lancer les programmes prioritaires à partir d’interruptions et d’assurer les différentes fonctions d’entrée/sortie sur tous les éléments périphériques connectés. Dans ce cas particulier, il doit comprendre, outre les séquences (ou « modules ») relatives aux éléments classiques, un module propre au « sélecteur de sous-canaux », qui réalise les fonctions suivantes:

· entrée de caractères sur un sous-canal donné, jusqu’à rencontre d’un caractère défini, ou entrée d’un nombre donné de caractères (fonction INSYM);

· sortie de caractères sur un canal donné, jusqu’à rencontre d’un caractère défini, ou sortie d’un nombre donné de caractères (fonction OUTSYM);

· sortie, sur un sous-canal donné, d’une ligne standard à imprimer (fonction OUTPUT);

· commande d’interligne sur machine à écrire (fonction LF) ou de changement de ligne avec retour chariot (fonction NL), sur un canal donné.

Pour gérer l’ensemble des postes terminaux, l’utilisateur doit fournir au superviseur un certain nombre de renseignements, groupés par sous-canal dans une « table d’unité logique »,. Une « table de regroupement » fournit au superviseur les adresses des tables d’unité logique, le superviseur viendra y placer une information signifiant « appel » ou « fin de message » chaque fois qu’un sous-canal entre en jeu.

Des caractères spéciaux sont réservés sur les postes terminaux pour les fonctions d’appel de l’utilisateur et de fin de message.

La compilation du langage L.S.A. est conçue de manière à pouvoir s’exécuter sans difficulté dans une exploitation avec partage de temps. En effet, le L.S.A., sous-ensemble des langages FORTRAN et ALGOL adapté aux algorithmes numériques classiques, présente en compilation les caractéristiques suivantes:

· chaque instruction L.S.A. est compilée comme un sous-programme, indépendant du reste du programme;

· le nombre de symboles utilisables dans un programme est limité, ce qui permet des références directes aux mémoires affectées à ces symboles;

· les zones affectées aux tableaux ne sont déterminées qu’au moment de l’exécution du programme généré. Elles sont adressées, dans ce programme généré, indirectement par l’intermédiaire de renseignements élaborés au moment de l’exécution dans une zone de renseignements dite « zone pilote »;

· l’adresse début de chacun des sous-programmes, provenant de la compilation de chaque instruction L.S.A., figure dans une table présente en mémoire au moment de l’exécution. Cette table est balayée une fois, de haut en bas, provoquant l’exécution successive de tous les sous-programmes;

· des modifications d’instructions L.S.A. sont possibles à tout moment par création d’un nouveau sous-programme qui s’ajoute à ceux existant déjà; l’adresse du nouveau sous-programme se substitue à l’ancienne dans la table des adresses. à l’emplacement correspondant au niveau de l’instruction. On peut donc modifier le programme avant le lancement du programme généré; on peut également le faire lorsque l’exécution de ce dernier est terminée, en vue d’une reprise ultérieure;

· les corrections d’erreurs de syntaxe sont immédiates et n’arrêtent pas l’exploitation .

Tous ces facteurs permettent une introduction et une mise au point des programmes très progressive avec une quantité d’informations minimum à introduire à chaque pas.

Le moniteur d’exploitation par partage de temps assure l’exécution des opérations demandées par les postes terminaux de la façon suivante:

· par un balayage circulaire, il recherche les postes terminaux qui demandent un échange d’informations;

· d’après les informations recueillies il procède aux attributions de zones de mémoire entre les différents travaux;

· d’après le type d’information introduite, il fait appel soit au compilateur L.S.A., considéré comme un sous-programme fermé, de façon à transformer en sous-programme objet une instruction introduite à partir d’un poste terminal, soit au programme à traiter, si l’utilisateur a indiqué la fin de la compilation.

Ces programmes sont structurés de façon à répartir le temps disponible entre les utilisateurs, sous la direction du moniteur.

Vis-à-vis du superviseur, le moniteur constitue une seule unité de traitement, quel que soit le nombre de postes terminaux connectés.

PARTAGE DE TEMPS ET PARTAGE DE MEMOIRE - EXEMPLE

Pour chaque utilisateur, le travail sur machine s’effectue en deux temps:

· le premier temps est une phase de compilation et de mise au point, au cours de laquelle il crée son programme généré;

· le deuxième temps est une phase d’exploitation, où ce programme est lancé.

La présence permanente en mémoire du compilateur L.S.A. fait que la gestion centrale par le moniteur place sur un même plan chacune de ces phases, et ceci pour l’ensemble des programmes demandés par les utilisateurs sur les postes terminaux.

Le moniteur a donc à charge la répartition dynamique du temps et de la place en mémoire disponible, quelle que soit la nature des travaux demandés par chacun .

1. Partage de temps.

Lorsqu’il examine l’information venant d’un poste demandeur, le moniteur peut se trouver en présence:

· d’une instruction L.S.A. bornée par un signe « ; » marquant la fin d’une instruction. Cette instruction est traitée par le compilateur, puis le moniteur passe au poste terminal suivant;

· d’une demande d’exécution de programme: le programme se déroule jusqu’à rencontre d’une instruction d’entrée/ sortie, ou jusqu’à un branchement systématique généré à partir de l’instruction L.S.A. « GO TO »; puis le moniteur passe au poste terminal suivant.

Par ce procédé, tous les postes terminaux sont desservis à tour de rôle; on évite en particulier de tourner dans une même boucle de programme, car ce retour itératif serait obligatoirement commandé par une instruction L.S.A. « GO TO ».

Aucune des phases: compilation d’instruction L.S.A. ou mise en oeuvre d’un programme généré, ne jouit d’une priorité particulière; les demandes de postes terminaux sont prises en compte à tour de rôle.

2. Partage des zones de mémoire centrale.

L’un des rôles essentiels du moniteur est de répartir entre les utilisateurs la place disponible, sachant que le superviseur, le compilateur L.S.A. et le moniteur sont en permanence en mémoire. La mémoire doit contenir les séquences de programmes générés par le compilateur les tables d’indicateurs, les variables simples et les variables indicées groupées en tableaux.

a) Des blocs de longueur fixe sont attribués au fur et à mesure des besoins de chaque poste terminal, aux séquences de programmes générés, aux variables simples du problème traité, et aux « zones pilotes » qui contiennent les adresses des tableaux. La longueur des blocs dépend de la machine utilisée. Les blocs son attribués dans le sens des adresses croissantes et ils sont « enchaînés » pour un utilisateur donné, c’est-à-dire que la dernière mémoire d’un bloc contient l’adresse origine du bloc qui contient la suite des informations pour l’utilisateur considéré. Quand il y a plusieurs utilisateurs, les blocs sont situés n’importe où dans la mémoire. Quand un utilisateur se retire le moniteur « récupère » les blocs qui lui avaient été attribués et les rend à la liste des blocs disponibles. Le mécanisme d’attribution des blocs est tel que l’on attribue toujours le bloc disponible qui se trouve à l’adresse la plus faible dans la mémoire.

b) Les zones de mémoires affectées aux tables d’identificateurs (387 mémoires), d’une part, et aux tableaux de variables indicées, d’autre part, ne sont pas attribuées par blocs mais d’un seul tenant en partant de la fin de la mémoire disponible et en remontant dans le sens des adresses décroissantes.

Quand un utilisateur se retire, la table d’identificateurs et les tableaux qui lui correspondent sont « récupérés », ce qui signifie que les autres tables et tableaux, situés à des adresses inférieures, sont physiquement translatés dans la mémoire; leurs adresses sont corrigées en conséquence dans la zone paramètre de l’utilisateur et dans la « zone pilote » des variables indicées.

Avant de délivrer un bloc, ou une zone pour un tableau, le moniteur s’assure qu’il ne peut y avoir de recouvrement entre la zone réservée aux blocs et celle des tableaux. Si une compilation conduisait à l’empiétement de la zone des blocs sur celle des tableaux, la compilation serait abandonnée et le moniteur avertirait l’utilisateur qui devrait alors réintroduire la totalité de son programme symbolique.

Si d’autre part, au moment de la prise en compte d’un programme, l’attribution d’une zone de tableaux empiétait sur la zone des blocs, l’exécution du programme serait différée jusqu’à ce que, par le fait de restitutions de zones et de blocs, la place libre soit suffisante pour loger le tableau. Un message envoyé par le moniteur avertit l’utilisateur que l’exécution de son programme est différée sans qu’il y ait à intervenir.

Les figures, page 21, illustrent le mécanisme des attributions de zones de mémoire.

Soit des utilisateurs 1, 2, 3, ...n. Ils auront d’abord à compiler leurs programmes, par appel de séquences P1 pour l’utilisateur 1, P2 pour l’utilisateur 2, ...Pn pour l’utilisateur n, et à créer des tables d’identificateurs 11, 12, ...ln; avant l’exécution on implantera les variables indicées dans les tableaux T1, T2, ...Tn.

Dans cette première figure, 5 compilations sont en cours, et provoquent l’implantation de séquences de programme P1, P2, P3, P4, P5, en même temps que sont implantées les tables d’identificateurs 11, 12, 13, 14, 15.

Le programme 1 est achevé et la place qu’il occupait a été libérée dans la zone « blocs », la place disponible est progressivement occupée par les séquences appelées par la compilation du programme 6. Dans la zone « tableaux » il y a eu tassement, puis décalage des zones précédemment implantées pour le rangement de la table d’indicateurs 16.

Le programme 3 et le programme 4 ont achevé leur compilation, le programme 3 a implanté des tableaux et a été lancé. Par contre il ne subsiste plus de place disponible pour ranger les tableaux du programme 4, qui se trouve en attente d’exécution.

CONCLUSIONS

Dans la pratique, on peut estimer que le temps imparti par le moniteur à un utilisateur est à chaque passage de 5 à 10 millisecondes, qu’il s’agisse de la phase de compilation ou d’exécution.

On voit ainsi que, pour le nombre de postes terminaux considérés, le temps d’attente reste très faible, et que, s’il n’y a pas de simultanéité instantanée au niveau de l’unité centrale, il y a bien simultanéité apparente du point de vue des utilisateurs.

On considérera également que l’on joue sur une occupation moyenne de la mémoire centrale, qui seule intervient pour fixer le nombre maximum de traitements simultanés; compte tenu de la forme concise qu’affectent les programmes traités dans de telles applications, la solution proposée est des plus efficaces pour un nombre d’utilisateurs relativement important et des plus économiques puisqu’elle n’entraîne pas l’adjonction d’une mémoire externe auxiliaire coûteuse.

Retour