FR 2879322 A1 20060616 FR 0413466 A 20041215 La présente invention concerne une architecture de système informatique basée sur l'association du concept d'adressage dynamique, du concept de la protection par domaines, du concept de liens dynamiques, et de la mise en parallèle de processeurs satellites avec un processeur central. L'association de ces quatre concepts permet la réalisation d'un nouveau concept de système informatique à la fois opérationnel et performant; en effet, l'extrême densité des circuits électroniques atteinte à ce jour autorise la réalisation d'un système informatique à la fois: sûr, grâce à la segmentation et à la protection par domaines, avec une capacité 20 d'adressage amplifiée par les liens dynamiques, et - performant, grâce à la division du travail entre processeur central et processeurs satellites. D'une manière générale, on sait qu'il existe plusieurs façons de classer les 25 architectures des processeurs: en fonction des caractéristiques de leur architecture ou bien en fonction de leurs cibles applicatives. En se limitant au premier type de classification, quatre architectures coexistent à ce jour: l'architecture "CISC" (Complex Instruction Set Computer) caractérisée par un jeu d'instructions riche en nombre et en complexité, et un grand nombre de modes d'adressage, l'architecture "RISC" (Reduced Instruction Set Computer) caractérisée par un jeu d'instruction développé dans l'objectif d'optimiser le temps d'exécution des programmes, - l'architecture "DSP" (Digital Signal Processor) caractérisée par un jeu d'instructions développé en vue d'optimiser les applications de traitement de signal, - l'architecture en réseau qui intègre les moyens de communication rapides avec d'autres processeurs permettant la mise en réseau. La définition des architectures "CISC" n'a pas fait, généralement, l'objet d'une étude systématique, mais résulte, pour l'essentiel, d'un processus d'évolution au cours duquel les contraintes de compatibilité ont joué un rôle prépondérant. Il était en effet nécessaire de pouvoir exécuter les programmes développés pour les précédentes générations sans recompilation sur les nouvelles générations. Néanmoins, les implémentations de processeurs "CISC" à haute performance utilisent des techniques proches des architectures "RISC". Ainsi, lors de l'exécution des programmes, les instructions sont traduites dynamiquement par le processeur, en des séquences équivalentes d'instructions appartenant à un jeu d'instructions réduit, et ainsi les instructions ainsi obtenues seront exécutées par le processeur. On doit noter aussi, que les instructions les moins complexes et les plus utilisées font l'objet d'une exécution optimisée grâce notamment à la diminution du nombre de cycles nécessaires à l'exécution de telles instructions. Dans les architectures "RISC", le jeu d'instructions a été défini de manière à minimiser la complexité de l'architecture afin d'obtenir des implémentations les plus efficaces possible. Les caractéristiques communes qui permettent de qualifier une architecture comme étant du type "RISC" sont les suivantes: exécution de la plupart des instructions en un seul cycle, exécution directe des instructions et par conséquent, non interprétation par microcode, seules les instructions de chargement et de rangement des registres font référence aux données placées en mémoire, conception du répertoire d'instructions fondée sur la fréquence d'occurrence des instructions lors de l'exécution des programmes, équilibre de la complexité entre le matériel et le logiciel. Les architectures "RISC" présentent le plus grand potentiel en termes de performances, néanmoins la faiblesse de leur catalogue de logiciels d'application limite leur pénétration; par ailleurs, les architectures "CISC" utilisent pour leur implémentation des techniques similaires aux architectures "RISC" ; simultanément, les architectures "RISC" se sont complexifiées en intégrant de nouvelles instructions et de nouvelles fonctionnalités. On observe ainsi une certaine convergence au niveau implémentation entre ces deux types d'architectures. Il s'avère donc en conclusion que l'architecture "CISC" autorise une certaine protection au détriment des performances; quant à l'architecture "RISC", elle est caractérisée par une quasi absence de protection au bénéfice de la performance. L'invention propose: - l'association des deux concepts "CISC" et "RISC", la partie "CISC" assurant l'intégrité du système informatique au moyen d'un mécanisme de protection supporté par le matériel du système informatique, la partie "R[SC" assurant l'exécution du système informatique de la même façon qu'un microprocesseur et son coprocesseur associé fonctionnaient dans les architectures précédentes, l'implémentation d'un mécanisme de relocalisation dynamique d'adresse logique, la création d'un concept d'espace hyper virtuel/appel universel grâce auquel un réseau complet de systèmes informatiques est visualisé comme un espace d'adressage unique, - la construction d'une ou plusieurs bases de données de grande capacité dans un espace d'adressage de processus, contrôlé par le gestionnaire de la mémoire virtuelle, des pointeurs matériels relogeables étant utilisés pour naviguer à travers les bases de données et pour supporter des références d'un élément de structure de contrôle à un autre élément de structure de contrôle, d'un élément de structure de contrôle à un enregistrement de base de données, et d'un enregistrement de base de données à un autre enregistrement de base de données. Un mode de mise en oeuvre de l'architecture de système informatique selon l'invention sera décrit ci-après, à titre d'exemple non limitatif, avec référence aux dessins annexés dans lesquels: La Figure 1 décrit la disposition générale du système informatique, La Figure 2 montre l'espace d'adresse, La Figure 3 représente l"'IVS", La Figure 4 représente 1' "IVD", La Figure 5 montre le Descripteur d'Espace d'Adresse et le Descripteur de Table de Segments, La Figure 6 montre deux tables de Segments associées à un Espace Virtuel contigu, La Figure 7 représente les domaines, La Figure 8 montre deux processus représentés par leur Bloc de Contrôle de Processus, La Figure 9 représente la disposition générale des registres, La Figure 10 décrit le contenu d'un registre "capabilité", La Figure 1 l décrit le contenu d'un registre pointeur, La Figure 12 représente l'image des Registres Virgule Fixe, La Figure 13 représente l'image des Registres Virgule Flottante, La Figure 14 montre la disposition générale d'un Segment Pile, La Figure 15 montre un empilement de deux Eléments de Pile, La Figure 16 montre un Segment Code, La Figure 17 montre un Descripteur de Procédure, et Les Figures 18, 19 montrent les Espaces Virtuels, les Domaines, les Segments et les "capabilités". Selon l'invention, les traits saillants de cette nouvelle architecture sont les suivants: - la nouvelle architecture associe un ou plusieurs processeurs centraux à un certain nombre de processeurs satellites. Le processeur central assure l'intégrité du système informatique, au moyen d'un mécanisme "Hardware" sophistiqué de protection, tandis que les satellites assurent la performance du système informatique. la nouvelle architecture comprend un "Mécanisme de Relocalisation Dynamique des Adresses Logiques", qui permet de réaliser un "Linkage Dynamique" câblé. la nouvelle architecture introduit un concept d' "Espace HyperVirtuel/APPEL Universel", grâce auquel un réseau complet de systèmes informatiques peut être vu comme un espace d'adresse unique, sans "overhead" additionnel quand la cible d'une référence se trouve effectivement dans l'espace d'adresse du processus, grâce à une "interface programmatique" unique. la nouvelle architecture permet la construction de "Data Bases" gigantesques entièrement dans l'espace d'adresse du processus, géré par le mécanisme de mémoire virtuelle, quoique avec un contrôle très étroit, y compris un contrôle différencié entre les structures de contrôle de la "Data Base" et les articles de la "Data Base" eux-mêmes, et entre les divers sous-ensembles des structures de contrôle. Des pointeurs "hardware" "relogeables" sont utilisés pour naviguer à travers la "Data Base" et supportent des références entre un élément de structure de contrôle et un autre élément de structure de contrôle, entre un élément de structure de contrôle et un article de la "Data Base", ou entre un article de la "Data Base" et un autre article de la "Data Base". La rapidité d'accès à la "Data Base" est continûment modulable, en allouant un nombre de pages de mémoire réelle variant de quelques pages à la totalité du contenu de la "Data Base", permettant à celle-ci d'être entièrement résidente, pourvu que la taille de la mémoire le permette. L'objectif principal de la présente invention est de permettre la réalisation, sur l'architecture de processeur proposée, de systèmes et de réseaux garantissant un très haut degré de sécurité, la protection étant intégrée au "hardware" du processeur, et non ajoutée autour de processeurs et de systèmes existants. L'architecture proposée est une architecture 64-bit, et le découpage choisi est précis, au bit près, des structures "hardware". Naturellement, cette taille de mot et ce découpage sont quelque peu arbitraires, ils sont néanmoins réalistes. On est libre d'imaginer la même architecture avec une taille de mot différente, et un découpage différent. Le système de protection choisi est le mécanisme de protection "par Domaines", qui est plus sélectif que le mécanisme de protection "par Anneaux" utilisé sur certains processeurs. Le problème de protection est d'importance fondamentale, dans la mesure où l'intégrité et la fiabilité des systèmes sont en cause. Laisser le "software" garantir l'intégrité et la fiabilité d'un système informatique, sans support "hardware", n'est pas une solution satisfaisante. En vérité, l'objectif de la présente invention est de permettre le développement d'un système informatique qui serait absolument garanti contre toute tentative malveillante de violation d'intégrité, et qui serait également protégé contre la prolifération et la propagation des bogues. Le problème d'interface homme/machine, qui est aussi d'une importance considérable, n'a pas été traité. Toutefois, il faut remarquer que l'existence de processeurs satellites spécialisés devrait grandement faciliter le développement de nouvelles interfaces homme/machine. Ces nouvelles interfaces homme/machine permettraient l'évolutivité et l'extensibilité de la visibilité du système informatique, cependant que le "noyau' du système d'exploitation serait maintenu aussi stable et robuste que possible. Le développement continu de nouveaux processeurs satellites garantirait aussi la disponibilité des moyens de calcul les plus avancés et les plus puissants, la seule contrainte étant que ces processeurs satellites soient capables d'interfacer avec le processeur central à travers la mémoire principale de ce dernier. L'introduction d'un nouveau processeur satellite sera aussi simple que celle d'un quelconque appareil périphérique, à savoir sa connexion physique et l'ajout au système d'exploitation, du "Driver" correspondant, "Driver" qui comporterait un module "visibilité", un module "préparation des programmes" et un module "contrôle d'exécution de programme", qui inclurait les "Procédures de Traitement des Exceptions". Les concepts qui sont développés dans le document sont dans la continuité de ceux qui sont à la base du processeur "Bull DPS7" et de l"'Operating System GCOS7". Les structures et les mécanismes qui supportent l'architecture proposée peuvent sembler complexes, mais si on les compare avec ceux du "DPS7", dont la conception remonte à plus de trente ans, au début des années 70 sous le nom de "Level 64" - à une époque ou environ une centaine de transistors étaient disponibles par chip, ils ne sont en vérité pas si complexes et ils devraient être facilement implémentés, si on considère qu'aujourd'hui une centaine de millions de transistors sont disponibles par chip (il y en aura un milliard demain, permettant de loger, sur un seul chip, un ou plusieurs processeurs de contrôle et diverses sélections de processeurs satellites, fonction des différents besoins marketing). Le processeur de contrôle (appelé "FIP") sera d'autant plus facile à réaliser qu'une haute performance d'exécution n'est pas un objectif, puisque le "FIP" n'exécutera que les tâches de service (Gestion de Mémoire Virtuelle, compilation, édition de liens) ainsi que le Traitement des Exceptions, et éventuellement quelques programmes d'application simples, tels que le traitement de texte, les tâches lourdes de calcul étant exécutées par les divers processeurs satellites qui opéreront en simultanéité, se concurrençant simplement pour l'accès à la mémoire (mais chacun d'eux disposera de son propre "Cache Processeur" - ou de sa hiérarchie de Caches). Si le "FIP" demande 3-4 cycles d'horloge pour exécuter les opérations "génériques" (celles-ci seront, de loin, les plus fréquemment exécutées et devront être les plus rapides), cela est sans importance. Avec une fréquence d'horloge de 2-3 GHz, le "FIP" aura une performance d'environ 600-.800 Mips, ce qui est plus que suffisant (en fait 100 Mips suffiraient probablement, si on considère qu'une instruction "FIP" exécute les fonctions de plusieurs instructions d'un processeur conventionnel). La Figure 1 représente la disposition générale du système informatique. Il faut noter que certains des processeurs satellites, à savoir soit des organes de calcul, soit des processeurs d'entrée-sortie, peuvent être partie intégrante du chip principal, au même titre que le(s) processeur(s) central/(aux). Dans la génération j d'une Ligne de Produit, certains processeurs satellites externes peuvent être évalués. S'ils sont jugés présenter un intérêt spécial, ils peuvent devenir partie intégrante du chip principal dans la génération j+l qui permettra plus de transistors par chip. Le choix du (ou des) processeur(s) satellite(s) à intégrer dépendra de la cible marketing de chaque produit de la ligne. Cette stratégie permettra d'introduire de nouveaux processeurs satellites pendant la durée de vie d'une génération, de les tester, et de décider de leur intégration dans la génération suivante. A noter que des processeurs étrangers peuvent être émulés à travers des processeurs satellites (intégrés ou non), les opérations d'entrée-sortie physiques devant être, pour des raisons de sécurité, exécutées sous le contrôle du processeur central natif L'architecture proposée se présente comme un complexe de "FIP" (Fast Intelligent Processor) et de "COB" (COmputing Beast). Un "FIP" est un processeur généraliste dont l'objectif principal est l'encapsulation et la protection des objets, plutôt que le haut débit de calcul. Il peut fonctionner comme ordinateur autonome lorsqu'il n'y a pas d'exigences particulières de performances, ou bien il peut contrôler un ou plusieurs "COB's" et agir en tant que "di spatcheur" de tâches. Un "COB" fonctionne sous le contrôle d'un "FIP" ; il possède un certain nombre de paires de registres "Base/Limite", dont chacun comporte une adresse absolue et contrôle un certain nombre de bytes de mémoire réelle (Code, Données). L'adressage est extrêmement simplifié : indexé et/ou relatif à une base absolue. Le traitement des exceptions se limite également à décharger le contenu des registres du processeur dans un "Bloc d'Etat de Processeur" et informer le "FIP" hôte, ce qui signifie que la gestion de la mémoire virtuelle, par exemple, est assurée par le "FIP". Egalement, le jeu d'instruction est strictement limité à ce qui est nécessaire, soit à .in processeur scientifique généraliste, soit à un processeur spécialisé. La définition de l'adressage est l'une des tâches les plus délicates dans la conception d'une nouvelle architecture d'ordinateur. Le modèle linéaire a l'avantage de la simplicité au détriment des capacités de protection; le modèle segmenté, par l'encapsulation du code et des données, offre une bonne capacité de protection au prix d'une certaine complexité ; il est par ailleurs un support naturel pour la modularité. Certains anciens systèmes utilisaient le modèle segmenté, tel l'architeclure "Multics" qui comportait un modèle bidimensionnel simple: numéro de segment, adresse relative dans le segment, le numéro de segment sélectionnant un descripteur de segment dans une unique "Table de Segments du Processus". D'autres systèmes connus utilisent un modèle tridimensionnel: niveau de partage, numéro de segment, adresse relative dans le segment, le niveau de partage pouvant comporter deux dimensions niveau système, niveau processus ou trois dimensions système, groupe de processus, processus - ; dans ce dernier cas chaque niveau regroupe plusieurs tables de segments. L'architecture proposée est basée sur un modèle segmenté à 4 dimensions, avec des mots de 64 bits. La première dimension permet 4 Niveaux de Partage, la seconde dimension permet un million de Tables de Segments par niveau de partage, la troisième dimension permet 64 Segments par Table de Segments, et la quatrième dimension permet 4 Gigaoctets par Segment. Les 4 niveaux de partage sont les suivants: Niveau Système, Niveau Zone, Niveau Groupe, Niveau Processus. Le "mécanisme de relocalisation dynamique d'adresse logique", qui sera décrit ci- après, permet que des entités "pré-liées" représentées soit par une Table de Segments, soit par un ensemble de Tables de Segments, puissent être affectées dynamiquement à n'importe quelle entrée ou ensemble d'entrées d'un "Tableau de Descripteurs de Tables de Segments", de ce fait il utilise seulement les entrées pour les entités réellement référencées par le processus, et non toutes les entrées pour toutes les entités créées dans le système informatique, comme ce serait le cas avec une architecture ne possédant pas ce mécanisme. Ainsi, une capacité d'adressage de 261 bytes par espace d'adresse de processus, dans lequel plus d'un milliard d'objets discrets individuellement protégés peuvent être - 10 - nommés, devrait garantir que le système informatique réponde aux besoins des utilisateurs les plus exigeants et ce pour une très longue période. La Figure 2 montre l'espace d'adresse d'un processus: Le Bloc de Contrôle de Processus (BCP), avec d'autres informations sur les caractéristiques et le statut du processus, contient quatre Descripteurs d'Espace d'Adressage dénotés (DEAO), (DEA1), (DEA2), (DEA3), et sélectionnés par le Niveau de Partage (PR) de l'entité cible. (DEAO) pointe vers un Tableau de Descripteurs de Table de Segments, (TDTSO), qui est consacré aux tables de Segments de niveau Système (marqué S ), (DEA 1) pointe vers un Tableau de Descripteurs de Table de Segments, (TDTS 1), qui est consacré aux tables de Segments de niveau Zone (marqué Z ), (DEA2) pointe vers un Tableau de Descripteurs de Table de Segments, (TDTS2), qui est consacré aux tables de Segments de niveau Groupe (marqué G ), (DEA3) pointe vers un Tableau de Descripteurs de Table de Segments, (TDTS3), qui est consacré aux tables de Segments de niveau Processus (marqué P ). Tous les BCP's du système informatique, pointent, à travers leur DEAO, vers l'unique Tableau de Descripteurs de Table de Segments partagé au niveau Système (TDTSO) ; tous les BCP's d'une zone pointent, par l'intermédiaire de leur DEA1 vers le Tableau de Descripteurs de Table de segments partagé au niveau Zone (TDTS 1), de cette zone; tous les BCP's d'un Groupe pointent, par l'intermédiaire de leur DEA2 vers le Tableau de Descripteurs de Table de segments partagé au niveau Groupe (TDTS2), de ce Groupe, et chaque BCP pointe, par l'intermédiaire de son DEA3 vers le Tableau de Descripteurs de Table de segments (TDTS3) privé à ce processus. Un Tableau de Descripteurs de Tables de Segments (TDTS) se compose de Descripteurs de Table de Segments (DTS), dont chacun décrit une Table de Segment, et est sélectionné par le Numéro de Table de Segments (NTS) de l'entité cible. Un DTS peut être "Direct", dans ce cas il pointe vers une Table de Segments (TS) en mémoire. Un DTS peut également être "Faute Direct", dans ce cas il contiens l'adresse en mémoire auxiliaire de la Table de Segments cible. Une Table de Segments se compose d'un parmi différents types d'en- têtes et d'un Tableau de Descripteurs de Segments (DS), dont chacun décrit un Segment, et est sélectionné par le Numéro d'Entrée de Table de Segments (NETS) de l'entité cible. Un Segment est une zone contiguë d'espace virtuel, défini par son déplacement du début de l'espace virtuel considéré, et sa dimension en octets. Le déplacement est exprimé en octets et peut être de 0 à 16 Téraoctets; la taille est également en octets et peut être de 1 octet à 4 Gigaoctets. L'espace virtuel est divisé en "Pages" de 4 Kilooctets, qui constituent l'unité d'allocation dans la mémoire réelle. Un segment peut commencer et finir à n'importe quel octet d'un espace virtuel, et n'a pas besoin d'être aligné sur une limite de Page. Le concept d"'Hyper-page" est un regroupement de Pages qui sont lues ou écrites dans/à partir de la mémoire centrale dans une opération unique d'Entrée/Sortie. Une "Hyper-page" se compose de 2" pages, où n peut prendre différentes valeurs. Dans la pratique, un Système supporte deux dimensions différentes d' "Hyper-pages", à savoir une "Super-page" qui pourrait être de 16 Kilooctets, 32 Kilooctets ou 64 Kilooctets, et une "Hyper-page" qui pourrait être de 128 Kilooctets, 256 Kilooctets, 512 Kilooctets ou même 1024 Kilooctets. Les "Hyper-pages" se composent de pages contiguës dans la Mémoire Auxiliaire. Les pages peuvent également être contiguës dans la mémoire centrale, mais cela n'est pas nécessaire, si la fonction "Scatter-Gather" de l'opération E/ S est utilisée durant la lecture/écriture vers/de la mémoire. L'architecture proposée supporte les formats de données suivants: Entiers signés 8 bits, 16 bits, 32 bits et 64 bits, - Entiers non signés 8 bits, 16 bits, 32 bits et 64 bits, Masques Logiques 8 bits, 16 bits, 32 bits et 64 bits, Virgule Flottante 32 bits (Simple Précision), 64 bits (Double Précision), 128 bits (Quadruple Précision), - Bytes à 8 bits (EBCDIC et ASCII), - Chaînes de Bytes à 8 bits (EBCDIC et ASCII) soit de longueur spécifiée, soit marquées par délimiteur, - Bits, Chaînes de bits, - Entiers non signés à x bits (x compris entre 1 et 32), - Masques logiques à x bits (x compris entre 1 et 32). Les pointeurs sont de deux types: - Indirect vers Segment (IVS), Indirect vers Domaine (IVD).. La Figure 3 représente l"'IVS". L"'IVS" comporte un bit de type, qui vaut 1, indiquant qu'il s'agit d'une Adresse Effective, deux bits de "Mode" qui valent 00 si l"'IVS" pointe vers l'opérande, 01 si l"'IVS" pointe vers un autre pointeur, 11 si l"'IVS" est "Faute". L'accès à un tel pointeur "Faute" provoquera une exception "logiciel", mécanisme utilisé pour réaliser la résolution dynamique de références. La valeur de mode 10 est réservée pour un usage futur. L'"IVS" comporte à la suite un bit de format qui vaut 0, la valeur 1 étant réservée pour des extensions futures. Viennent ensuite 2 bits indiquant la "Partageabilité" (PR) dont la valeur choisit une parmi 4 TDTS's. Viennent ensuite 20 bits de "Numéro de Table de Segments" (NTS), qui sélectionnent le mot choisi dans la TDTS sélectionnée et désignent ainsi une Table de Segments (TS). NTS peut prendre toutes les valeurs entre 0 et 220É-1. Viennent ensuite 6 bits de "Numéro d'Entrée de Table de Segment" (NETS), qui peuvent prendre toutes les valeurs de 0 à 63 et sélectionnent un Segment particulier dans la Table de Segments choisie. Viennent ensuite 32 bits d"'Adresse Relative dans le Segment" (ARS) qui désignent - 13 - le premier byte de gauche de l'opérande cible et peuvent prendre toutes les valeurs comprises entre 0 et 2324. Les "IVS" sont toujours alignés à 64 bits. Ils ne peuvent être contenus dans des segments inscriptibles, mais sont contenus dans des "Segments de Liaison" qui sont des segments "lecture seule" (Read-only). Les "IVS" sont utilisés pour réaliser l'adressage "Inter-Domaine". La Figure 4 représente l"'IVD". L"'IVD" comporte un bit de type, qui vaut 0, indiquant qu'il s'agit d'une Adresse Relative, deux bits de "Mode" qui valent 00 si l"'IVD" pointe vers l'opérande, 01 si l"'IVD" pointe vers un autre pointeur, 11 si l"'IVD" est "Faute". La valeur de mode 10 est réservée pour un usage futur. Viennent ensuite 10 bits "Réservé à Usage Logiciel" (RUL). Viennent ensuite 12 bits "Déplacement par rapport au NTS" (NTSOffset). "NTS-Offset" est ajouté au "NTS de Base" (Base-NTS) du Segment dans lequel est contenu 1'"IVD", le résultat de l'addition fournissant le NTS effectif de l'opérande visé. Le "NTS de Base" est obtenu en forçant à 0 les "MOD" bits de droite du NTS du segment contenant l"'IVD". Viennent ensuite 6 bits de "Numéro d'Entrée de Table de Segment" (NETS), qui peuvent prendre toutes les valeurs de 0 à 63 et sélectionnent un Segment particulier dans la Table de Segments choisie. Viennent ensuite 32 bits d"'Adresse Relative dans le Segment" (ARS) qui désignent le premier byte de gauche de l'opérande cible et peuvent prendre mules les valeurs comprises entre 0 et 2324. Les "IVD" n'ont aucune contrainte d'alignement et peuvent être contenus dans des segments inscriptibles. Les "IVD" sont utilisés pour réaliser l'adressage "Intra-Domaine". Les "IVD", pointeurs relatifs, réalisent la "relocalisation dynamique d'adresse logique", ou adressage dynamique. Ils sont le support de l'édition dynamique de liens vers des "Domaines", les domaines étant l'élément de base de la protection. Les - 14 - "IVD" sont contraints à ne pouvoir adresser des objets qu'à l'intérieur du domaine auquel ils appartiennent. Tout adressage au--delà des limites du domaine se traduit par une "Faute" à l'exécution et provoque un déroutement vers le Superviseur. La Figure 5 montre le Descripteur d'Espace d'Adresse (DEA) et le Descripteur de Table de Segments (DTS) : 1) DEA: les bits 0 à 7 Doivent Etre Zéro (DEZ). Les bits 8 à 27 représentent le NTS maximum de la TDTS désignée. Les bits 28 à 31 Doivent Etre Zéro (DEZ). Les bits 32 à 63 représentent un pointeur absolu vers la TDTS désignée. 2) DTS Direct: - les bits 0 et 1 sont mis à 00 pour indiquer un DTS Direct. - les bits 2 et 3 Doivent Etre Zéro (DEZ). - les bits 4 à 7 représentent un champ "MOD" qui sera expliqué plus loin. - les bits 8 à 19 représentent un champ "LIMITE" qui sera expliqué plus loin. - les bits 20 et 21 Doivent Etre Zéro (DEZ). - les bits 22 à 27 représentent le Nombre d'Entrées de la Table de Segments. - les bits 28 à 31 Doivent Etre Zéro (DEZ). - les bits 32 à 63 représentent un pointeur absolu vers la Table de Segments désignée. 3) DTS "Faute Direct" : - les bits 0 et 1 sont mis à 10 pour indiquer un DTS "Faute Direct". - les bits 2 et 3 Doivent Etre Zéro (DEZ). - les bits 4 à 19 représentent l'Identification de la Mémoire Auxiliaire (IDMX) où trouver la Table de Segment cible. - les bits 20 et 21 Doivent Etre Zéro (DEZ). - les bits 22 à 27 représentent le Nombre d'Entrées de la Table de - 15 Segments. - les bits 28 à 31 Doivent Etre Zéro (DEZ). - les bits 32 à 63 représentent l'Adresse dans la Mémoire auxiliaire 3e la Table de Segments cible (ADRMX). Un Espace Virtuel est un continuum d'adresses, de 0 à n, jusqu'à 16 Teraoctets. Un Segment est un sous-ensemble de ce continuum, caractérisé par son déplacement en octets par rapport au début, et sa dimension en octets, de 1 octet à 4 Gigaoctets. 10 Un Espace Virtuel est associé à au moins une Table de Segments, c'est-à-dire que les Segments décrits par une Table de Segments doivent tous appartenir au même Espace Virtuel, il ne peuvent pas être répartis sur plusieurs espaces Virtuels. Mais un Espace Virtuel peut contenir les Segments de beaucoup de Tables de Segments. Il peut exister des millions, voire des milliards d'Espaces Virtuels. Ils sort identifiés de façon unique dans le système informatique. Certains Espaces Virtuels peuvent comporter une seule Table de Segments d'un seul Segment, d'autres peuvent comporter des milliers de Tables de Segments. Concernant la Gestion de Mémoire Virtuelle, à chaque Espace Virtuel actif (c'est-à-dire qui est effectivement référencé) est associée une Table des Pages Virtuelles (TPV), table qui est résidente en mémoire, avec une entrée par page présente en mémoire, plus un certain nombre d'entrées libres, de telle sorte que la taille totale de l'ensemble de toutes les TPV's est proportionnelle à la taille de la mémoire physique, et non pas à la taille de la mémoire virtuelle. L'Espace Virtuel est l'Unité d'une Régulation Automatisée de la Mémoire Virtuelle. Il y a plusieurs façons d'allouer l'espace en Mémoire Auxiliaire: l'espace peut être alloué dans une ou plusieurs zones contigus de Mémoire Auxiliaire, ou il peut être réparti en Pages ou "Hyper-pages". Tout ceci relève de considérations "Software", et n'a pas d'incidence sur le "Hardware". La façon d'allouer un Espace Virtuel sous forme d'une zone contiguë unique en Mémoire Auxiliaire est présentée ci-après: - 1 6 - La Figure 6 montre deux tables de Segments associées à un Espace Virtuel contigu. Les en-têtes de chaque table comportent la même information: un code ayant la valeur 0 pour indiquer un Espace Virtuel Contigu. - un pointeur vers la même Table de Pages virtuelles (TPV). la même Identification de la Mémoire Auxiliaire (IDMX) et la même Adresse en Mémoire Auxiliaire (ADRMX) de l'Espace V irtuel. Le développement d'adresse d'une instruction fournit (PR, NTS, NETS, ARS) d'un opérande. (PR, NTS, NETS) conduisent à un Descripteur de Segment qui fournit le Déplacement du Segment dans l'Espace Virtuel, et sa taille. ARS est ajouté au Déplacement du Segment dans l'Espace Virtuel pour fournir le Déplacement de l'opérande dans l'Espace Virtuel. Les 12 bits de droite de ce déplacement représentent l'Adresse Relative de l'opérande dans la Page (ARP), et les bits de gauche représentent le Numéro de Page Virtuelle (NPV). On vérifie si une entrée avec ce NPV existe dans la TPV, ce qui voudrait dire que la Page est présente en Mémoire Centrale. Si la Page n'est pas présente, un simple calcul, utilisant l'Adresse Mémoire Auxiliaire du début de l'Espace Virtuel, et le NPV, fournit l'Adresse Mémoire Auxiliaire de la Page ou de 1' "Hyper-page". L'idée à la base du concept de Domaine est que les espaces "Code" et "Données" doivent être séparés et que ne soit autorisé que le minimum d'accès e:itre les uns et les autres: 1) l'entrée dans un domaine ne doit pouvoir se faire que par des points d'entrée prédéfinis ("Guichets"). 2) le domaine appelé ne doit avoir accès qu'aux arguments explicitement passés par le domaine appelant, à travers des "capabilités". Une "capabilité" peut être limitée à un seul opérande, éventuellement réduit à un seul byte. La Figure 7 donne une idée générale de ce que sont les domaines et comment ils communiquent: - 17 - Selon l'invention, les domaines sont des regroupements de Tables de Segments. Ils peuvent comporter de 1 à 4096 Tables de Segments. Soit p le nombre de Tables de Segments d'un domaine, compris entre 2"-1 et le numéro, dans la TDTS3, réservée aux Tables de Segments "privées" à un processus, de l'entrée allouée à la première Table de Segments du domaine, doit être de la forme 0 modulo 2n, autrement dit, ce numéro doit être un multiple de 2 . Si un domaine comporte une seule table de segments, il pourra être alloué à n'importe quelle entrée de la TDTS3; s'il comporte deux tables, il sera alloué à n'importe quelle paire d'entrées dont la première devra avoir un numéro pair; s'il comporte 5 tables, il sera alloué à un groupe de 8 entrées dont la première aura un numéro multiple de 8, les 3 dernières restant vacantes pour permettre d'allouer par exemple un domaine à deux tables et un domaine à une table. Bien que les Tables de segments soient adressées par des entrées de la TDTS3, privée au processus, elles peuvent être partagées: soit au niveau groupe si plusieurs entrées de plusieurs TDTS3 du groupe pointent vers la même table; soit au niveau zone si plusieurs entrées de plusieurs TDTS3 de plusieurs groupes pointent vers la même table; soit au niveau système si plusieurs entrées de plusieurs TDTS3 de plusieurs zones pointent vers la même table. On parlera de niveau de partage d'un domaine, qui sera le niveau le plus haut de l'une quelconque de ses tables. Un domaine pourra ainsi être "privé", si aucune de ses tables n'est partagée; il pourra être partagé au niveau groupe, si au moins une de ses tables est partagée au niveau groupe, ou au niveau zone si au moins une de ses tables est partagée au niveau zone, ou au niveau système si au moins une de ses tables est partagée au niveau système. Un domaine pourra avoir des tables partagées à plusieurs niveaux, voire à tous les niveaux: système, zone, groupe. Mais les cas les plus usuels seront les domaines privés et les domaines à deux niveaux de partage, quel qu'il soit: groupe, zone ou système, qui comporteront au moins une table adressée par la TDTS3 et partagée à ce niveau de partage et une autre table, privée, adressée par la TDTS3. Les domaines privés comporteront le plus souvent une seule table et les domaines partagés, deux tables. Ces domaines, potentiellement à plusieurs niveaux de partage, seront dits "domaines exécutables". Il existe aussi des "domaines de données", à un seul niveau de partage processus, groupe, zone ou système . Un domaine exécutable comporte à la fois - 18 - du code, c'est- à-dire des segments d'instruction, et des données. Ces données seront généralement privées, mais elles peuvent aussi être partagées, à un niveau quelconque, fonction des besoins de l'application; leur accès dans ce cas se fera sous le contrôle d'un mécanisme d'exclusion. Le code, lui, sera généralement partagé. A l'origine, la TDTS3 d'un processus qui vient d'être créé, ne comporte que des entrées vacantes, à l'exception des premières entrées qui peuvent être "pré-assignées" pour des segments de niveau système, zone ou groupe, qui doivent avoir une réplication dans chaque processus. Successivement, au cours du déroulement du processus, les entrées de la TDTS3 seront occupées pour décrire les domaines d'exécution ou les domaines de données privés, au fur et à mesure qu'ils seront référencés. Ce processus s'appelle "édition dynamique de liens". Il s'exécute selon les modalités qui ont été décrites plus haut, à savoir que la première entrée vacante de la TDTS3 qui réponde aux critères d'allocation, c'est-à- dire que son numéro soit un multiple de la première puissance de 2 majorante soit n pour le nombre p de tables de segments constituant le domaine, et les p-1 entrées TDTS3 suivantes, sont utilisées pour pointer vers les tables de segments du domaine. Le NTS de la première entrée devient le "Base-NTS" du domaine. Par extension, il est dit "Base- NTS" pour chaque Table de segments et pour chaque segment du domaine, mais ce "Base-NTS" est spécifique du processus dans lequel la référence se produit. Si par exemple une table de segments d'un domaine est partagée entre deux processus, elle aura un "Base-NTS" qui aura la valeur NTS1 dans un processus et la valeur NTS2 dans l'autre processus, NTS1 et NTS2 étant généralement différents. Au lieu de ce "Base- NTS", spécifique du processus, c'est la valeur Log2(n), dite "MOD". qui, elle, est invariante, qui sera stockée, ainsi que la valeur p-1, dite "LIMITE", dans le descripteur en mémoire de la table de segments. "Base-NTS" sera calculé dynamiquement à partir du NTS du segment et de Log2(n) en forçant à 0 les (Log2(n)) bits de droite du NTS et stocké dans un dispositif "Hardware" dit "Table d'extraits", à partir duquel il sera utilisé à chaque référence. La valeur "LIMITE" sera également stockée dans la "Table d'extraits". Ainsi, pour résumer, quand un "IVD" sera rencontré dans une référence, les valeurs "Base-NTS" et "LIMITE" seront automatiquement et immédiatement disponibles à partir de la "Table d'extraits". Le "NTS- Offset" dans l"'IVD" sera comparé à "LIMITE". S'il est supérieur, une erreur sera notifiée. Sinon le "NTS-Offset" sera ajouté à "Base-NTS" par une simple opération OU logique - pour fournir le NTS effectif de l'objet cible, et on sera assuré que cet objet appartient bien au domaine. Il résulte donc de ce qui précède que: un domaine peut être affecté dynamiquement à n'importe quel groupe d'entrées TDTS3 libres (en respectant les règles indiquées, ce qui ne pose aucun problème). Les références à l'intérieur du domaine sont invariantes et indépendantes des NTS assignés au domaine. - Ces références sont confinées à l'intérieur du domaine. Une conséquence immédiate et évidente de cela est que l'édition dynamique de liens d'un domaine dans l'espace d'adresse d'un processus est une opération complètement banale et sera la règle (alors que c'est une opération lourde dans les systèmes précédents). La Figure 8 montre deux processus, Pl et P2, représentés par leur Bloc de Contrôle de Processus (BCP). Un domaine D est constitué de deux tables de segments. Une de ces tables décrit des segments Code, l'autre décrit des segments Données. Ces segments Données seront modifiés selon les événements qui se produiront dans chacun des processus, leur contenu est donc dépendant du processus, il doit donc y avoir une copie de chacun dans chaque processus. Au contraire, les segments Code ne sont pas modifiables, et il n'est pas nécessaire qu'il y en ait une copie par processus, ils peuvent donc être partagés. Les domaines ne sont jamais référencés en tant que tels, mais par leurs points d'entrée, quand une référence symbolique est rencontrée. La résolution d'une telle référence conduit à une description du domaine auquel le point d'eerée référencé appartient. Une description de domaine contient toutes les caractéristiques des tables de segments constituant le domaine: niveau de partage, indication du fait que les - 20 - segments décrits sont modifiables ou accessibles en lecture seule (tels que des segments Code ou des constantes). Supposons, dans cet exemple, qu'une référence à D se rencontre d' abord dans le processus Pl. La description de D indique que tous les segments attachés à la première table de segments sont des segments Code. Le système va découvrir que, dans Pl, les entrées TDTS3 à (NTS1) et (NTS 1 +1) sont vacantes (NTS1 doit être pair). Il fera pointer l'entrée TDTS3 à NTS1 vers la copie originale 3e la table de segments partagée. Du fait que les segments décrits par la deuxième table de segments sont déclarés privés au processus et modifiables, le système devra réaliser une copie de cette table de segments et de tous les segments qui lui sont attachés, dans l'espace d'adresse de Pl. Le système fera pointer l'entrée TDTS3 à NTS1+1 vers cette première copie de la table de segments. Puis une référence à D est rencontrée dans le processus P2. Le système va découvrir que, dans P2, les entrées TDTS3 à (NTS2) et (NTS2+1) sont vacantes (NTS2 doit être pair). Il fera pointer l'entrée TDTS3 à NTS2 vers la même copie originale de la table de segments partagée. Le système devra réaliser une autre copie de la table de segments privée et de tous les segments qui lui sont attachés, dans l'espace d'adresse de P2. Le système fera pointer l'entrée TDTS3 à NTS2+1 vers cette nouvelle copie de la table de segments privée. Dans le déroulement du processus P1, l'instruction "INSTR", dans le segment code partagé, référence "ITEM(Pl)". Dans le déroulement du processus P2, elle référence "ITEM(P2)", alors pourtant que "ITEM" a pour adresse (PR=3,NTS1+1,NETS2,ARS2) dans P1 et (PR=3,NTS2+1,NETS2,ARS2) dans P2, ceci grâce au mécanisme d'adressage par "IVD". Un segment particulier attaché à la TDTS3 joue un rôle particulier: celui de segment Pile de Processus qui est prévu pour contenir de l'information relative à chaque appel de procédure: information de retour à l'appelant, images de registres, variables locales de la procédure. - 21 - En ce qui concerne les images de registres, il ne s'agit pas de zone de sauvegarde des registres comme c'est le cas dans d'autres architectures, mais d'images effectives, c'est-à-dire, au lieu d'avoir un bloc de mémoire rapide câblé dans le processeur pour contenir les registres, ceux-ci sont stockés dans la pile de processus et chargés dans le Cache Processeur, d'où ils sont accédés. L'adressage par registres devient alors une simple sténographie pour économiser de la place dans la description de l'instruction. Il existe trois types de registres: Registres "capabilité". - Registres Pointeur. - Registres Opératoires. Il y a 32 registres "capabilité" et 32 registres pointeur, qui peuvent être rassemblés sous le nom générique de Registres de Base. Le nombre de registres opératoires dépend du mode opératoire du processeur, qui est fixé à l'entrée dans une procédure, et qui peut être changé pendant son exécution, par 20 des instructions spécifiques. Il existe 4 modes opératoires pour le processeur: Virgule Fixe, Court. Virgule Fixe, Long. Virgule Flottante, Court. Virgule Flottante, Long. La Figure 9 représente la disposition générale de l'ensemble des Registres. Les registres "capabilité" sont prévus pour fournir un accès restreint à un segment: restreint en espace, en définissant une fenêtre à l'intérieur du segment, qui peut être limitée à un seul byte, restreint en droits d'accès en fournissant à l'utilisateur seulement un sous- ensemble des droits que le propriétaire du segment a sur celui-ci. - 22 - Un registre "capabilité" assure potentiellement l'accès à n'importe quel byte d'un espace d'adresse de processus, sans considération des frontières de dorr.aine. La Figure 10 décrit le contenu d'un registre "capabilité", tel qu'il peut être chargé avec une "capabilité Non-Codée, de type Mémoire" : - le bit 0 spécifie le type. Il prend la valeur 1 pour indiquer une adresse effective, c'est-à-dire une "capabilité" de type Mémoire. - les bits 1 à 2 représentent le mode. Il peut prendre les valeurs suivantes: - 00 indique une "capabilité" Directe. - 01 indique une "capabilité" Indirecte. - 10 est réservé pour un usage futur. - 11 indique une "capabilité" Faute. - le bit 3 indique le format. Il vaut 0. La valeur 1 est réservée pour une extension future. - les bits 4 à 5 représentent le niveau de "partageabilité" (PR). - les bits 6 à 25 représentent le NTS. - les bits 26 à 31 représentent le NETS. - les bits 32 à 63 représentent l'ARS. - le bit 64 vaut 0 pour dénoter une "capabilité normale". - le bit 65 Doit Etre Zéro (DEZ). - les bits 66 à 70 spécifient les droits d'accès, de la façon suivante: le bit 66, s'il a la valeur 1, indique une "capabilité Propriétaire". Il est accordé par le système au demandeur d'une création de segment. Il permet au propriétaire de détruire le segment correspondant, ou de suspendre temporairement une exception de violation de lecture ou d'écriture sur ce segment. - les bits 67-68 spécifient le niveau de privilège nécessaire pour avoir un droit d'écriture dans la fenêtre définie par la "capabilité". - les bits 69-70 spécifient le niveau de privilège nécessaire pour avoir un droit de lecture dans la fenêtre définie par la "capabilité". - les bits 71 à 82 sont tous à 0 pour indiquer une "capabilité Normale non codée", de type Mémoire. - les bits 83 à 95 Doivent Etre Zéro (DEZ). - 23 - - les bits 96 à 127 spécifient la "LIMITE", c'est-à-dire la taille moins 1 de la fenêtre à laquelle l'accès est autorisé. A l'inverse des registres "capabilité", qui peuvent fournir l'accès à n'importe quel byte d'un espace d'adresse de processus, sans considération des frontières de domaine, un registre pointeur ne peut fournir l'accès qu'à l'espace d'adresse du domaine dans lequel il est référencé, mais, dans cet espace, on ne peut pas définir ni fenêtre, ni aucune restriction d'accès. La Figure 1 l décrit le contenu d'un registre pointeur: - le bit 0 spécifie le type. Il prend la valeur 1 pour indiquer une adresse effective. - les bits 1 à 2 représentent le mode. Il peut prendre les valeurs suivantes: - 00 indique un Pointeur Direct. - 01 indique un Pointeur Indirect. - 10 est réservé pour un usage futur. - 11 indique un Pointeur Faute. - le bit 3 indique le format. Il vaut 0. La valeur 1 est réservée pour une extension future. - les bits 4 à 5 représentent le niveau de "partageabilité" (PR). - les bits 6 à 25 représentent le NTS. - les bits 26 à 31 représentent le NETS. - les bits 32 à 63 représentent l'ARS. Le terme de registre opératoire est un terme générique qui désigne les registres utilisés dans la manipulation d'information, comme les opérations portant sur des entiers signés et non signés, les opérations logiques, les opérations portant sur des nombres en virgule flottante. Les registres opératoires sont représentés par un ensemble comportant jusqu'à 64 registres élémentaires de 32 bits qui peuvent être associés dans différents groupages. Les deux Figures 12 et 13 qui suivent représentent leur disposition dans les diverses configurations possibles 1) Arithmétique virgule fixe et opérations logiques: - 24 - Dans le mode Virgule Fixe, Court, il y a 64 Registres Généraux à 32 bits (RG). Les registres numérotés 1 à 15 peuvent être utilisés comme Registres d' Index (RX). Dans le mode Virgule Fixe, Long, il y a 32 Registres Généraux à 64 bits (RG). Les registres numérotés 1 à 15 peuvent être utilisés comme Registres d'Index (RX). 2) Arithmétique virgule flottante: Dans le mode Virgule Flottante, Court, il y a 32 Registres Entier à 32 bits (RE) et 16 Registres Flottant à 64 bits (RFL). Les Registres Entier numérotés 1 à 15 peuvent être utilisés comme Registres d'Index (RX). Dans le mode Virgule Flottante, Long, il y a 16 Registres Entier à 64 bits (RE) et 8 Registres Flottant à 128 bits (RFL). Les Registres Entier numérotés 1 à 15 peuvent être utilisés comme Registres d'Index (RX) . Selon l'invention le mécanisme d'APPEL standard est un APPEL universel, c'est-à-dire qu'il fonctionne quelle que soit la localisation de l'agent qui va rendre le service demandé : ce peut être une procédure dans l'espace d'adresse du processus courant, ce peut être une procédure dans l'espace d'adresse d'un autre processus du même ordinateur monoprocesseur ou multiprocesseur, ce peut être une procédure située sur un autre système dans un réseau local, ou dans le réseau géographique, à des milliers de kilomètres. Cela est rendu possible grâce à la même interface programmatique unique: le générateur de code fait l'hypothèse que la procédure cible sera dans le même espace d'adresse que l'appelant. Si c'est effectivement le cas, alors le transfert de contrôle se fera sans "overhead" additionnel. Si ce n'est pas le cas, alors le contrôle sera transmis à une procédure spécifique de traitement d'exception, qui effectuera les actions nécessaires pour établir la communication et transmettre les arguments entre l'appelant et l'appelé, transformant ainsi de façon automatique un APPEL standard en un APPEL distant. - 25 - L'interface programmatique unique pour cet APPEL universel se compose des étapes suivantes: - "PRéParer APPEL" (PRPAP) Une séquence d'instructions "CRCP" (CRéer CaPabilité), une pour chaque argument passé "APPEL". Si en fin de compte, le transfert de contrôle a lieu hors de l'espace d'adresse du demandeur, les deux premières phases se dérouleront normalement. C'est sur la tentative d'exécution de l'instruction "APPEL" que le déroutement aura lieu vers la procédure de traitement d'exception. L'empilement de procédures est présenté ci-après quand l'APPEL standard est utilisé. La Figure 14 montre la disposition générale d'un Segment Pile: L'empilement de procédures est contrôlé à travers le Registre de Sommet de Pile (SP-Reg). Il pointe toujours vers le prochain byte libre dans le Segment Pile, et est mis à jour en tant que de besoin. A chaque APPEL de Procédure est associé un Elément de Pile. Un Elément de Pile comporte trois zones distinctes: une Zone de Liaison qui permet de faire retour à l'Elément de Pile précédent. une Zone Registres qui contient les images de Registres telles que décrites plus haut. - une Zone de Variables Locales (ZVL), où sont allouées les variables qui n'ont d'existence que pour la durée de l'appel de la procédure (variables "AUTOMATIC" en terminologie PLI). La ZVL est adressée v:.a un registre "capabilité" spécifique, (RC1). Le Registre de Contexte (C-Reg) pointe vers le premier mot du contexte courant. - 26 - La Figure 15 présente, avec plus de détails, un empilement de deux Eléments de Pile: - un élément de pile normal, - un élément de pile créé en réponse à une exception "trap-like", c'est-à-dire se déroulant dans le processus même ou l'événement exceptionnel a eu lieu, qui résulte en un APPEL "simulé". Chaque composant d'un élément de pile est maintenant analysé en détail: 1) Zone de Liaison: La Zone de liaison contient un pointeur vers le précédent contexte, un pointeur vers le précédent sommet de pile, l'adresse suivant l'instruction d'APPEL, l'Etat du Processeur et une zone pour la gestion des exceptions. 2) Zone Registre: Cette zone comporte 3 parties: Registres "capabilité", Registres Pointeur, Registres Opératoires. 3) Zone de Variables Locales (ZVL) : Cette zone est prévue pour contenir des données qui sont "privées" à la procédure, d'une part, et qui n'ont d'existence que pour la durée d'appel de la procédure, d'autre part. Ces données correspondent aux variables qui sont classées "AUTOMATIC" dans la terminologie PLI, à opposer aux variables "INTERNAL STATIC" et "EXTERNAL STATIC". La ZVL est contrôlée par un Registre "capabilité" dédié, (RC1). La partie "IVS" de RC1 pointe sur le premier byte de la ZVL, et la partie "LIMITE" est ajustée à la longueur de la ZVL. Le "SP-Reg" pointe toujours sur le byte suivant la ZVL. - 27 - La ZVL est allouée automatiquement au démarrage de la procédure, avec la longueur définie dans le "Descripteur de Procédure". Cette longueur peut être augmentée ou diminuée pendant l'exécution de la procédure, en fonction des besoins, "LIMITE" et "SP-Reg" étant mis à jour pour refléter ces variations. Un "Descripteur de Procédure" est une structure système qui permet un transfert de contrôle sûr entre procédures, même entre différents domaines qui doivent se protéger contre d'éventuelles tentatives malveillantes de violation d'intégrité de la part d'autres domaines (Les domaines sont dits "mutuellement méfiants"). Un "Descripteur de Procédure" se trouvera dans un Segment Code. La Figure 16 représente un Segment Code, lequel comporte trois sections: Le "Double-Mot Guichet", qui contient un déplacement (Offset) vers le premier 15 mot suivant le dernier Descripteur de Procédure. La Section de liaison au début de laquelle se trouve le Descripteur de Procédure (ou un Tableau de Descripteurs de Procédure si la procédure a plusieurs points d'entrée), suivi d'un tableau de pointeurs "IVD" vers d'autres Descripteurs de Procédure ou vers des données. La section de liaison peut aussi contenir des constantes utilisables dans l'exécution du programme. - La Section Code constituée d'instructions de programme. La Figure 16 montre une séquence de "PRPAP/CRCP/APPEL" dans laquelle l'instruction "PRPAP" référence, dans la section de liaison, un pointeur vers une autre procédure. Un APPEL standard vers un point d'entrée de procédure commence par une 30 instruction "PRPAP" (PRéParer APPEL), qui adresse un Descripteur de Procédure. La Figure 17 représente un Descripteur de Procédure: Un Descripteur de Procédure comporte 4 Mots de 64 bits, selon la disposition qui suit: - Mot 0: - le bit 0 vaut 0 pour indiquer un pointeur de type "IVD" vers le point d'entrée. - les bits 1 et 2 représentent le "Mode". Ils valent 00 pour un Descripteur de Procédure normal. Une valeur 1l indique un Descripteur de Procédure "Faute" qui est utilisé pour déclencher l'action d'une Procédure Spécifique de Traitement d'Exception, pour transformer un APPEL normal en APPEL distant. - le bit 3 représente le Format. Il vaut O. La valeur 1 est réservée pour des extensions futures. - les bits 4 à 13 sont Réservés pour Utilisation Logiciel (RUL) - les bits 14 à 25 représentent le NTS-OFFSET du Point d'Entrée de la Procédure. - les bits 26 à 31 représentent le NETS du Point d'Entrée de la Procédure. - les bits 32 à 63 représentent l'ARS du Point d'Entrée de la Procédure. - le Mot 1 a la même disposition que le Mot 0, sauf qu'il contient les (NTS-OFFSET, NETS, ARS) de la section de liaison de la Procédure. Le concept de section de liaison a été expliqué ci-dessus. - Mot 2: - les bits 0 à 31 représentent la longueur de la Zone de Variables Locales (ZVL) de la Procédure. - le bit 32, noté P, indique si l'Elément de Pile de la Procédure doit être alloué dans le Segment Pile général, ou dans un Segment Pile du domaine auquel la Procédure appartient. La valeur 0 indique Segment Pile général, la valeur 1 indique Segment Pile du domaine. - les bits 33 et 34, notés MO, indiquent le Mode Opératoire au démarrage de la Procédure: - 00 signifie Virgule Fixe, Court - 01 signifie Virgule Fixe, Long - 10 signifie Virgule Flottante, Court - 11 signifie Virgule Flottante, Long - 29 - - les bits 35 à 63 représentent la longueur de la Section de Liaison de la Procédure. - Mot 3: - les bits 0 à 4 contiennent le nombre de Registres "capabilité" (Nrc) utilisés par la Procédure, moins 1. - les bits 5 à 9 contiennent le nombre de Registres Pointeur (Nrp) utilisés par la Procédure, moins 1. - les bits 10 à 15 contiennent le nombre de Registres Opératoires de 32 bits (Nrg) utilisés par la Procédure, moins 1. - les bits 16 à 19 contiennent le nombre de Registres Pointeur Instruction (Nrpi), moins 1, qui sont réservés pour stocker l'adresse de retour d'un sous-programme ou d'une procédure, et qui ne peuvent être modifiés que par une instruction "Branchement avec Retour" (BRT). Les 16 premiers Registres Pointeur peuvent être utilisés à cet effet. - les bits 20 à 24 représentent le niveau lexical de la procédure. - les bits 25 à 31 Doivent Etre Zéro (DEZ). - les bits 32 à 47 représentent le Numéro d'Extension Décor (NXD) du processeur sur lequel la procédure doit s'exécuter. - les bits 48 à 63 Doivent Etre Zéro (DEZ). Un APPEL de Procédure standard comporte 3 étapes: - une instruction "PRéParer APPEL" (PRPAP) qui lie le nouveau contexte au contexte courant, mémorise l'Etat du Processeur, alloue une certaine quantité d'espace de Pile, et crée certaines structures d'information. un certain nombre d'instructions "CRéer CaPabilité" (CRCP), une par argument passé. - une instruction "APPEL" qui a pour résultat final de transférer le contrôle à la Procédure cible. Le linkage dynamique de domaines est la façon normale de créer un espace d'adresse de processus, après que les structures de contrôle initiales aient été créées, via la Primitive "Création Dynamique de Processus". - 30 - Les Domaines ne sont jamais référencés en tant que tels, mais sont référencés via un appel à l'un de leurs points d'entrée, à travers une référence symbolique. Le linkage dynamique de domaine consiste à allouer dans la TDTS3 du processus les entrées devant décrire les tables de segments du domaine, copier les tables de segments et les segments privés dans l'espace de chaque processus, et remplacer la référence symbolique par un pointeur effectif sur le descripteur de la procédure référencée. L'encapsulation des objets et leur protection sont l'objectif principal (le la nouvelle architecture du processeur "FIP". Définir des Domaines fermés, et, à l'intérieur de ces domaines, des fenêtres de la taille d'un opérande, contribue grandement à cet objectif. Mais certaines procédures Système doivent, en des circonstances particulières, obtenir la faculté de violer ces règles de protection. Pour ne pas donner des "droits permanents de violation" à ces composants Système, il a été imaginé que le seul privilège qu'ils auraient, serait de demander l'inhibition d'une exception de violation, juste pour la durée d'une action précise. Comment marquer ces procédures ? L'idée est que ce privilège ne sera accordé qu'à des Procédures partagées au niveau Système (PR=O), ayant un NTS en dessous d'une certaine valeur, valeur qui sera câblée dans le processeur. De la sorte, une fois que le Système est généré, il n'est plus possible de rajouter des Procédures privilégiées, en particulier il n'est pas possible à partir d'un site distant, d'introduire dans le Système une procédure que l'on ferait passer pour privilégiée. Il y aura 4 Niveaux de Privilège: - Le Niveau de Privilège 3 sera accordé aux Procédures partagées au niveau Système ayant une valeur NTS inférieure à la limite câblée, et dont le Descripteur de Segment comporte le bit "Privilégié" à 1. Ceci définira le Niveau de Privilège Noyau. - Le Niveau de Privilège 2 sera accordé aux Procédures partagées au niveau Système ayant une valeur NTS inférieure à la limite câblée, et dont le Descripteur de Segment comporte le bit "Privilégié" à 0. Ceci définira le Niveau de Privilège Système. Le Niveau de Privilège 1 sera accordé aux Procédures partagées au Niveau Système ayant une valeur NTS égale ou supérieure à la limite câblée, ou aux Procédures non partagées au Niveau Système, et dont le Descripteur de Segment comporte le bit "Privilégié" à 1. Ceci définira le Niveau de Privilège Sous-Système. Le Niveau de Privilège 0 sera accordé aux Procédures partagées au Niveau Système ayant une valeur NTS égale ou supérieure à la limite câblée, ou aux Procédures non partagées au Niveau Système, et dont le Descripteur de Segment comporte le bit "Privilégié" à 0. Ceci définit le Niveau de Privilège Utilisateur. Lorsqu'un Descripteur de Procédure en Mode "Faute" est référencé. l'instruction "APPEL" provoque l'appel à une Procédure spécifique de Traitement d'Exception. Avant d'exécuter 1'"APPEL", le processeur a normalement exécuté l'instruction "PRPAP" (PRéParer APPEL), en dépit du fait que le Descripteur de Procédure est à Faute, et la séquence des instructions "CRCP" (CRéer CaPabilité) une pour chaque argument passé Ceci aura créé l'Elément de Pile embryonnaire précédemment décrit. La Procédure de Traitement d'Exception, quand elle est activée sur l'accès d'un Descripteur de Procédure à Faute, retrouvera la structure pointée par le Descripteur de Procédure à Faute et examinera la nature et l'emplacement de l'agent dont l'action est requise par l'appelant. Elle constituera un message à l'intention du site distant, comportant les arguments de l'APPEL, activera ce site, puis attendra la terminaison du service demandé et récupérera les arguments "en sortie". Les Figures 18 et 19 résument tout ce qui a été dit précédemment sur les Espaces Virtuels, les Domaines, les Segments et les "'capabilités". - 32 - Toutes les entités mentionnées ci-dessus, de même que l'entité Processus, peuvent être considérées comme dynamiques, en ce sens que toutes peuvent être créées dynamiquement, soit en utilisant une Primitive du Système ou en exécutant une ou plusieurs instructions du processeur. Mais certaines d'entre elles requerront un processus lourd pour être créées, alors que d'autres demanderont très peu de temps. Elles sont listées dans l'ordre suivant, de la plus statique à la plus dynamique: Un Espace Virtuel sera considéré comme une entité plutôt statique. - Un Domaine sera également considéré comme une entité plutôt static ue. - Un Segment sera considéré comme une entité statique (s'il est créé une fois pour toutes, tel qu'un Segment Code) ou comme une entité semi statique ou semi dynamique, s'il est créé dynamiquement. La Primitive Système (éventuellement l'instruction processeur) utilisée pour sa création devrait être performante. - Un Processus sera considéré comme une entité semi statique, pour autant que sa création est concernée, mais ce sera une entité purement dynamique en ce qui concerne les opérations qui s'y appliquent, parce que la commutation, l'activation, la suspension ou le redémarrage de processus seront des opérations da processeur. Une "capabilité" est une entité purement dynamique, car dans la plupart des cas il ne faudra que deux instructions processeur pour la créer (éventuellement une 25 seule). En supposant que toutes les extensions d'adressage sont réalisées, la portée d'adressage de chaque processus est de 261 bytes d'espace linéaire, constitué de milliards d'objets discrets "statiques" ou "semi statiques", individuellement protégés: les Segments - d'un seul octet à 16 Teraoctets chaque - et d'un nombre illimité d'objets discrets "dynamiques", individuellement protégés: les "capabilités" - d'un seul octet à 4 Gigaoctets chaque -. - 33 - Un "COB" sera vu par le Système comme n'importe quel autre appareil périphérique, et la connexion d'un nouveau "COB" à un Système existant sera aussi simple que la connexion de tout appareil de ce type. Un "COB" possédera un "N d'appareil" et sera intégré au système informatique comme un appareil périphérique classique, à travers sa connexion physique, d'une part, et son "Driver", d'autre part. Le "Driver" sera constitué : - d'un Module "Visibilité", qui permettra la paramétrisation et d'autres fonctions de génération, d'un Module "Génération de Programmes" qui assurera la génération des programmes locaux du "COB" concerné. Ceci sera réalisé par un "Sous- Compilateur" adapté au "COB", - d'un Module "Contrôle d'Exécution" qui supervisera l'exécution des programmes locaux, et qui sera spécialement chargé du Traitement des Exceptions. 15 L'interface "FIP"/"COB" utilise la mémoire principale comme moyen de communication, à travers un "Bloc de Statut de Processeur" (BSP), dont la structure et le contenu différent pour chaque type de "COB". Pour activer un "COB" donné, le "FIP" utilisera une instruction "ACTIVER" citant le N d'appareil du "COB", avec l'adresse du I3SP comme argument de l'instruction. Symétriquement, pour requérir le service de son "FIP Hôte", le "COB" émettra une instruction "STOCKER BSP ET NOTIFIER". Dès qu'il sera activé, un "COB" chargera les paramètres contenus dans le BSP dans ses registres et débutera l'exécution. Ces paramètres seront constitués de l'adresse début et de la limite du programme local à exécuter, et de celles d'une ou plusieurs zones de Données. Chaque paire "Adresse/Limite" sera chargée dans une paire de Registres du "COB". Le programme local du "COB" pourra être stocké à part du programme principal du "FIP" en particulier s'il doit être partagé ou il pourra être inséré dans celui-ci. - 34 - Le service du "FIP Hôte" peut être explicitement requis à travers l'instruction "STOCKER BSP ET NOTIFIER" comme il a été dit plus haut, mais il peut aussi résulter de l'occurrence d'une exception, soit fonctionnelle (par exemple si une zone de données est épuisée et que des nouvelles données doivent être fournies, ce qui est une façon d'implémenter une forme de mémoire virtuelle), soit anormale. Les conséquences de l'occurrence d'une exception seront les mêmes que celles d'une instruction "STOCKER BSP ET NOTIFIER", et les paramètres de l'exception apparaîtront dans le BSP. Ils seront analysés par le "FIP". Celui-ci, après avoir exécuté les actions nécessaires, et mis à jour le BSP, réactivera le "COB". En général, un "COB" possédera son propre Cache. Il pourra être plus ou moins grand, et même comporter plusieurs niveaux, fonction du type de tâche exécutée par le "COB", et du niveau de performance souhaité, le but étant de minimiser le nombre d'accès à la mémoire principale, qui sera le goulot d'étranglement du système. Ainsi l'architecture de système informatique, selon l'invention, garantit un très haut degré de sécurité, la protection étant intégrée au "hardware" du processeur, et non ajoutée autour de processeurs et de systèmes existants. - 35 - Revendications 1. Architecture de système informatique, caractérisée en ce qu'elle comprend: 5 l'association des deux concepts "CISC" et "RISC", la partie "CISC" assurant l'intégrité du fonctionnement du système informatique au moyen d'un mécanisme de protection supporté par le matériel dudit système informatique, la partie "RISC" assurant l'exécution du système informatique, des moyens d'implémentation d'un mécanisme de relocalisation dynamique d'adresse logique, des moyens de création d'un concept d'espace hyper virtuel/appel universel grâce auquel un réseau complet de systèmes informatiques est visualisé comme un espace d'adressage unique, des moyens de construction d'une ou plusieurs bases de données de grande capacité dans un espace d'adressage de processus, contrôlé par le gestionnaire de la mémoire virtuelle, des pointeurs matériels relogeables étant utilisés pour naviguer à travers les bases de données et pour supporter des références d'un élément de structure de contrôle à un autre élément de structure de contrôle, d'un élément de structure de contrôle à un enregistrement de base de données, et d'un enregistrement de base de données à un autre enregistrement de base de données. 2. Architecture de système informatique selon la revendication 1, caractérisée en ce qu'elle met en oeuvre au moins un processeur central qui assure la susdite intégrité selon le concept "CISC"' et des processeurs satel, ites assurant l'exécution du système selon le concept "RISC". 3. Architecture de système informatique selon l'une des revendications 1 et 2, caractérisée en ce qu'elle comprend des moyens d'adressage basés sur un modèle segmenté à quatre dimensions avec des mots de 64 bits, à savoir: une première dimension permettant quatre niveaux de partage, une seconde dimension permettant un million de tables de segments par niveau de partage, une troisième dimension permettant 64 segments par table de segments et une quatrième dimension permettant 4 gigaoctets par segment. 4. Architecture de système informatique selon la revendication 3, caractérisée en ce que les niveaux de partage comprennent: - un niveau système un niveau zone un niveau groupe un niveau processus. 5. Architecture de système informatique selon l'une des revendications précédentes, caractérisée en ce que la relocalisation dynamique d'adresse logique s'effectue grâce à un mécanisme permettant que des entités "pré-liées" représentées soit par une table de segments, soit par un ensemble de tables de segments, soient affectées dynamiquement à une entrée ou à un ensemble d'entrées d'un tableau de descripteurs de tables de segments. 6. Architecture de système informatique selon la revendication 5, caractérisée en ce que le susdit tableau de descripteurs de tables de segments (TDTS) se compose de descripteurs de tables de segments (DTS), dont chacun décrit une table de segment et est sélectionné par le numéro de table de segments (NTS) de l'entité cible, un descripteur de table de segments (DTS) pouvant être "Direct" et pointer vers une table de segments (TS) en mémoire ou être "Faute Direct" et contenir l'adresse en mémoire auxiliaire de la table de segments cible. 7. Architecture de système informatique selon la revendication 6., caractérisée en ce qu'une Table de Segments se compose d'un parmi différents types d'en-têtes et d'un Tableau de Descripteurs de Segments (DS), dont chacun décrit un Segment, et est sélectionné par le Numéro d'Entrée de Table de Segments (NETS) de l'entité cible, et en ce qu'un Segment est une zone contiguë d'espace virtuel, défini par son déplacement du début de l'espace virtuel considéré, et sa dimension en octets, un segment pouvant commencer et finir à n'importe quel octet: d'un espace virtuel. 8. Architecture de système informatique selon la revendication 1, caractérisée en ce qu'elle comprend des procédures privilégiées identifiées par une adresse particulière dans le susdit espace d'adressage de processus, la susdite adresse étant inférieure à une limite câblée dans le processeur du système informatique. 9. Architecture de système informatique selon la revendication 8, caractérisée en ce que les susdites procédures privilégiées et celles possédant une capabilité propriétaire ont le privilège de demander la suspension d'une exception de violation de lecture ou d'écriture. 10. Architecture de système informatique selon la revendication 1, caractérisée en ce que l'attachement à des structures système décrivant l'ensemble des processus, de structures de données représentant un processus, ne peut se faire que si le processeur du système informatique opère déjà au plus haut niveau de privilège, interdisant que des procédures non privilégiées ne puissent introduire dans le système informatique un espace d'adresse factice.