FR 2645664 A1 19901012 FR 9004228 A 19900403 La présente invention concerne le domaine des micropro- cesseurs à semiconducteurs. Elle a pour objet une procédure permettant, au sein d'un microprocesseur, de commander des vérifications d'alignement par des "bits de mode". Grâce à concept, on permettra au programmeur de choisir s'il y aura ou non production d'un défaut au cas o une référence mémoire correspond à une adresse désalignée. Le mode de réalisation actuellement pré- féré est incorporé à l'architecture du microprocesseur Intel 80486, également appelé "processeur 486 ". Le processeur 486@ est une version améliorée du microprocesseur Intel 80386, également connu sous le nom de "processeur 3860" (Intel, 80386, 386, 80486 et 486 sont des marques déposées de Intel Corporation). Le microprocesseur 80486 est un membre à hautes perfor- mances à 32 bits de la famille de processeurs x86 Il est compatible par son code objet avec le processeur 80386. Il en résulte qu'il peut faire tourner un code développé pour des membres antérieurs de la famille. De façon générale, il consiste en une nouvelle mise en oeuvre de l'architecture 80386 dans le but de permettre une amélioration des per- formances d'un facteur d'au moins 2,5, lorsqu'on mesure ces performances par le nombre moyen de cycles d'horloge par instruction. La présente invention représente l'une de ces caractéristiques du microprocesseur 80486 qui contribuent à cette amélioration des performances. Comme on l'a mentionné plus haut, la présente invention ajoute à un microprocesseur la possibilité de pouvoir choi- sir si l'on produit ou non un défaut au cas o une référence mémoire dans un programme correspond à une adresse désali- gnée. Habituellement, une adresse d'une donnée est considé- rée comme étant alignée si elle est un multiple de sa lon- gueur. Une donnée sur un octet est toujours alignée. Une donnée sur deux octects est alignée si son adresse est un multiple de deux. Une donnée sur quatre octets est alignée si son adresse est un multiple de quatre, et ainsi de suite. Les données sont donc généralement alignées lorsque l'a- - dresse est un multiple de leur taille. L'importance des références mémoire alignées devient plus évidente lorsque l'on considère l'architecture interne de la mémoire d'un microprocesseur. Dans la plupart des ordina- teurs, la mémoire est organisée de telle manière que la taille des données soit égale à la largeur mémoire. Si l'on a une mémoire organisée sur 32 bits, ceci signifie que l'on peut, en un seul cycle mémoire, accéder à un élément de 32 bits qui a une adresse qui est un multiple de quatre (un mot de 32 bits est souvent appelé "double mot", un double mot étant constitué de quatre octets séparés, par exemple 0, 1, 2 et 3). L'unité centrale de traitement, aussi bien celle du 80386 que celle du 80486, permet de faire référence à des données situées en une adresse quelconque. Si la référence n'est pas alignée, le microprocesseur est alors pénalisé dans ses performances, ce qui se manifeste par des cycles memoire supplémentaires nécessaires pour accéder ou faire référence aux données. Considérons une référence mémoire à un double mot de 32 bits commençant à l'adresse 3. Avec les manières de procéder antérieures, le processeur aurait fait référence à deux doubles mots: tout d'abord au double mot commençant à l'adresse 0, afin d'extraire l'octet 3, puis au double mot commençant à l'adresse 4, afin d'extraire les octets restants 4, 5 et 6. Après avoir accédé aux octets requis, le processeur les aurait rassemblés afin de reconstruire l'élé- ment de donnée ou référence mémoire. C'est pourquoi les ma- nières de procéder antérieures sont pénalisantes au moins à deux égards: (1 ) on a besoin d'au moins deux cycles mémoi- res supplémentaires et (2 ) il faut reconstituer ou "recol- ler les morceaux" de l'élément de donnée dans un nouvel em- placement mémoire. Pour pallier cet inconvénient, on a proposé plusieurs autres manières de procéder. Par exemple, dans le 80386, on peut exécuter des vérifications d'alignement par insertion, dans la ligne, d'un code traitant chaque référence mémoire. Ce code produit une adresse dans un registre puis masque les bits inférieurs du registre. L'opération de masquage est mise en oeuvre en prenant les mêmes éléments du registre et en ajoutant un déplacement d'alignement. Essentiellement, on doit exécuter une série de trois instructions distinctes pour traiter de cette manière chaque référence mémoire. Comme, dans un programme, on a typiquement la moitié des instructions qui font référence à la mémoire d'une façon ou d'une autre, ceci représente une charge inacceptable, qui peut aller jusqu'à 20 à 30 % de dégradation des perfor- mances. Plusieurs machines, tout particulièrement les nouveaux processeurs RISC (Reduced Instruction Set Computer: calcu- lateur à jeu d'instructions réduit), ont besoin que toutes les références mémoire soient alignées. Ces machines génè- rent toujours des erreurs en cas de référence à des données désalignées. Cependant, il n'est pas possible de sélection- ner les défauts, de sorte que les défauts sont produits de façon invariable. Ceci pose un problème, car de nombreux environnements (tout particulièrement le COBOL) ne faisant pas appel à l'intelligence artificielle bénéficient de la possibilité de faire référence à des données désalignées. Une autre catégorie de machines autorise les références dé- salignées, quoiqu'avec la pénalisation des performances indiquées plus haut. Ces machines comprennent le 80386 d'Intel, le VAX de Digital et l'IBM 370. C'est pourquoi, dans ce domaine, on aurait besoin d'un nouveau procédé per- mettant de produire de façon optionnelle des défauts d'a- dressage désaligné qui ne souffre pas des pénalisations de performances indiquées plus haut. Comme on le verra, la présente invention propose un moyen permettant d'effectuer une vérification d'alignement qui soit sélectionnable par l'utilisateur et qui ne nécessite aucune instruction supplémentaire. En outre, l'invention autorise deux niveaux de masquage pour la procédure de véri- fication d'alignement: l'un au niveau de l'application et l'autre au niveau du système d'exploitation. Grâce à sa capacité à masquer le piégeage ou le défaut lui-même, l'invention offre à l'utilisateur deux possibilités de contrôle de la vérification d'alignement. Le but de la présente invention est, ainsi, de proposer un moyen permettant de détecter un désalignement de données par inadvertance. Dans le cadre du débogage des programmes, l'a- lignement des données peut accroitre notablement les performances. Un autre but de la présente invention est de proposer des moyens pour générer des défauts d'alignement dans certains programmes d'intelligence artificielle qui utilisent des bits d'adresse d'ordre inférieur pour identifier des types de pointeurs puis exécutent de faibles déplacements pour faire sortir ces bits d'étiquette afin de réaliser l'ajuste- ment et obtenir une adresse alignée. La présente invention assure une vérification du type de pointeur sans pénalisa- tion notable des performances. Des mesures expérimentales ont indiquées que la présente invention permet d'obtenir une amélioration de 30 % des performances avec des programmes moyens d'intelligence artificielle tournant sur le micropro- cesseur 80386. D'autres études ont montré une amélioration de 20 % sur d'autres machines. On va décrire à cet effet un microprocesseur comprenant un moyen pour détecter des références de données désali- gnées. Le moyen détecteur est sélectionnable de sorte que, lorsque ce moyen détecteur est activé et que l'on fait référence à un objet de données désaligné, on produise un défaut qui interrompt l'exécution du programme en cours. Le moyen détecteur fait partie de l'unité de segmentation du microprocesseur que l'on décrira ici. Dans le mode de réalisation préféré, le microprocesseur comporte également un dispositif de protection permettant d'autoriser l'accès à certains objets de données à divers niveaux de privilège. Le moyen détecteur comporte deux bits de mode mémorisés au sein du microprocesseur. Le premier bit de mode assure le masquage du défaut au niveau d'exécution le moins privilégié (c'est-à-dire le niveau des applications), tandis que le second mode de bit assure le masquage du défaut au niveau le plus privlégié (c'est-à-dire le niveau du système d'exploi- tation). Ainsi, l'accès aux bits de mode, ou de masque, est obtenu à deux niveaux différents. Les deux bits de mode doivent être positionnés à '1' pour que le moyen détecteur soit activé. L'utilisation de deux bits de mode distincts pour permettre une activation optionnelle de la vérification d'alignement assure la souplesse optimale de programmation. On va maintenant décrire, en référence aux dessins annexés, un mode de réalisation de la présente invention, qui ne devra être considéré que comme purement illustratif, sans caractère limitatif. La figure 1 illustre les quatre niveaux de privilège permis par le microprocesseur de l'invention. Le niveau le plus sûr est indiqué par le niveau 0 et le niveau le moins sûr est indiqué par le niveau 3. La figure 2 illustre le registre EFLAGS situé dans le microprocesseur de l'invention. Le registre EFLAGS possède un bit supplémentaire (le bit AC), défini dans les 16 bits supérieurs, afin de pouvoir gérer les défauts en cas d'accès à des données désalignées au niveau de privilège 3. La figure 3 illustre le registre CR0 de commande du statut machine, qui contient un bit de masquage d'alignement AM qui commande le point de savoir si le bit AC dans le registre EFLAGS autorise ou non un défaut d'alignement. La figure 4 est un diagramme général par blocs du micro- processeur de la présente invention. La figure 5 est un diagramme montrant la manière dont la vérification d'alignement est mise en oeuvre, du point de vue logique, dans le mode de réalisation actuellement pré- féré de la présente invention. On va décrire un microprocesseur comprenant un moyen pour choisir si l'on doit ou non générer un défaut chaque fois que l'on détecte une référence mémoire désalignée. Dans la description qui va suivre, on donnera de nombreux détails particuliers tels que des longueurs binaires, des contenus de registre, des diagrammes logiques, etc. afin de permettre une compréhension complète de la présente invention. L'homme du métier verra cependant que ces détails particuliers n'ont pas besoin d'être repris pour mettre en oeuvre la présente invention. Inversement, on n'a pas représenté en détail des structures et des circuits bien connus afin de ne pas alourdir inutilement la description de la présente inven- tion. Avant de décrire le mode de réalisation détaillé, il peut être tout d'abord utile, pour la compréhension de la pré- sente invention, de considérer diverses caractéristiques de l'architecture du microprocesseur 80486. Architecture de base du microprocesseur Avec l'importance croissante des ordinateurs dans notre société, les microprocesseurs mettent de plus en plus sou- vent en oeuvre un mode d'adressage virtuel protégé (mode protégée). Le mode protégé inclus dans le microprocesseur 80486 permet de faire tourner concurremment plusieurs appli- cations, mais en les isolant les unes des autres, de sorte qu'un incident sur une application n'affecte aucune des autres applications. La caractéristique centrale d'un dispo- sitif de protection est le "sélecteur". Au lieu d'accéder directement à une partie quelconque du système, un programme traite avec un sélecteur aui accorde l'accès à un objet système. On associe à chaque objet des informations le con- cernant, par exemple sa position, sa taille, ses restric- tions d'utilisation, etc. Dans le microprocesseur 80486, seul le système d'exploitation a accès aux données référen- cées par le sélecteur, qui sont appelées "descripteurs". Les descripteurs décrivent en détail un objet système. Les segments mémoire sont un type d'objet système. Parmi les autres objets système, on trouve les tables qui permettent de gérer le dispositif de protection, les segments parti- culiers qui mémorisent l'état du processeur, etc. En exa- minant le sélecteur, le matériel détermine celui des des- cripteurs qui est associé au sélecteur et à l'objet sur lequel pointe le descripteur. L'une des rubriques qu'indique le descripteur est le niveau de privilège de l'objet. Lorsqu'un programme demande l'accès à un objet, soit on refuse l'accès (si la requête viole une règle du dispositif de protection, le contrôle passe du programme à une routine désignée du système d'exploitation), soit on autorise l'ac- cès mais on ne l'accorde pas (par exemple, si l'objet n'est pas actuellement en mémoire, une routine du système d'ex- ploitation doit effectuer une opération de permutation pour mettre l'objet en mémoire et rendre le contrôle au program- me), soit on accorde l'accès au niveau de privilège demandé. Le processeur 80486 peut gérer quatre niveaux de privilège croissants, numérotés 3, 2, 1 et 0, comme illustré figure 1. Le niveau de privilège 0 est le niveau le plus privilégié. Le niveau de privilège du sélecteur dans le registre de segment de code CS identifie le niveau de pré- séance de la routine en cours d'exécution, et il est appelé "niveau de privilège courant" CPL. Pour des raisons de fia- bilité, seul le code le plus digne de confiance du système d'exploitation tourne au niveau de privilège le plus élevé (CPL = '0'). Les applications qui peuvent échouer sont exé- cutées au niveau de privilège le plus faible (CPL = '3'). Les divers niveaux de privilège ont été illustrés sur la figure 1 sous forme d'une série de cercles concentriques (le terme "privilège" connote des droits ou des avantages qui ne sont pas normalement accordés; dans le microprocesseur 80486, les procédures tournant dans les cercles situés les plus à l'intérieur peuvent accéder à des objets de données situés dans les cercles situés les plus à l'extérieur, mais des procédures des cercles extérieurs ne peuvent pas accéder à des objets des cercles intérieurs disposant d'un privilège plus grand). Comme cela sera décrit plus en détail, la présente inven- tion permet de masquer la caractéristique de vérification d'alignement à la fois au niveau de l'application (par exemple CPL = '3') et au niveau du système d'exploitation (par exemple CPL = '0'). Cette possibilité de choix du mas- quage à deux niveaux de privilège différents permet à la présente invention d'être compatible avec les machines qui opèrent toujours, ou n'opèrent jamais, de piégeage en cas de référence désalignée. Par exemple, au niveau du système d'exploitation, la caractéristique de vérification d'aligne- ment peut être désactivée à la réinitialisation, ce qui la rend compatible avec le microprocesseur 80386. Dans certains langages de programmation tels que le C ou le Pascal, lorsque l'on déclare le type de donnée lors de la compi- lation, on attribue au sélecteur un tag ou étiquette corres- pondant de façon permanente à ce type de donnée. En d'autres termes, le type de donnée ne change pas lorsque le programme s'exécute. En revanche, dans certains langages d'intelligen- ce artificielle tel que le LISP ou le Prolog, on ajoute une souplesse supplémentaire par les attributions de type at- trLbution au temps de l'exécution. Dans ces langages, le type de donnée peut varier lors de l'exécution du programme. Ceci permet à l'utilisateur de définir une fonction qui opérera sur des types multiples (par exemple 'x, avec x pouvant être soit un entier, soit un nombre réel court, soit un nombre réel long, soit un nombre complexe, etc.). Ainsi, en fonction du type de donnée en un point particulier du programme, on peut exécuter une multiplicité de fonctions. Dans les programmes LISP ou Prolog, le champ de pointeur indique à la fois l'adresse et le type de la donnée. La rubrique qui identifie le- type de donnée est appelé tag ou étiquette. Le programmeur utilise les deux bits inférieurs d'un pointeur sur 32 bits comme bits d'étiquette de poids fort. Dans les cas o le type de donnée doit être un certain type ou lorsque l'opération est invalide, ou dans ceux des cas o le programmeur s'attend à ce que le type de donnée soit d'un certain type avec une fréquence largement prépon- dérante, l'utilisateur peut générer un code qui suppose que l'étiquette possède une valeur donnée. Ce code annule les bits inférieurs de l'étiquette. Par exemple, si l'étiquette a une valeur de 2, le code ajoutera une valeur -2 pour sup- primer les bits d'étiquette. Ce décalage ou suppression est également appelé "déplacement". Si le déplacement est correct, la rubrique mémcire sera alignée et la donnée pourra être référencée sans subir de défaut ou de piégeage. Lorsque l'on exécute des programmes d'intelligence artificielle en utilisant la présente invention, les références mémoire seront alignées aussi longtemps que le déplacement coïncidera avec l'étiquette. En revanche, si le déplacement ne coïncide pas avec l'étiquette, le vérifica- teur d'alignement de la présente invention générera, de façon optionnelle, un piégeage ou un défaut. Lorsque ceci a lieu, le point actuel d'exécution (CS:EIP) et le contenu du 1o registre des drapeaux EFLAGS sont sauvegardés sur la pile et contrôlent le transfert à une routine logicielle appelée "gestionnaire des interruptions". Un numéro particulier d'interruption est associé à chaque situation de défaut. Le pointeur d'instruction sauvegardé sur la pile après l'appa- rition d'un défaut pointe sur l'instruction qui a provoqué le défaut. Ainsi, le système d'exploitation peut corriger la situation et reprendre l'exécution de l'instruction. Diagramme général par blocs du microprocesseur On a illustré sur la figure 4, sous forme d'un diagramme général par blocs, le microprocesseur de l'invention incor- porant la caractéristique de vérification d'alignement que l'on a exposée. Le microprocesseur comprend une unité d'in- terfaçage de bus 10 qui est relié à un bus de données externes 30 sur 32 bits et qui, de plus, est reliée à un bus d'adresses 31 et à plusieurs autres lignes de commande. L'unité d'interfaçage de bus 10 ne considère que les adres- ses physiques (matérielles), de sorte que les adresses d'opérande doivent passer tout d'abord par l'unité de seg- mentation 14 et par l'unité de pagination 13. L'unité d'an- témémoire 12 et une unité de pré-recherche sont également reliées à l'unité d'interfaçage de bus 10. L'unité de pré-recherche demande de façon continuelle à l'unité d'in- terfaçage de bus d'aller chercher le contenu mémoire de l'adresse de l'instruction suivante. Dès que l'unité de pré- recherche reçoit la donnée, elle la place dans la file d'attente et, si la file d'attente n'est pas pleine, demande une autre rubrique de 32 bits de mémoire. L'unité d'antémémoire 12 comprend une antémémoire de données et une unité de commande qui contrôle les accès de l'antémémoire. L'unité de pré-recherche 11 et l'unité d'an- témémoire 12 sont toutes deux reliées à l'unité de segmen- tation 14 via un bus sur 32 bits. L'unité de segmentation 14 traduit les adresses segmentées en adresses linéaires. L'unité de segmentation 14 est reliée à l'unité de pagination 13 et à l'unité d'antémémoire 12 par l'intermédiaire d'un bus d'adresse linéaire sur 32 bits 20, également appelé "bus LA" (LA = Linear Address: adresse linéaire). L'unité de pagination 13 prend les adresses liné- aires produites par l'unité de segmentation 14 et les convertit en adresses physiques. Si la pagination est dézactivée, les adresses linéaires de l'unité de segmenta- tion deviennent les adresses physiques. Si la pagination est activée, les adresses linéaires du microprocesseur 80486 sont divisées en blocs de 4096 octets appelés "pages". Chaque page peut être mappée sur une adresse entièrement différente. Pour les besoins de la compréhension de la présente invention, on supposera que l'unité de segmentation 14 est la même que celle utilisée dans le microprocesseur Intel 80386 disponible dans le commerce. Les unités de seg- mentation et de pagination du microprocesseur Intel 80386 sont décrites dans une demande de brevet apparentée, corres- pondant à la demande déposée aux USA le 13 juin 1985 sous le numéro 744389, et intitulée Memory Management for Micro- processor, qui appartient à la Demanderesse. Au sein du microprocesseur, les instructions sont appliquées à l'unité de décodage d'instruction 15. L'unité de décodage fonctionne d'une manière semblable à celle de l'unité de pré-recherche. Elle prend les divers octets dans la file d'attente de pré- recherche et détermine le nombre d'octets-nécessaire pour achever l'instruction suivante. L'unité de décodage opère avec une unité de commande 19 dans laquelle sont mémorisées des instructions de microcode, l'unité de commande 19 déli- vrant des séquences de signaux de commande pour le micro- processeur. L'unité de décodage -'instruction 15 a été re- il présentée reliée à l'unité de commande 19, alors que l'unité de commande 19 a été illustrée reliée à l'unité de segmen- tation 14, à l'unité de données 18 et à l'unité à virgule flottante 17. L'unité de données 18 est une unité arith- métique et logique (UAL) qui exécute des fonctions UAL d'une manière semblable à celle du microprocesseur Intel 80386. Le microprocesseur comprend également une unité à virgule flottante 17 servant à exécuter des calculs en virgule flottante. La configuration précise de l'unité à virgule flottante 17, ainsi que des autres unités du micropro- cesseur, n'est pas essentielle pour la compréhension de la présente invention. Les flux de signaux entre les diverses unités du microprocesseur ne seroht décrits que dans la mesure o ils sont nécessaires pour comprendre la présente invention. Description du mode de réalisation préféré Le vérificateur d'alignement sélectionnable de la présente invention est visible de l'extérieur par le programmeur sous forme de deux nouveaux bits d'état (ou de mode). L'un des bits se trouve dans le registre EFLAGS et sera appelé "bit AC" (AC = Alignmrent Check: vérification d'alignement) . Le registre EFLAGS conserve l'information de statut relative à l'instruction courante (le registre EIP contient l'adresse de l'instruction en cours d'exécution) ainsi qu'un certain nombre de champs relatifs à différentes instructions. L'autre bit, appelé "bit AM" (AM = Alignment Masking = masquage d'alignement), est situé dans le registre de commande CR0. On a illustré sur la figure 2 les détails du registre EFLAGS (on notera que les bits de drapeau 1, 3, 5, 15 et 19 à 31 sont "indéfinis"). Le bit AC est situé à la position du - bit 18. Le bit AC active la génération de défaut si la réfé- rence mémoire concerne une adresse désalignée. Par exemple, ceci peut être provoqué par un accès de mot à une adresse impaire, un accès de double mot à une adresse qui n'est pas zéro modulo 4, ou une référence de huit octets à une adresse qui n'est pas zéro modulo 8. Les défauts d'alignement sont générés seulement au niveau 3, c'est-à-dire que l'on ignore le positionnement du bit AC (il est implicitement à zéro)- aux niveaux 0, 1 et 2. Les références aux tables de descripteurs (pour les chargements du sélecteur) sont impli- citement des références au niveau 0, même si l'instruction "amenant" la table de descripteurs est exécutée au niveau 3. Dans le mode de réalisation préféré, on rend compte des défauts d'alignement par l'intermédiaire du bit d'interrup- tion 17, avec un code d'erreur de '0' (le bit 17 et le bit de mode virtuel (VM) qui indique que le flux de l'ins- truction en cours d'exécution est du code x 86 lorsqu'il est établi à 1). Le tableau suivant donne la liste des alignements requis pour les divers types de données du microprocesseur: TABLEAU 1 Alignement requis en fonction du type de donnée Type de donnée Alignement Mot 2 Double mot 4 Nombre réel court 4 Nombre réel long 8 Nombre réel temporaire 8 Sélecteur 2 Pointeur segmenté de 48 bits 4 Pointeur plat de 32 bits 4 Pointeur segmenté de 32 bits 2 "Pseudo-descripteur" de 48 bits 4 Zone de sauvegarde FSTENV/FLDENV 4/2 (sur taille opérande) Zone de sauvegarde FSAVE/FRSTOR 4/2 (sur taille opérande) Chaine de bits 4 Du fait que la vérification d'alignement doit être activée séparément pour chaque tâche, on a inclus cette caractéristique dans le registre EFLAGS car chaque tâche possède sa propre "copie" de EFLAGS. On a illustré sur la figure 3 le registre de commande CR0 contenant le bit AM de commande de masquage d'alignement. Le registre de commande CR0 est l'un de plusieurs registres de commande qui assurent la régulation de la pagination et du fonctionnement du co-processeur numérique du microproces- seur. Comme illustré sur la figure 3, le bit de commande de masquage d'alignement est à la position binaire 18 de CR0. Le bit AM commande la possibilité pour le bit AC se trouvant dans EFLAGS d'autoriser ou non un défaut d'alignement. AM = 0' désactive la commande (par exemple dans le cas d'une compatibilité avec le microprocesseur 80386), tandis que AM = '1' l'active. On ne peut accéder au bit AM qu'au niveau de privilège 0, de sorte que, en principe, seul le système d'exploitation pourra y accéder. Le système d'exploitation ne va positionner ce bit à '1', afin d'activer les défauts d'alignement, que si le système d'exploitation contient le gestionnaire d'interruptions approprié. L'utilisation des deux bits pour activer les vérifi- cations d'alignement assure une très grande souplesse de fonctionnement. Le bit AM permet une commande globale par le système d'exploitation, car il est situé dans le registre CR0 qui est global pour toutes les tâches et il ne peut être référencé que par le système d'exploitation. Typiquement, il sera positionné lors de l'initialisation du système d'ex- ploitation, à condition que le système d'exploitation con- tienne le gestionnaire d'interruptions approprié (en consi- dérant par exemple le bit 17 de CR0). Le bit AC permet une commande au niveau de l'application. Il se trouve dans le registre EFLAGS, qui est échangé lors descommutations de tâches et qui est accessible par une application qui s'exécute au niveau 3. Comme EFLAGS est échangé lors des commutations de tâches, tout se passe comme si chaque tâche possédait une copie privée de EFLAGS, et donc sa propre copie du vérificateur d'alignement. Typique- ment, les programmes d'intelligence artificielle n'ont besoin de disposer d'une vérification d'alignement qu'au niveau 3, c'est à dire au niveau des applications. En ayant accès aux deux bits de masque, le programmeur possède deux possibilités de sélectionner l'exécution ou non d'une vérification d'alignement: l'une au niveau des applications (le registre EFLAGS peut être effacé ou chargé par le programme) et l'autre au niveau du système d'exploitation (effacement ou chargement du bit AN). On comprendra que les deux bits opèrent le masquage à tous les niveaux. Cependant, AC est implicitement masqué à tous les niveaux sauf au niveau 3, tandis que le bit AM ne peut être positionné ou remis à zéro (c'est-à-dire manipulé) qu'au niveau 0. La mise en oeuvre du vérificateur d'alignrement de l'in- vention est fondée sur la reconnaissance d'un accès à des données désalignées. Ceci est effectué à partir des trois bits inférieurs du bus d'adresse linéaire sur 32 bits 20 (voir figure 4) et de la longueur du cycle de bus telle qu'ordonnée par l'unité de décodage d'instruction 15 ou par l'unité de commande 19. Les défauts de référence de données désalignées sont générés au sein de l'unité de segmentation 14, qui génère également les adresses linéaires. Le défaut est pris en charge par l'unité de commande 19. Le tableau ci-dessous définit un accès de données désali- * gnées pour des cycles de bus de longueurs différentes en fonction des valeurs des trois bits inférieurs du bus LA 20. Les longueurs des cycles de bus sont déterminées en décodant le champ de "type de requête de bus" venant de l'unité de décodage d'instruction 15 ou de l'unité de commande 19. 3C TABLEAU 2 Longueur du Bus LA cycle de bus (bits Observations (en octets) 2,1,0) 1 xxx Aucun accès désaligné n'est possible. 2 xxl L'accès à l'adresse impaire est désaligné. 4 xxl L'accès à une adresse traversant une xlx frontière de 4 octets est désaligné. 8 xxl L'accès à une adresse traversant une xlx frontière de 8 octets est désaligné. lxx 4ND xxl C'est un cycle de bus 4 octets non effectué. xlx Donc un autre cycle 4 octets va arriver et lxx sera donc traité comme un cycle 8 bits. Une fois que l'on a déterminé qu'il y a eu accès désa- ligné, il est relativement simple de déterminer les autres conditions nécessaires pour générer un défaut. Sur la figure , on a représenté un diagramme des circuits logiques de vérification d'alignement. Les portes logiques 40 à 42 et les verrous 41 et 45 sont utilisés pour décoder les signaux reçus de l'unité de segmentation 14 afin de s'assurer que l'unité 14 est en train de piloter le bus 20 et que le cycle de bus ne sera pas avorté. Les trois bits de rang inférieur du bus LA 20 apparaissent sur les lignes 51 à 53. Ces signaux sont combinés avec des signaux du champ de type de requête de bus provenant soit de l'unité 15 soit de l'unité 19 et appliqués sur les entrées des portes 46 et 69. Globa- lement, la combinaison des portes 46, 48, 49 et 67-72 pro- duit un ensemble de signaux qui indique la longueur en octets de la référence désalignée conformément au tableau 2. Par exemple, la porte 46 produit sur la ligne 80 un signal qui signifie que l'on a une référence désalignée sur deux octets, la porte 67 produit sur la ligne 81 un signal signifiant que l'on a une référence désalignée sur quatre octets, la porte 71 produit sur la ligne 82 un signal signifiant que l'on a une référence désalignée sur huit octets et la porte 49 produit sur la ligne 83 un signal si- gnifiant que l'on a une référence désalignée 4ND. On effectue un OU logique entre les signaux 80 à 83 au moyen de la porte 47, le résultat en étant conservé dans le verrou 50 (les symboles Pl et P2 associés aux verrous de la figure 5 désignent la phase au cours de laquelle chacun reçoit l'im- pulsion d'horloge). Par exemple, les verrous 41 et 59 reçoivent l'impulsion d'horloge à la phase n 2 de l'horloge système, tandis que les verrous 45, 50 et 62 reçoivent l'im- pulsion d'horloge à la phase n l de l'impulsion d'horloge suivante. Les bits AM et AC apparaissant sur les lignes 54 et 55 sont appliqués en entrée à la porte ET 57. Pour générer un défaut de désalignement, l'un et l'autre doivent être à '1'. La sortie de la porte 57 est soumise à un ET logique, par la porte 63, avec les sorties des verrous 45 et 50 ainsi qu'avec le niveau de privilège du programme, délivré sur la ligne 56. Dans le mode de réalisation actuellement préféré, le niveau de privilège, tel que déterminé par les bits CPL de l'unité de commande 19, doit être au niveau 3. Les portes 58 à 62 délivrent également une entrée à la porte ET 63 permettant de s'assurer que le type de cycle -de bus est un type dans lequel les violations AC sont permises (les vio- lations AC ne sont pas permises sur certains cycles; par exemple, elles ne sont pas permises sur les cycles de branchement car, par définition., il s'agit de cycles à octet unique). La sortie de la porte 63 est reliée à l'une des entrées de la porte ET 65. L'autre entrée de la porte ET 65 est la ligne 66 qui donne un signal indiquant, avant que l'on ne génère le signal de défaut, que le pipeline du micropro- cesseur est libre. Globalement, outre le ET logique sur les bits AC et AM, la logique de la figure 5 est conçue de manière à s'assurer que l'on n'effectue aucun accès à aucun des segments du système et que l'on exécute un cycle de bus légitime. La porte ET 65 produit un signal appelé SINTR (Segmentation unit INTeRrupt: interruption de l'unité de segmentation) sur la ligne 67, qui est reliée à l'unité de commande 19, chaque fois que les conditions ci-dessus sont toutes remplies). À réception de SINTR, l'unité de commande arrête immédia- tement toute exécution et fait le nécessaire pour gérer ce défaut de vérification d'alignement. Elle insère deux cycles d'horloge d'opération néant" (NOP) puis force le microcode au point d'entrée correspondant au défaut de vérification d'alignement. A partir de là, le microcode prend en charge toutes les opérations nécessaires pour mémoriser l'adresse de retour et informer le programme utilisateur du défaut. REVENDICATIONS 1. Un microprocesseur, comprenant: - une mémoire, pour conserver des données, - une unité de commande, pour exécuter un programme, et - des moyens de référencement, pour faire référence à des données mémorisées dans cette mémoire à des adresses quel- conques, caractérisé en ce qu'il comprend en outre: - des moyens de détection, pour détecter des références de données désalignées, ces moyens de détection étant sélec- tionnables de manière que, lorsque ces moyens de détection sont activés et que les moyens de référencement font réfé- rence à une donnée désalignée, les moyens de détection génè- rent un défaut qui interrompe ledit programme. 2. Le microprocesseur de la revendication 1, comprenant en outre un système de protection permettant dé donner accès à des données à un niveau de privilège demandé qui identifie la préséance dudit programme, ce niveau de privilège demandé étant l'un des niveaux d'une pluralité de niveaux allant du niveau le moins privilégié au niveau le plus privilégié. 3. Le microprocesseur de la revendication 2, dans lequel les moyens de détection comprennent un premier bit de mode et un second bit dé mode, le premier bit de mode (AC) pou- vant être accédé à tout niveau de privilège et le second bit de mode (AM) ne pouvant être accédé qu'au niveau de privi- lège le plus élevé. 4. Le microprocesseur de la revendication 3, dans lequel le moyen de détection n'est activé que si l'un et l'autre des bits de mode (AC, AM) sont positionnes. 5. Le microprocesseur de la revendication 4, dans lequel les moyens de détection ne sont activés qu'au niveau le moins privilégié. 6. Un microprocesseur, comprenant: - une mémoire, pour conserver des données, - une unité de commande, pour exécuter un programme, et - des moyens de référencement, pour faire référence à des données mémorisées dans cette mémoire à des adresses quel- conques, caractérisé en ce qu'il comprend en outre - un système de protection, pour permettre un accès sélectif à des objets de données en fonction du niveau de privilège dudit programme, et - une unité de segmentation (14), pour traduire des adresses segmentées en adresses linéaires, cette unité de segmentation comprenant des moyens de détection pour détecter des références de données désalignees, ces moyens de détection étant optionnellement activés de manière que, lorsque ces moyens de détection sont activés et que les moyens de référencement font référence à une donnée désali- gnée, les moyens de détection génèrent un défaut qui inter- rompe ledit programme. 7. Le microprocesseur de la revendication 6, dans lequel les moyens de détection comprennent un premier bit de mode et un second bit de mode, le premier bit de mode (AC) com- mandant le défaut au niveau le moins privilégié et le second bit de mode (AM) commandant le défaut au niveau le plus pri- vilégié du système de protection. 8. Le microprocesseur de la revendication 7, dans lequel ledit défaut n'est généré que si l'un et l'autre des bits de mode (AC, AM) sont positionnés, activant ainsi les moyens détecteurs. 9. Le microprocesseur de la revendication 8, dans lequel ledit défaut n'est généré que lorsque l'on n'effectue aucun accès aux segments système dans l'unité de segmentation. 10. Le microprocesseur de la revendication 9, comprenant en outre une unité de pagination (13) reliée à l'unité de segmentation par un bus (20), cette unité de pagination convertissant les adresses linéaires en adresses physiques et certains bits dudit bus identifiant un accès à une donnée désalignée aux moyens de détection, pour des cycles de bus de longueurs différentes. 11. Un microprocesseur permettant d'accéder à des objets de données à des adresses quelconques, caractérisé en ce qu'il comprend: - un système de protection pour accorder l'accès à des objets de données à un certain niveau de privilège, - des moyens de détection, pour détecter des références de données désalignées, ces moyens de détection étant sélec- tionnables de manière que, lorsque ces moyens de détection sont activés et que l'on fait référence à un objet de don- nées désaligné, ces moyens de détection génèrent un défaut, et - des moyens de commande, pour activer et désactiver les moyens de détection, ces moyens de commande comprenant-un premier bit de mode (AC) servant à masquer ledit défaut à un niveau le moins privilégié et un second bit de mode (AM) servant à masquer ledit défaut à un niveau le plus privi- légié.