FR 2621407 A1 19890407 FR 8812826 A 19880930 La présente invention concerne certains perfectionnements matériels et logiciels apportés aux stations de travail qui utilisent un adressage virtuel avec des systèmes d'exploitation multi-utilisateurs à antémémoire à réinscription, notamment des systèmes d'exploitation qui permettent à chaque utilisateur d'avoir en même temps une pluralité de-processus actifs. A cet égard, l'invention sera, par commodité, décrite en référence à un système d'exploitation particulier multi-utilisateurs à plusieurs processus actifs qui est le système d'exploitation Unix. Cependant, l'invention n'est pas limitée à une utilisation en relation avec le système d'exploitation Unix, et ne doit pas être interprétée comme relative à un système qui ne puisse être utilisé qu'avec le système d'exploitation Unix. Dans une station de travail sous Unix, on peut améliorer de façon significative les performances du système en incluant, parmi les éléments du système, une-antémémoire à réinscription à adressage virtuel. Cependant, l'un des problèmes qui se posent avec de tels systèmes est la prise en compte des adresses homonymes, c'est-à-dire de deux ou plusieurs adresses virtuelles qui mappent la même adresse physique de la mémoire réelle. On utilise une logique de purge, de l'antémémoire pour retirer de l'antémémoire virtuelle certains blocs sélectionnés, lorsque l'on doit réaffecter des adresses virtuelles. Si l'on doit réaffecter un domaine adressable (une adresse de page virtuelle, par exemple), on doit alors "purger"--ce domaine de l'antémémoire, c'est à dire en éliminer toutes les occurences des adresses, avant de pouvoir effectuer la nouvelle affectation des adresses. Un bloc d'antémémoire est purgé en invalidant le bit de validité de ses paramétrages et en réinscrivant le bloc-dans la mémoire, si le bloc a.été modifié. La logique de-purge selon la présente invention comporte, schématiquement: une logique permettant d'identifier les ordres de-purge à l'intérieur du "domaine de contrôle", une logique permettant de faire concorder des champs d'adresse SUaKOW sep enb TsuTFe 'san8esTTTIfn saexaequoo saneTsntd azque saTanqaTA sessazpe sap aaqo;;ega inod suaKow sap azqno ua pUaadduoD TT-eAe: @p uoTles aaoD qa 'sToDe sanaeesTTTqn seqxaeuoo sanaTsntd azqua e geb ed uoTq3ToTdxe,p ewm9sAs Sú un:nod ea owgu uue,T suep aouesqid eT aGD8q9p aToWaWaue,T suep aouesUad ap neoeqgp aT 'uoTqu8AuT,T uoTas TTQAe4 ap UOPueO S e OP eTgQqUODu ap en9bTbOT aun qa aeind ap alaQluoD ap enbrbobT eun 'a4xaluoD ap uoTqeD:TgTquepT,p ailsTbax un 'e.Tom9muwue,T suep eDou8sad Op anaoa0etp o0 un 'aTedTouTad eaTomWq aun 'OaXomam eT ap UOIsa6 ap,aTun aun 'uopdT.aDsuTa,.p uoduie un 'nesTAFaadns uoTDezood ap jTq un la uoTjeDT;Tpoui @p 4q un '9TPTTeA ap V q un 4uelodwoo DT2eUm'ap squemu1T soD ap unDeqo 'azTOWuImgque,I @p sDOIq sap unoeqo inod Do:.eum op luG'Ta9 un quea0odwoD SZ eaTouuI9uUe,TI @p saeaqqurietd sep aoDiew @un 'eaouuwmue8,p sDoTq ap 9TIeanTd aun 4ueqodmoD aiTowgmgueT ap sa@uuop sep aoTaqux aun 'saquuop ap snq un a assaape,p snq un DaAe Te22uaD inessaooad un queqodmoD 'Tan;1.A 6essaape ? uoTdTjdsuTg V aeiTouxmquiue aun qu-esTTn TTeTAe ap uoTeqs oz sun asodozd uoquaAuT aques$ad el '4uauigsTDogd snla uoTqetToIdxa,p awmgsAs np neAou GT suep sgagsuT snbT;TDogds,,asznd,, saapao sap qa Ta5Ti eum un sTo; eT V nToDuT uOTquaAuT aquas92d el =Xolu9m el suep zTzDsuT92 v sT;TPOW SI suepopuou0D sDooq sSI 2ATqoe,p quelmawad rnbT6oI aunnb TsuTe 'luepaoDuoD saaowgmguep Dooq sp seo ua aITom9qmue,T Sp 9FPTIetA aP ap 6 ea=-mezed I aePTT-eAu-,P que;smaw d enbT6oT aun uuswTIeB9 pu'=adwoD aIT s-Fuzad sa SooDDe 1@ un fs '(aISanlzTA eaSTOW9u eT V qDoap sDooDe: SSODO 01 úzoSeN TenZzTA lDaoTa) vp-a 8uebo,I no (4uauwaeTez ap 9TeaquGO giTun: ITun. 6uTssaDoz TPzqu&D) nio e.l aed 9-ATTIP anbTun aSbnd @p a@pao unp aTns eTl v azTOuIw9que,P Dolq ap sassaspe,p 9ITTenId aun aaSbnd ap queqamzad anbf6ol-aun (uoT4do us) enb TSuTe 'TD-TnTSD @p as6eaquweaied np alTanZT A s assaape,p dweqD np naIs9gu-,T v qTos aZTowgWglue,p ooIq np alqessaape auTeuop np anaST9.u,TI V qos sanq7s squepuodsaeoo a5TanITTA sssaLpe,p sdweqD sep v 'aband ap sapao un,p anaflzuTa,T ? sqnTs 'SaTInDoTaed aITanqZTA ZO'L z9 pour exécuter, à délivrance d'un ordre de purge, une opération de purge de bloc d'antémémoire avant de rendre le contrôle au processeur central et, dans chacune de ces opérations de purge, pour purger tous les blocs d'antémémoire dont le bit de validité de l'élément associé de la matrice des paramétrages de l'antémémoire est positionné, avant réaffectation des adresses virtuelles. Le détecteur de présence dans l'antémémoire comporte de préférence des moyens pour détecter les blocs d'antémémoire qui ont leur bit de validité de l'élément associé de la matrice des paramétrages de l'antémémoire qui est positionné, des premiers moyens de décision pour déterminer, pour le bloc d'antémémoire adressé par le processeur central, l'adresse du bloc d'antémémoire comportant une pluralité de bits d'adresse virtuelle d'accès, si ces bits d'adresse virtuelle d'accès concordent ou non avec des bits d'un champ d'adresse virtuelle se trouvant dans un élément correspondant de la matrice des paramétrages de l'antémémoire, ainsi que des seconds moyens de décision pour déterminer (i) pour le bloc d'antémémoire adressé par le processeur central, l'adresse du bloc d'antémémoire comportant une pluralité de bits de contexte d'accès, si ces bits de contexte d'accès concordent ou non avec des bits d'un champ d'adresse virtuelle se trouvant dans l'élément correspondant de la matrice des paramétrages de l'antémémoire et (ii) si le bit de protection superviseur est positionné dans l'élément correspondant de la matrice des paramétrages de l'antémémoire. Les moyens pour réaffecter les adresses virtuelles- comportent de préférence un jeu d'ordres de purge, situé à l'intérieur du système d'exploitation partagé, ces-ordres de purge comportant un ordre de purge sur concordance de contexte, un ordre de purge sur concordance de page, et un ordre de purge sur concordance de segment. Les moyens pour exécuter l'opération de purge comprennent de préférence des moyens pour décoder l'ordre de purge, cet - ordre de purge étant un ordre de purge sur concordance de contexte, un ordre de purge'surconcordance de page ou bien 26 2 1 4 3 un ordre de purge sur concordance de segment, des moyens formant registre d'adresse de purge pour mémoriser une adresse se trouvant dans l'ordre de purge décodé, des moyens d'incrémentation, pour incrémenter des bits d'adresses prédéterminés afin de les combiner aux bits d'adresse se trouvant dans les moyens formant registre d'adresse de purge, et des moyens de concordance de purge, reliés aux moyens de décodage, pour produire un signal logique de concordance de purge, de sorte que la délivrance d'un ordre de purge provoque la purge de tous les blocs d'antémémoire ayant leur bit de validité associé qui est positionné, avant réaffectation des adresses virtuelles. D'autres caractéristiques de l'invention apparaîtront à la lecture de la description détaillée ci-dessous, faite en référence aux dessins sur lesquels: - la figure 1 est un schéma par blocs montrant les éléments principaux d'une station de travail utilisant des adresses virtuelles avec une antémémoire à réinscription, - la figure 2a est un diagramme schématique de la logique de vérification de présence dans l'antémémoire 25, - la figure 2b est un diagramme schématique d'un circuit de détection d'une violation de la protection de l'antémémoire, la figure 2c est un diagramme schématique d'un circuit de détection d'une violation de la protection de la MMU, - la figure 3 est un schéma par blocs détaillé montrant le cheminement des adresses utilisé par l'antémémoire à adressage virtuel de la présente invention, - la figure 4 (figures 4a et 4b) est un organigramme, correspondant à une réalisation sous forme d'une machine à états, de certains contrôles relatifs à l'adressage d'une antémémoire à réinscription à adressage virtuel, - la figure 5 est un schéma par blocs détaillé montrant le cheminement des adresses virtuelles utilisé. par la logique de détection des homonymes de la présente invention, - la figure 6 (figures 6a, 6b, 6c et 6d) est un organigramme, correspondant à une réalisation sous forme d'une machine à états, de-certains contrôles relatifs aux transferts de données en direction et en provenance d'une antémémoire à réinscription à adressage virtuel, - - la figure 7 est un organigramme d'une machine à états permettant de mettre en oeuvre le contrôle des cycles de bus de réinscription dans la mémoire, - la figure 8 est un chronogramme correspondant au meilleur cas de séquencement d'une écriture o l'on ne trouve rien dans i'antémémoire, - la figure 9 est un chronogramme correspondant au meilleur cas de séquencement d'une lecture o l'on ne trouve rien dans l'antémémoire, - la figure 10a est un chronogramme du cycle de bus mémoire pour l'exécution d'un cycle de lecture de bloc, - la figure 10b est un chronogramme du cycle de bus - mémoire pour l'exécution d'un cycle de réinscription de bloc, - la figure 11 est un diagramme schématique montrant la mise en oeuvre de la purge de l'antémémoire selon la présente invention, - la figure 12 est un diagramme schématique montrant la logique de détection de concordance de purge du contexte, de concordance de purge de segment et de concordance de purge de page, - la figures 13 (figures 13a à 13e) est un organigramme, correspondant à une réalisation sous forme d'une machine à états, d'une purge de l'antémémoire déclenchée par l'émission d'un ordre de purge, et - la figure 14 est un chronogramme d'une purge de l'antémémoire. La figure 1 montre les blocs fonctionnels d'une station de travail typique utilisant des adresses virtuelles, et dans laquelle on a mis en oeuvre-la présente invention. Plus précisément, cette station de travail comporte un microprocesseur ou unité centrale de traitement ll, une * 35 matrice d'antémémoire de données 19, une matrice de paramétrages d'antémémoire 23, un- comparateur 25 de vérification de présence dans l'antémémoire, une MMU 27 (Memory Management Unit: unité de gestion de la mémoire), une mémoire principale 31, un tampon de réinscription 39 et une logique de contrôle de la station de travail 40. En option, ces stations de travail peuvent également comprendre un registre d'identification de contexte 32, une logique de purge de l'antémémoire 33, une logique DVMA 35 d'accès direct à la mémoire virtuelle et un multiplexeur 37. Dans la présente invention, on a apporté diverses modifications à la logique de purge de l'antémémoire 33, au comparateur de vérification de présence dans l'antémémoire 25 et à la logique de contrôle de la station de travail 40, qui permettent d'améliorer les performances d'une antémémoire à réinscription à adressage virtuel. Description des éléments indispensables à une station de travail La CPU 11 déclenche des cycles de bus afin d'adresser des instructions et des données dans la mémoire (après traduction d'adresse) et, éventuellement, dans d'autres organes du système. L'adresse CPU proprement dite est une adresse virtuelle ayant une taille de A bits, qui identifie de façon univoque des octets d'instruction ou de données dans un contexte virtuel. Le cycle de bus peut être caractérisé par un ou plusieurs champs de contrôle permettant d'identifier de façon univoque le cycle de bus. En particulier, on a besoin d'un indicateur lecture/écriture ainsi qu'un champ de "type". Ce champ identifie l'espace adressable de données et d'instructions de la mémoire ainsi que la priorité d'accès (c'est-à-dire une priorité d'accès "superviseur" ou "utilisateur") du cycle de bus. Comme CPU de station de travail à adressage virtuel pouvant supporter un système d'exploitation multi-utilisateurs, on peut utiliser le MC 68020. Un autre élément indispensable d'une station de travail à adressage virtuel avec antémémoire à réinscription telle que celle illustrée figure 1 est la matrice des données 19 de l'antémémoire à adressage virtuel, qui est organisée sous forme d'une matrice de 2N blocs de données contenant chacun 2M octets. Les 2M octets de chaque bloc sont identifiés de manière univoque par les M bits d'adresse inférieurs. Chacun des 2N blocs est adressé de façon univoque, en tant qu'élément de la matrice, par les N bits d'adresse inférieurs immédiatement précédents. Du fait de l'adressage virtuel de l'antémémoire, les (N+M) bits qui adressent les octets de l'antémémoire proviennent d'un domaine adressable virtuel de (A+ C) bits, les C bits étant des bits de contexte provenant d'un registre d'identification de contexte 32, registre optionnel qui sera décrit plus bas. Les (M+N) bits comprennent généralement les P bits de page non traduite, auxquels s'ajoutent des bits virtuels provenant des (A+C-P) bits définissant l'adresse virtuelle de page. La matrice des données 19 de l'antémémoire à adressage virtuel que l'on décrit ici est une antémémoire "à mappage direct", ou antémémoire "associative à ensemble monovoie". Bien que cette organisation d'antémémoire soit utilisée pour illustrer la présente invention, cela ne veut pas dire que la portée de l'invention en est réduite, et l'on pourrait très bien mettre en oeuvre la présente invention avec des antémémoires associatives multivoies. Un autre élément nécessaire illustré figure 1 est la matrice des paramétrages 23 de l'antémémoire à adressage virtuel, qui possède un élément de matrice des paramétrages pour chaque bloc de données se trouvant dans la matrice des données 19 de l'antémémoire. La matrice des paramétrages contient donc 2N éléments, chacun formé d'un bit de validation V, d'un bit de modification M, de deux bits de protection P constitués d'un bit de-protection superviseur et d'un bit d'autorisation d'écriture, ainsi que d'un champ d'adresse virtuelle VA (et optionnellement de contexte CX), comme illustré figure 3. Le contenu du champ d'adresse virtuelle, avec les bits inférieurs de l'adresse qui sont utilisés pour adresser la matrice des données de l'antémémoire et celle des paramétrages, identifient de façon univoque le bloc d'antémémoire à l'intérieur du domaine d'adressage virtuel de (A+C) bits. Pour cela, -le champ d'adresse -virtuelle de paramétrage doit contenir ((A+C)-(M+N)) bits d'adresse virtuelle. Une logique 25 de vérification de présence dans l'antémémoire compare les adresses virtuelles auxquelles on veut accéder au çontenu du champ d'adresse du paramétrage de l'antémémoire à adressage virtuel. A l'intérieur de l'adresse à laquelle on veut accéder, les M bits inférieurs adressent des octets dans un bloc, les N bits inférieurs immédiatement précédents adressent un bloc à l'intérieur de l'antémémoire, et les ((A+C)-(M+N)) bits restants servent à la comparaison avec le champ d'adresse virtuelle du paramétrage, qui est effectuée par la logique de vérification de présence dans l'antémémoire. La logique de vérification de présence dans l'antémémoire doit, pour les systèmes ayant un système d'exploitation partagé,e identifier les accès à des instructions et des données de l'utilisateur, et à des instructions et des données du superviseur. La définition d'une "présence dans l'antémémoire" qui satisfasse à cette exigence est illustrée sur la figure 2a, o on l'a représentée sous la forme de comparateurs 20, d'une porte ET 22, d'une porte OU 24 et d'une porte ET 26. La MMU 27, qui traduit les adresses du domaine virtuel en une adresse physique, est un autre élément nécessaire. la MMU 27 est organisée sur la base de pages ayant une taille de 2P octets, qui sont elles-mêmes regroupées en segments ayant une taille de 2S pages. L'adressage à l'intérieur d'une page nécessite P bits. Ces P bits sont des bits d'adresse physique qui ne nécessitent aucune traduction. Le rôle de laMMU 27 est de traduire les (A+C-P) ou (A-P) bits d'adresse virtuelle de page en une adresse physique de page de MM bits. L'adresse physique composite est alors formée de MM bits d'adresse de page avec P bits par page. C'est également dans la MMU 27 que l'on contrôle les protections, c'est-àdire o l'on compare la priorité du cycle de bus de l'accès à la protection affectée à la page. Pour illustrer ceci, il existe deux types de protections que l'on peut affecter à une page, à savoir une qualification accès superviseur/accês utilisateur et une qualification protection contre l'écriture/écriture libre. Bien que la présente invention ne soit pas limitée à de tels types de protection, si l'on prend cet exemple de protection de page, une "violation de protection" serait commise si un cycle de bus de priorité "utilisateur" voulait accéder à une page ayant une protection "superviseur", ou bien si un cycle de bus "écriture" voulait accéder à une page ayant une qualification "protection contre l'écriture". La mise en oeuvre du contrôle de protection par la MMU est illustrée figure 2c, o on l'a représentée sous la forme d'un inverseur 28, de portes ET 30a et 30b, d'une porte OU 34 et d'une porte ET 36. En outre, avec une antémémoire à réinscription à adressage virtuel, on peut étendre ce concept de vérification de protection afin-de n'utiliser l'antémémoire que pour des cycles de CPU qui n'accèdent pas à la MMU. Une telle logique de protection de la seule antémémoire est illustrée figure 2b, o on l'a représentée sous la forme d'un inverseur 42, de portes ET 44a et 44b, d'une porte OU 46 et d'une porte ET 48. - On a également représenté sur la figure 1 la mémoire principale, qui est adressable à l'intérieur du domaine des adresses physiques; le contrôle de l'accès à la mémoire principale est effectué par la logique 40 de contrôle de la station de travail. Le tampon de réinscription 39 est un registre contenant un bloc de données d'antémémoire chargé depuis la matrice des données 19 de l'antémémoire. Le tampon de réinscription 39 est chargé chaque fois que l'on doit déplacer un bloc existant de l'antémémoire. Ceci peut être dO au fait que l'on a besoin de mettre à jour le bloc de - l'antémémoire par un nouveau contenu, ou bien parce que le bloc doit être purgé. Dans l'un ou l'autre cas, dans une antémémoire à réinscription l'état du paramétrage de l'antémémoire pour le'bloc d'antémémoire existant détermine' si ce bloc doit être ou non réinscrit dans -la mémoire. Si le paramétrage indique, de la manière dont on le définira plus bas, que le bloc est valable et modifié, le contenu du bloc doit alors être réinscrit dans la mémoire 31 lorsqu'on déplace le bloc d'antémémoire. Le tampon de réécriture 39 conserve temporairement ces données avant qu'elles ne soient inscrites dans la mémoire. La logique 40 de contrôle de la station de travail contrôle le fonctionnement général des éléments de la station de travail illustrée figure 1. Dans le mode de réalisation préféré, la logique de contrôle 40 est mise en oeuvre sous forme de plusieurs machines à états qui sont illustrées aux figures 4, 6, 7 et 13, et qui seront décrites plus en détail ci-dessous à propos de la description de la logique de de purge de l'antémémoire 33 dont, dans le mode de réalisation préféré, des parties sont intégrées à la logique de contrôle de la station de travail. Description des-éléments optionnels de la station de travail Le registre d'identification de contexte 32 est un registre d'adresse externe optionnel qui contient des bits supplémentaires d'adresse virtuelle permettant d'identifier un processus ou contexte virtuel. Ce registre, qui contient C bits, identifie un total de 2C processus d'utilisateur actifs; le domaine adressable virtuel total a une taille de 2(A+C). Un élément important de ce domaine adressable virtuel de 2(A+C) bits est l'espace adressable occupé par le système d'exploitation. Le système d'exploitation est commun & tous les processus utilisateurs, et il est donc affecté à un domaine adressable commun à&tous les processus d'utilisateur actifs. Ainsi, les C bits de contexte sont sans signification pour qualifier les adresses de pages se trouvant à l'intérieur du système d'exploitation. Mais on suppose que le système d'exploitation s'étend à l'intérieur d'une région commune, exclusive, située au sommet des 2A octets du domaine adressable virtuel de chaque contexte actif. Aucune page utilisateur ne peut se trouver dans cette région. Ainsi, les adresses des- pages du système d'exploitation sont identiques pour deux processus ll utilisateurs distincts, tandis que les pages utilisateur des deux processus sont distinctes. Toutes les pages se trouvant dans le système d'exploitation sont marquées avec une protection "superviseur". La logique de purge de l'antémémoire est également un élément optionnel d'une station de travail. Cependant, on a incorporé une logique de purge de l'antémémoire 33 et on l'a modifiée de la manière décrite en détail cidessous afin d'améliorer les performances du système d'antémémoire à réinscription à adressage virtuel. On peut cependant indiquer brièvement que la logique de purge de l'antémémoire 33 fonctionne de la manière suivante: s'il faut réassigner une tranche d'adresses (l'adresse d'une page virtuelle, par exemple), il faut éliminer ou "purger" de l'antémémoire toutes les occurences des adresses se trouvant à l'intérieur de cette tranche avant de pouvoir effectuer l'affectation des nouvelles adresses; un bloc d'antémémoire est "purgé" en invalidant le bit de validation se trouvant dans ses paramétrages, et en réinscrivant le bloc dans la mémoire si le bloc a été modifié. Outre la CPU 11 considérée en tant que source de cycles de bus, la station de travail peut comprendre un ou plusieurs organes externes dientrée/sortie (E/S) tels que par exemple la logique DVMA 35 d'accès direct en mémoire virtuelle. Ces organes externes d'entrée/sortie sont capables de produire des cycles de bus qui viennent doubler la CPU pour l'accès à un ou plusieurs "types" de domaines à adressage virtuel. On appelera "adresse d'accès" l'adresse virtuelle provenant soit de la CPU 11 soit de:la logique DVMA 35, ainsi que l'adresse se trouvant dans le registre -d'identification de contexte 32. Un autre élément optionnel est le tampon de bus de données 37 qui, dans le mode de réalisation préféré, est réalisé sous la forme de rdeux tampons permettant de contrôler le flux de données entre un bus sur 32 bits et un bus sur 64 bits. On a besoin de tels tampons lorsque le bus de données de la CPU est sur 32 bits et que le bus de données de-la matrice de données de 1'antémémaire est sur 64 bits. Description des éléments propres à la station de travail de la présente invention Dans le cas de la présente invention, on modifie la définition de la "présence dans l'antémémoire" de manière à prendre en compte l'utilisation d'un système d'exploitation partagé entre plusieurs contextes utilisateur actifs, ainsi que la priorité des accès et la protection des pages. En opérant ainsi, on peut obtenir une indication efficace d'une violation de protection à l'intérieur de l'antémémoire à réinscription à adressage virtuel. Plus précisément, pour mettre en oeuvre la définition de la protection que l'on a donnée plus haut, on utilise la définition suivante de la "présence dans l'antémémoire". Une "présence dans l'antémémoire" impose trois conditions: 1) le bloc d'antémémoire doit être marqué comme ayant un contenu valable, 2) abstraction faite des C bits de contexte, les (A-(N+M)) bits d'adresse virtuelle d'accès doivent concorder a vec les (A-(N+M)) bits du champ d'adresse virtuelle du paramétrage correspondant, pour le bloc d'antémémoire adressé par les N bits d'accès du bus. 3) on doit avoir soit les C bits de l'identificateur de contexte d'accès qui concordent avec les C bits de contexte correspondants du champ d'adresse virtuelle du paramétrage de l'antémémoire, soit le bit de protection superviseur du paramétrage d'antémémoire qui est positionné comme étant actif. Cette définition d'une "présence dans l'antémémoire" permet d'appliquer directement le contrôle de protection de l'antémémoire à l'antémémoire à adressage virtuel, au lieu de le définir par l'intermédiaire d'un contrôle effectué par la MMU lorsqu'elle gère le cas o l'on n'a rien trouvé dans l'antémémoire. Une "violation de protection", en cas de présence dans l'antémémoire, est commise: 1 si le cycle de bus d'accès a une priorité "utilisateur" et que le bloc d'antémémoire a une protection "superviseur", ou 2 si l'accès est un cycle de bus d'écriture et que le bloc d'antémémoire a une protection contre l'écriture. Un mode de mise en oeuvre du détecteur de présence dans l'antémémoire 25 selon la présente invention est illustré à la figure 2a que l'on a décrite plus haut. la présente invention utilise dans le domaine de contrôle un jeu d'ordres de purge afin de mettre en oeuvre de façon efficace la réaffectation des adresses virtuelles dans une antémémoire à réinscription à adressage virtuel. En général, les ordres de purge sont des cycles de bus du domaine de contrôle qui spécifient, pour chaque type propre d'ordre de purge, un ou plusieurs champs d'adresse virtuelle à comparer à des champs d'adresse virtuelle correspondants dans les paramétrages de l'antémémoire à adressage virtuel. Des champs d'adresse "concordants" provoquent la purge du - bloc d'antémémoire par le matériel. "Purger" le bloc d'antémémoire signifie que: 1) un bloc d'antémémoire concordant qui est marqué comme étant à la fois "valable" et "modifié" est réinscrit dans la mémoire. Ceci nécessite un cycle de bus de réinscription de bloc d'antémémoire dans la mémoire principale. Un cycle de bus de réinscription inscrit le contenu d'un bloc d'antémémoire complet dans-la mémoire principale à l'adresse physique appropriée. A l'intérieur de ce cycle, l'adresse virtuelle identifiant le bloc d'antémémoire est traduite par la MMU en une adresse mémoire physique. Au cours de cette traduction, on inhibele contrôle deprotectiondu bloc d'antémémoire. La traduction d'adresse par le-MMU est exécutée avant de rendre le contrôle au processeur, à l'achèvement de l'ordre de purge. 2) Tout bloo d'arrtémémoire- concordant qui est "valable", - qu'il soit "modifié" ou non, est marqué comme n'étant - -. plus valable. U v.. ' t - -;, *-- ; -- :- : . : . ::Q: 26214 7 Comme on l'a décrit, le cycle de bus de réinscription nécessite la traduction de l'adresse virtuelle du bloc d'antémémoire en une adresse physique. Le concept de l'ordre de purge et du cycle de bus de réinscription peut également être étendu à des antémémoires à adressage virtuel qui contiennent des champs de paramétrage à-la fois d'adressage virtuel et d'adressage physique. Si un champ de paramétrage d'adressage physique est présent, on n'a besoin d'aucune traduction au moment o l'on exécute le cycle de bus de réinscription dans la mémoire principale. Cependant, la présente invention a principalement pour objet l'utilisation de paramétrages d'adresses virtuelles permettant de supporter une antémémoire à réinscription à adressage virtuel. L'ordre de purge que l'on a décrit plus haut s'applique à un bloc d'antémémoire unique.L'application de l'ordre de purge peut également être étendue de telle façon qu'un ordre de purge unique active un matériel qui vérifie plusieurs blocs de l'antémémoire, purgeant les blocs qui concordent avec les champs d'adresses de l'ordre de purge. On a seulement besoin que la traduction d'adresse du dernier bloc d'antémémoire purgé soit achevée avant de rendre le contrôle au processeur, à l'achèvement de l'ordre. On va définir ci-dessous trois ordres de purge spécifiques. Bien que l'on puisse définir d'autres ordres semblables, ces trois ordres sont particulièrement utiles pour restreindre le domaine d'action d'un ordre de purge à un domaine d'adresse minimal. Ces ordres de purge sont également utiles pour mettre en oeuvre un domaine adressable d'un système d'exploitation partagé à contextes multiples. 1) Ordre de purge sur concordance de contexte L'ordre de purge sur concordance de contexte purge de l'antémémoire tous les blocs d'antémémoire se trouvant à l'intérieur d'un contexte spécifié et qui proviennent de pages à protection "utilisateur". Il spécifie un identificateur de contexte de C bits. Le critère de concordance consiste à tout d'abord demander que les paramétrages de l'antémémoire identifient le bloc comme ayant une protection "utilisateur" et, ensuite, quele champ de C bits de l'ordre de purge concorde avec les C bits correspondants du champ d'identification de contexte des paramétrages. L'ordre de purge sur concordance de contexte est utilisé pour s'assurer de la cohérence de l'adressage de l'antémémoire chaque fois qu'un nouveau contexte actif remplace un ancien contexte dans la MMU. La purge sur concordance de contexte doit être exécutée avant de retirer les anciennes références de contexte de la MMUi car on a besoin que la MMU traduise les adresses virtuelles des blocs d'antémémoire.. 2) Ordre de purge sur concordance de page L'ordre de purge sur concordance de page purge de l'antémémoire tous les blocs d'antémémoire se trouvant à l'intérieur d'une page donnée, indépendamment de la protection de la page. Il spécifie une adresse de page de (A+C-P) bits. Le critère de concordance est que, tout d'abord, le champ de (A-P) bits de l'ordre de purge, qui identifie une adresse virtuelle de page à l'intérieur d'un contexte, concorde avec les (A-P) bits correspondants qui identifient l'adresse virtuelle de page d'un bloc d'antémémoire donné. Ces(A-P) bits peuvent se trouver dans le champ d'adresse virtuelle du paramétrage de l'antémémoire ou dans une combinaison de l'adresse d'accès à l'antémémoire et du champ d'adresse virtuelle du paramétrage de l'antémémoire, en fonction de la taille de la page et de la taille de l'antémémoire. - Le second critère de concordance est que l'une des deux conditions suivantes soient remplie: i) le paramétrage de protection d'accès superviseur du bloc d'antémémoire est actif, ou ii) le registre d'identification de contexte de-C' bits concorde avec le champ de-paramétrage d'identification- de contexte correspondant de C bits du bloc d'antémémoire. --,[,,,,: L'ordre de purge sur concordance de page est utilisé pendant la gestion de page afin d'éliminer de l'antémémoire toutes les références à une page virtuelle - qu'elle ait une protection superviseur ou bien une protection utilisateur. Il doit être exécuté avant de mettre à jour la MMU pour retirer la page, car on a besoin de la MMU pour traduire les adresses virtuelles des blocs d'antémémoire. 3) Ordre de purge sur concordance de segments L'ordre de purge sur concordance de segments purge de l'antémémoire tous les blocs d'antémémoire se trouvant à l'intérieur d'un segment donné, indépendamment de la protection de la page. Il spécifie une adresse de segment de ((A+C)-(P+S)) bits, du fait que la taille du segment est de 2S pages. Le critère de concordance est que, tout d'abord, le champ de (A-(P+S)) bits de l'ordre de purge, qui identifie un segment à l'intérieur d'un contexte, concorde avec les (A-(P+S)) bits correspondants qui identifient un segment d'un bloc d'antémémoire donné. Ces (A-(P+S)) bits peuvent se trouver dans le champ d'adresse virtuelle du paramétrage de l'antémémoire ou dans une combinaison de l'adresse d'accès à l'antémémoire et du champ d'adresse virtuelle du paramétrage de l'antémémoire, en fonction de la taille du segment, de la taille de la page et de la taille de l'antémémoire. Le second critère de concordance est que l'une des deux conditions suivantes soient remplie: i) le paramétrage de protection d'accès superviseur du bloc d'antémémoire est actif, ou ii) le registre d'identification de contexte de C bits concorde avec le champ de paramétrage d'identification -de contexte correspondant de C bits du bloc d'antémémoire. L'ordre de purge sur concordance de page est utilisé pendant la gestion de page afin d'éliminer de l'antémémoire À 35 toutes les références à un segment virtuel - qu'il ait une protection superviseur ou bien une protection utilisateur. On peut en avoir besoin, en fonction de la structure de la MMU, chaque fois que les pages d'un segment virtuel complet doivent être réaffectées à un nouveau segment virtuel. Il doit être exécuté avant que la MMU ne soit mise à jour pour retirer le mappage du segment, car on a besoin de la MMU pour traduire les adresses virtuelles des blocs d'antémémoire. Utilisation des ordres de purge Les trois ordres de purge définis cidessus, avec leurs critères de "présence dans l'antémémoire" respectifs, ne sont exécutés que par le système d'exploitation, à l'intérieur du noyau Unix. L'introduction des ordres de purge dans le noyau va être décrit dans le chapitre ci-dessous intitulé "conception du noyau pour une antémémoire à adressage virtuel". En introduisant de façon appropriée les ordres de purge dans le noyau, on peut mettre en oeuvre, dans un système Unix, une réaffectation des adresses virtuelles permettant de prendre en compte une antémémoire à réinscription à adressage virtuel. Le jeu d'ordres de purge que l'on a défini plus haut, lorsqu'il est utilisé dans le noyau Unix-de la manière indiquée dans le chapitre cidessous intitulé "conception du noyau pour une antémémoire à adressage virtuel", met en oeuvre un mécanisme permettant de prendre en compte la réaffectation des adresses virtuelles, comme cela est rendu nécessaire avec une antémémoire à adressage virtuelle dans un système Unix comprenant une pluralité de contextes actifs et un système d'exploitation partagé entre ces contextes, pour des stations de travail -ayant des antémémoires à inscription directe ou à réinscription. Les ordres de purge, lorsqu'ils sont utilisés dans le noyau Unix de la manière décrite dans le chapitre ci-dessous intitulé "conception du noyau pour une antémémoire à adressage virtuel"., permettent de prendre en compte une antéméroire à réinscription à adressage virtuel à l'intérieur d'un système Unix de telle sorte que l'utilisation d'une telle antémémoire soit transparente pour programmes d'application des utilisateurs. Il- n'y a besoin d'apporter aucune modification aux programmes des utilisateurs pour bénéficier des améliorations de la vitesse d'accès à la mémoire, inhérentes à une antémémoire à réinscription à adressage virtuel. En outre, les ordres de purge, lorsqu'ils sont utilisés dans un noyau Unix de la manière décrite dans le chapitre ci-dessous intitulé "conception du noyau pour une antémémoire à adressage virtuel", permettent de prendre en compte une antémémoire à réinscription à adressage virtuel qui ne contient, pour l'identification d'un bloc, qu'un champ de paramétrages d'adresses virtuelles, et non un champ de paramétrages d'adresses physiques. En évitant ainsi l'addition d'un champ de paramétrages d'adresses physiques, on réduit au minimum le nombre de paramétrages d'antémémoires nécessaires à l'antémémoire à réinscription à adressage virtuel. Une antémémoire à réinscription a besoin que, à un certain moment, tout bloc d'antémémoire qui a été modifié soit réinscrit dans la mémoire principale. cette opération de réinscription peut prendre place soit lorsque l'on remplace le bloc d'antémémoire par un nouveau contenu de bloc (le remplacement normal d'un bloc dans le cas o l'on n'a rien trouvé dans l'antémémoire), ou lorsque le bloc d'antémémoire est purgé, avant de réaffecter un domaine d'adresses virtuelles comprenant ce bloc d'antémémoire. Si les paramétrages de l'antémémoire ne contiennent aucun champ d'adresses physiques, les champs d'adresses virtuelles doivent alors être traduits en adresses physiques avant que le bloc d'antémémoire ne puisse être inscrit dans la mémoire. Dans le cas des purges de l'antémémoire,- ceci implique que toutes les traductions d'adresse des champs d'adresses virtuelles de bloc d'antémémoire qui résultent d'une concordance de purge soient achevées avant que le système d'exploitation ne réaffecte le domaine d'adresses virtuelles à l'intérieur de la MMU. Deux caractéristiques de la présente invention sont, en partie, responsables du fait que cette condition peut être remplie: 1) tout d'abord, le fait que l'ordre de purge ait besoin - que la traduction de l'adresse virtuelle du bloc. d'antémémoire soit achevée avant de rendre le contrôle au processeur, et 2) ensuite, le fait que les ordres de purge soient, comme indiqué dans le chapitre ci-dessous intitulé "conception du noyau pour une antémémoire à adressage virtuel", structurés dans le noyau en tant que position stratégique qui garantissent la purge de tous les blocs d'antémémoire modifiés avant la réaffectation du domaine d'adresses virtuelles. Le jeu des trois ordres de purge décrit plus haut, avec leur critère de "présence dans l'antémémoire" respectifs, constituent un système performant de réaffectation des adresses virtuelles lorsqu'il est placé dans le noyau Unix de la manière illustrée dans le chapitre ci-dessous intitulé "conception du noyau pour une antémémoire à adressage virtuel". Le mécanisme est performant en ce qu'il optimise l'efficacité de la purge de l'antémémoire à réinscription à adressage virtuel dans les trois cas de-réaffectation d'adresses virtuelles requis par le système d'exploitation, à savoir: 1) chaque fois qu'un contexte actif existant doit être remplacé par un nouveau contexte, 2) chaque fois que les limitations de la MMU imposent la réaffectation d'un segment présentement mappé-en un nouveau segment, et 3) chaque fois qu'une page physique en mémoire doit être réaffectée à une nouvelle adresse virtuelle. Les trois ordres de purge sont définis, avec leurs critères de concordance de purge, de manière à couvrir spécifiquement chacun de ces trois cas. Les ordres de purge sont -délivrés par le noyau en commençant à une adresse de bloc de base, puis en incrémentant les-adresse.s-de bloc de manière à vérifier chaque bloc se trouvant. 1l'intérieur d'un domaine d'adresses fixé. Les ordres de purge tels qu'on * 35 les a définis sont - efficaces pour la réaffectation des adresses pour deux raisons essentielles: 1 le critère de concordance de purge restreint, à l'intérieur du domaine-adressable à purger, le nombre de blocs purgés uniquement à ceux des blocs qui nécessitent une purge. On vérifie d'autres adresses étrangères, extérieures au domaine à purger, mais on ne les purge pas. 2 pour chacun des trois cas o l'on a besoin d'une purge d'adresses, les ordres de purge définis permettent, en une seule passe, de vérifier l'antémémoire sur le domaine adressable du bloc d'antémémoire approprié. Par exemple, pour purger un segment on doit purger chaque page se trouvant à l'intérieur de ce segment. Si l'on n'avait pas prévu de purge par segment, on aurait besoin de plusieurs passes d'ordres de purge de page, en faisant varier les adresses de page pour obtenir la purge du segment. Le mode de réalisation préféré de l'antémémoire à adressage virtuel est représenté sur la figure 3 pour ce qui concerne le cheminement des adresses et sur la figure 5 pour ce qui concerne le cheminement des données. La logique de contrôle de purge est, dans le mode de réalisation préféré, réalisée de la manière illustrée figures 11 et 12, avec la machine à états de la figure 13 et le chronogramme de la figure 14. On a représenté le chronogramme -optimal des écritures sur la figure 8 et celui des lectures sur la figure 9. Outre les composants précédemment décrits en référence à la figure 1, la figure 3 inclut un registre d'adresse virtuelle VAR 54 qui mémorise l'adresse virtuelle courante. Les éléments de l'invention apparaissant sur la figure 3 sont la logique de purge&de l'antémémoire 33, les bits de protection P de la matrice des paramétrages de l'antémémoire 23, et la logique de concordance de purge24, qui fait partie de la logique 25 de détection de présence dans l'antémémoire. On a également représenté sur la figure 5 un registre de données 61 qui mémorise les données à inscrire dans la mémoire 31 ou dans la matrice des données de l'antémémoire 19, ou les données qui y ont été lues. Sur les figures 2, 3, 5, l et 12, pour ne pas alourdir inutilement les figures, on n'a pas représenté toutes les lignes de contrôle. Cependant, les lignes de contrôle nécessaires à un fonctionnement correct de la présente invention peuvent être déduites de l'organigramme des machines à états représentés aux figures 4, 6, 7 et 13 et des chronogrammes représentés aux figures 8 à-10 et 14. Sur les organigrammes, on a utilisé les abréviations suivantes: CX Contexte AV Adresse virtuelle AR Adresse réelle RAV Registre d'adresse virtuelle 54 RAR Registre d'adresse réelle 51 MEM. Mémoire (principale) AMM Antémémoire REG. Registre DONN. Donnée ADR. Adresse ECR. - Ecriture REINSC. Réinscription LECT. Lecture CONC. Concordance PARAM. Paramétrages (de 1'aritémémoire) MUX Multiplexeur 45 SEL. - Sélection (du multiplexeur) CK xxx - Séquencer xxx (lui appliquer son signal d'horloge Clock) xxx Délivrer, appliquer le signal xxx * xxx \ Supprimer le signal-xxx ,.. OE xxx Autorisation de-sortie (Output. -:Enable) pour xxx j STROBE xxx Echantillonnage (Strobe) de xxx A/R Accusé de réception Trouvé/rien trouvé ? La logique de détection 25 a-t- elle détecté ou non la présence de la donnée dans l'antémémoire ? (fig.2a) Présence AMM ? La logique de détection 25 a-t-elle détecté ou non la présence de la donnée dans l'antémémoire ? (fig.2a) Violation La logique de contrôle 40 a-t-elle protection AAM ? détecté une violation de la protection antémémoire (fig.2b) Mémoire occupée ? Le signal "mémoire occupée" a-t-il été appliqué ? Violation La logique de contrôle 40 a-telle protection MMU ? détecté une violation de la protection MMU (fig. 2c) Strobe adr. mém. Appliquer le signal d'échantil- lonnage d'adresse de la mémoire 31 A/R adr. mém. ? La mémoire 31 a-t-elle délivré un signal d'accusé de réception ? Strobe donn. mém. 0 ? Le signal d'échantillonnage n 0 des données de la mémoire a-t-il été délivré ? A/R donn. mém. 0 ? Le signal d'accusé de réception n 0 des données de la mémoire a-t-il été délivré ? Strobe donn. mém. 1 ? Le signal d'échantillonnage n l des données de la mémoire a-t-il été délivré ? A/R donn. mém. 1 ? Le signal d'accusé de réception n l des données de la mémoire a-t-il été délivré ? Clk tampon réins. Séquencer le tampon de réinscription 39 Cycle lecture CPU ? La CPU est-elle dans un cycle de lecture ? Clk reg. donn. Séquencer le registre de données 61 Donn. réinscr. La logique de contrôle 40 a-t-elle val. et modif. ? détecté que le bit de validité (V) et le bit de modification (M) sont positionnés ? Lancer cycle La logique de contrôle 40 a-t-elle réinscr. ? délivré un signal de lancement d'un cycle de réinscription ? Des abréviations semblables sont utilisées pour les chronogrammes des figures 8 à 10 et 14. La machine à états des adresses, illustrée figures 4a et 4b, définit certains des contrôles -relatifs à la partie-de gestion des adresses de l'antémémoire 19. Les paramétrages de l'antémémoire 23 sont inscrits comme étant "valables" au cours de l'état (w), à la suite d'un transfert réussi, depuis la mémoire 31, de toutes les données du bloc. On a incorporé l'invention en ajoutant, à la suite de l'état (c), le test de violation de protection de l'antémémoire. Si l'on trouve qu'il y a violation de protection dans un cas o l'on a trouvé quelque chose dans l'antémémoire, on met alors fin immédiatement au cycle de bus CPU, en répondant "erreur de bus" à la CPU. La violation de protection MMU sur l'adresse traduite est exécutée ultérieurement, après l'état (g). La machine à états des données, illustrée figures 6a à 6d, définit certains contrôles relatifs à la partie de transfert des données de l'antémémoire. Ici encore, l'invention est incorporée en ajoutant un test de violation de la protection d'antémémoire à la suite de l'état (c). L test de violation de protection MMU sur l'adresse traduite est exécuté de la même façon à l'état (g). La machine à états de réinscription illustrée à la figure 7 définit le contrôle du cycle de busde réinscription dans la mémoire. Ce cycle peut être exécuté parallèlement aux accès CPU à l'antémémoire, car les contrôles de réinscription et le cheminement des données sont tous deux indépendants des contrôles et du cheminement des données d'accès à l'antémémoire. Comme décrit plus bas, le signal "mémoire occupée"provoque l'attente de la machine à états des adresses et de la machine àétats des données jusqu'à -35 achèvement d'un cycle précédent de réinscription. Le chronogramme d'écriture lorsque l'on n'a rien-trouvé dans l'antémémoire, illustré figure 8, définit le séquencement général d'un cycle de bus d'écritureCPUdans e la mémoire pour lequel on ne trouve rien dans l'antémémoire. La vérification de présence dans l'antémémoire et de protection de l'antémémoire a lieu au cycle (c) de ce diagramme. Une partie de la séquence de gestion du cas o l'on n'a rien trouvé dans l'antémémoire comprend le chargement dans le tampon de réinscription 39 du bloc d'antémémoire courant que l'on doit remplacer, aux cycles (i) et (m). L'adresse traduite du bloc d'antémémoire courant est également chargée dans le registre d'adresse réelle 51, au cycle (o). Si le bloc d'antémémoire courant est à la fois valable et modifié par un cycle d'écriture CPU (ou DVMA) précédent, ce bloc d'antémémoire sera alors réinscrit dans la mémoire 31 au moyen d'un cycle de bus de réinscription, décrit à la fois dans le séquencement du bus de données de la mémoire et dans la machine à états de réinscription, respectivement aux figures 10 et 7. On fusionne les données CPU à écrire avec des blocs de données renvoyés de la mémoire au cours du premier transfert de données d'un cycle de bus mémoire de lecture de bloc. Pendant les cycles (q) à (u), le signal d'activation de sortie d'écriture CPU qui contrôle les tampons 37 ne sera active que pour ceux des octets devant être inscrit par la CPU, tandis que le signal d'activation de sortie du registre de données qui contrôle le registre de donnée 61 sera actif pour tous les autres octets. Au cours du second transfert-de données, au cycle (w), le signal d'activation de sortie du registre de données sera actif pour tous les octets. Le chronogramme de lecture dans le cas o l'on n'a rien trouvé dans l'antémémoire, illustré figure 9, définit le séquencement général d'un cycle de bus de lecture CPU dans une page de la mémoire susceptible d'utiliser l'antémémoire mais pour laquelle on ne. trouve rien dans l'antémémoire. La vérification de présence dans l'antémémoire et de protection - de l'antémémoire a lieu au cycle (c) de ce diagramme-. Une partie de la séquence de gestion.du cas o l'on n'a rien trouvé dans l'antémémoire comprend le chargement dans le tampon de réinscription 39 du bloc d'antémémoiré courant que l'on doit remplacer, aux cycles (i) et (m). L'adresse traduite du bloc d'antémémoire courant est également chargée dans le registre d'adresse réelle 51, au cycle (o). Si le bloc d'antémémoire courant a été rendu à la fois valable et modifié par un cycle d'écriture CPU (ou DVMA) précédent, ce bloc d'antémémoire sera alors réinscrit dans la mémoire 31 au moyen d'un cycle de bus de réinscription, décrit à la fois dans le séquencement du bus de données de la mémoire et dans la machine à états de réinscription, respectivement aux figures 10 a et b, et 7. On lit la donnée en direction de la CPU en détournant les données vers la CPU par l'intermédiaire des tampons 37 qui sont activés par le signal de contrôle "activation sortie lecture CPU", qui est actif aux cycles (q) à (u), --et en mettant simultanément à jour l'antémémoire, au cycle (s). La mémoire est conçue pour renvoyer toujours la "donnée manquante" lors du premier transfert sur 64 bits d'un cycle de bus mémoire de lecture de bloc, et les autres 64 bits lors du transfert suivant. Après avoir renvoyé la donnée du cycle de bus de lecture CPU, la CPU peut exécuter des cycles internes pendant que l'on met à jour l'antémémoire avec le second transfert de données en provenance de la'mémoire. Le cadencement du-bus de données de la mémoire, illustré figures 10a et 10b, montre le séquencement des cycles de bus de lecture de bloc et de réinscription. Comme la taille d'un bloc d'antémémoire est de 128 bits, chaque mise à jour d'un bloc d'antémémoire nécessite deux transferts de données. Comme indiqué plus haut, les 64 bits formant la donnée adressée par la CPU 11 sont, pour les cycles de bus de lecture de bloc, toujours renvoyés lors du premier transfert. Un signal de contrôle "mémoire occupée", actif au cours du cycle de réinscription, est utilisé pour inhiber le début du cycle sans utilisation de- l'antémémoire suivant jusqu'à ce que le cycle de réinscription précédent puisse se terminer. La logique de purge de l'antémémoire 33, illustrée figure 11, donne les grandes lignes du cheminement des données et des signaux de contrôle du contrôleur de purge. Ce contrôleur réalise les opérations de purge de l'antémémoire de la présente invention pour un système ayant plusieurs contextes utilisateurs actifs et un système d'exploitation partagé. La logique de purge de l'antémémoire comprend la porte ET 48, les bascules bistables 49, le registre d'adresse de purge 52, l'incrémenteur 50, les portes ET 55 et la porte OU 58. La logique de purge de l'antémémoire utilise trois signaux de concordance de purge 33 pour déterminer si le bloc d'antémémoire adressé doit être ou non purgé. Trois ordres de purge, qui correspondent aux trois signaux de concordance de purge, sont délivrés par la CPU. On dira qu'il y a "concordance de purge" si l'expression logique: [ (ordre de purge de contexte) ET (signal de concordance de purge de contexte)] OU [ (ordre de purge de segment) ET (signal de concordance de purge de segment)] OU [ (ordre de purge de page) ET (signal de concordance de purge de page)] est vraie. Une réalisation d'une telle logique de concordance de purge est illustrée sur la figure 12, o on l'a représentée sous la forme de comparateurs 60, d'une porte ET 62, d'un inverseur 64, d'une porte OU 66 et de portes ET 68. - La logique de contrôle de purge 33 met en jeu deux phases distinctes, qui sont illustrées sous forme de séquences séparées dans la machine à états de purge représentée figure 13. La première phase met en jeu le décodage d'un ordre de purge en provenance-de la CPU et l'obtention de la maltrise du bus par la machine à états de contrôle de la purge. L'ordre de purge est délivré par la CPU dans le domaine de contrôle (identifié par les bits de code de fonction FC(2:0)=0x3). A l'intérieur de ce domaine de contrôle, les quatre bits d'adresse supérieurs A(31:28) =0xA indiquent l'ordre de purge. Le champ d'adresse A(27:0) de lordre correspond au champ d'adresse virtuelle sur 28 bits pour des I-, accès de données. Les bits de données D(1:0) de l'ordre de purge codent le type de purge. Après avoir décodé l'ordre de purge, le champ d'adresse A(27:9) est appliqué à un registre à verrouillage, en même temps que le type de purge. Un signal de requête de bus est appliqué à la CPU afin d'obtenir la maîtrise du bus. La seconde phase concerne l'exécution de cycles DVMA pour tester et, si nécessaire, purger 32 blocs d'antémémoire au moyen de la logique de purge 33 qui constitue un organe DVMA. Cet organe DVMA adresse les blocs d'antémémoire avec l'adresse virtuelle A(27:9) prise dans l'ordre de purge, plus des bits d'adresse A(8:4) provenant d'un compteur interne 50 d'adresse de purge sur cinq bits. Chaque bloc d'antémémoire peut être vérifié sur trois cycles, en contrôlant par des portes les trois signaux de concordance de purge au moyen des registres à verrouillage 55 d'ordre de purge afin de déterminer que l'on est dans un état "concordance de purge". Une "concordance de purge" a pour conséquence que le bloc d'antémémoire est invalidé et qu'un bloc modifié est inscrit dans la mémoire par l'intermédiaire de la machine à états de réinscription. Après l'achèvement du contrôle des 32 blocs, la maîtrise du bus peut être rendue à la CPU. On notera que, en tant qu'organe DVMA, la logique de purge de l'antémémoire 33 entre en compétition avec d'autres organes DVMA en ce qui concerne la maîtrise du bus. Parmi les trois organes DVMA possibles, Ethernet (non représenté) possède la priorité la plus élevée, la logique 33 de purge de l'antémémoire la priorité suivante, et les organes de bus VME le troisième rang. La machine-à états de contrôle de purge ne comporte pas de description complète de système d'arbitrage entre tous les organes DVMA, mais seulement la logique concernant la purge. La machine à états de purge de l'antémémoire illustrée figure 13 comporte quatre machines qui coopèrent entre elles et contrôlent l'opération de purge. Ces quatre machines contrôlent le décodeur d'ordre de purge CPU et -son application aux 32 blocs d'antémémoire. On va décrire ces quatre machines: 1) La machine de décodage d'ordre décode l'ordre de.purge exécuté par la CPU. Au décodage d'un ordre de purge, l'adresse virtuelle de purge A(27:9) et le type d'ordre de purge sont appliqués à des registres à verrouillage. La machine délivre une requête de bus en direction de la CPU pour obtenir la maîtrise du bus par la machine à états de purge. Elle applique également un signal de requête de purge afin d'activer la machine DVMA ci-dessous. 2) La machine DVMA obtient la maîtrise du bus depuis la CPU, ceci étant indiqué par le signal d'offre de bus appliqué par la CPU, et conserve cette maîtrise en délivrant un signal d'accusé de réception de cette offre. Elle joue le rôle d'arbitre entre la purge et les requêtes Ethernet de priorité supérieure. 3) La machine de comparaison de purge initialise son compteur d'adresse A(8:4) à zéro par le signal de requête de purge. Elle continue à vérifier les blocs d'antémémoire aussi longtemps qu'un signal de continuation de purge est délivré par la machine DVMA. Quand ce signal de continuation de purge n'est plus délivré, un signal d'achèvement de purge est produit à l'achèvement de la purge de bloc encours, qui signale 25.à la machine DVMA qu'elle doit rendre la maîtrise du bus au gestionnaire Ethernet. Si l'on détecte une concordance de purge, on délivre le signal de requête de purge de bloc afin d'activer la machine de concordance de purge. A l'achèvement de la tâche de la machine de concordance de purge, cette machine renvoie un signal de réinscription permettant d'achever la gestion en cours par la machine du bloc d'antémémoire. 4) La machine de concordance de purge charge les donhées de l'antémémoire dans le tampon de réinscription 39, séquence le transfert de l'adresse d'antémémoire traduite dans le registre d'adresse réelle 51, et invalide les paramétrages de l'antémémoire 33. On remarquera qu'aucune vérification de protection n'est exécutée. Après achèvement, on produit le signal de requête de réinscription. Si le bloc d'antémémoire est marqué comme étant modifié, on produit également le signal de début de cycle de réinscription afin d'activer la machine à états de réinscription illustrée figure 7. La figure 14 montre le séquencement de la purge de l'antémémoire et décrit le séquencement d'une purge de bloc dans le cas d'une "concordance de purge". Cette condition est testée à l'état (c). Le bloc est invalidé à l'état (k). Si le bloc répond à la condition "concordance de purge" et qu'il est modifié, il doit être alors réinscrit dans la mémoire. Un signal de début de cycle de réinscription est produit à l'état (s) afin de mettre en fonctionnement la machine.à états de réinscription. On va maintenant donner les modifications du noyau nécessaires à la prise en compte de l'antémémoire à réinscription à adressage virtuel de la présente invention avec un système d'exploitation Unix. Conception du noyau pour une antémémoire à adressage virtuel I. Condition invariante Pour garantir l'exactitude de l'antémémoire à adressage virtuel (que l'on appellera en raccourci l'antémémoire"), on fera en sorte que la condition invariante suivante reste vraie à tout instant: Si une rubrique est présente dans l'antémémoire, son mappage d'adresse virtuelle en adresse réelle doit être correct. Cette condition est une condition suffisante pour que.le système soit correct. En effet, lorsque le mappage est correct, -lire un octet ou un mot depuis l'antémémoire revient autême-que le lire J:7 depuis la. mémoire physique via la MMU en évitant l'antémémoire. La lecture est donc correcte. L'octet ou le mot inscrit dans l'antémémoire sera inscrit dans la mémoire physique correspondante lorsque cet octet ou ce mot sera purgé. De la sorte, tant que l'on maintiendra correct le mappage lorsqu'un octet ou un mot de l'antémémoire est purgé, écrire dans l'antémémoire revient au même qu'écrire dans la mémoire physique via la MMU en évitant l'antémémoire. L'écriture est donc correcte. Il est clair que la condition invariante ci-dessus peut être maintenue si l'on purge les lignes concernées de l'antémémoire avant qu'un mappage d'adresse virtuelle en adresse physique devienne incorrect. II. Stratégies de purge de l'antémémoire 1) Du fait que la purge de l'antémémoire est une opération qui prend du temps, on évite de purger, dans la mesure du possible. Sur une machine Sun-3/200 une purge de page ne prend pas moins de 50 ps, et une purge de segment. ou de contexte ne prend pas moins de 400 gs, non compris les instructions du logiciel ou les instructions générales. 2) Pour des adresses virtuelles doublement mappées, si l'on peut accéder simultanément aux deux adresses virtuelles, il faut faire en sorte qu'elles concordent par leurs 17 bits inférieurs, c'est à dire qu'elles concordent modulo 128K, comme décrit dans- le Sun-3 Architectural Manual. ' Sinon, c'est à dire si l'on accède à une seule à la fois, on considérera que, à cet instant donné, le mappage présentement utilisé est correct et que les autres ne sont pas corrects. C'est à dire que les adresses virtuelles des autres mappages qui ne sont pas'actuellement utilisés ne se trouvent pas dans l'antémémoire. 3) On ignorera les problèmes de lecture de /dev/mem du fait que: i) il n'est pas garanti que l'accès à /dev/mem soit cohérent, même avec des systèmes sans antémémoire à adressage virtuel, ii) une telle incohérence additionnelle est minime (car la plupart des utilisations correspondantes sont destinées aux zones-u de processus qui ne sont pas en fonctionnement et que ces zones-u sont déjà purgées au cours des changements de contexte) et iii) si l'on veut faire en sorte que le système se comporte comme s'il n'y avait pas d'antémémoire, il faut que le noyau ignore l'antémémoire pour la totalité du système, avec /dev/mem ouvert. Ceci signifie que, avec /dev/mem ouvert, tout processus utilisateur peut ralentir considérablement le système dans son entier. III. Les nouvelles routines On ajoute au noyau les routines suivantes; 1) vacctxflush(): purge l'antémémoire sur concordance de contexte. Elle purge toutes- les lignes de l'antémémoire dont les bits superviseur du paramétrage d'antémémoire sont dépositionnés ET dont l'identificateur de contexte des paramétrages d'antémémoire concorde avec celui du registre de contexte de la MMU. C'est à dire qu'elle purge la -totalité d'un contexte utilisateur. vac ctxflush() est définie dans map.s. 2) vac_segflush(numérodesegment): purge l'antémémoire sur concordance de segment. Elle purge toutes les lignes de l'antémémoire dont les éléments d'adresse de segment (A dans le Sun-3) du paramétrage d'antémémoire correspondent à "numérodesegment", soit depuis un domaine adressable du noyau soit depuis - le domaine adressable utilisateur courant. C'est à dire qu'elle purge soit un segment de noyau soit un segment utilisateur du contexte utilisateur courant. vac segflush() est définie dans map.s. 3) vacpageflush(adressevirtuelle): purge l'antémémoire sur concordance-de page. Elle purge toutes les lignes de l'antémémoire dont les éléments d'adresse de page (A dans le Sun-3) du paramétrage d'antémémoire correspondent à l'élément de numéro de page de "adresse_virtuelle", soit depuis un domaine adressable du noyau soit depuis le domaine adressable utilisateur courant. C'est à dire qu'elle purge soit une page de noyau soit une page utilisateur du contexte utilisateur courant. vac_pageflush() est définie dans map.s. 4) vac_flush(adresse_virtuelle,nombre_octets): purge les lignes de l'antémémoire dont les éléments d'adresse de page (A dans le Sun-3) du paramétrage d'antémémoire sont compris dans le domaine ["adressevirtuelle", adressevirtuelle" + "nombre octets" - 1]. vacflush() est utilisée soit pour purger moins d'une page, soit au moment de resume(), soit pour purger un certain nombre de pages contiguës, comme au moment de pageout(). vacflush() est définie dans map.s. * 5) vacflushall: purge la totalité de l'antémémoire. Elle est untilisée pour purger la totalité de l'antémémoire vers la mémoire physique avant de de faire un vidage mémoire complet par dumpsys() . Elle peut également être utilisée comme outil de débogage. vacflushall() est définie dans vm machdep.c. 6) vac_disable_kpage(adresse_virtuelle):. supprimme l'u- tilisation de l'antémémoire par une page du noyau commençant à "adressevirtuelle". Elle est utilisée par la routine de pilotage de périphérique mmap() pour renforcer la cohérence du partage d'une page du noyau avec les pages utilisateur. vacdisable_kpage () est définie dans vm machdep.c. 7) vac_enable_kpage(adresse_virtuelle): rétablit l'uti- lisation de l'antémémoire par une page du noyau commencant à "adresse virtuelle". Si, une routine de pilotage de périphérique mmap() sait qu'il n'y a pas d'autres pages utilisateur qui partagent une page du noyau, elle-appelle vac enablekpage () pour permettre l'utilisation de l'antémémoire par cette page du noyau. vac_enable_kpage () est définie dans vmmachdep.c. IV. O et comment purge-t-on 1 'antémémoire ? 1) vac_ctxflush() est appellée depuis ctxfree() dans vmmachdep.c. [ctxfree() est appellée lorsqu'un contexte est libéré de la MMU et donc que le mappage de la totalité du contexte n'est plus valable. ctxfree() est appellée depuis ctxalloc() lorsque le contexte le plus ancien est expulsé de la MMU, depuis swapout() lorsqu'un processus est retiré suite à une permutation, depuis exit() lorsqu'un processus est achevé et depuis ptexpand() lorsque ce contexte est abandonné avant que ses pointeurs n'aient été développés] 2) vac_ctxflush() est appellée depuis vrelvm() dans vm proc.c. [vrelvm() libère les ressources de mémoire virtuelle associées à ce processus. Ceci fait en sorte que toutes les pages virtuelles et physiques du processus vont être libérées et va donc invalider tous les mappages d'adresses virtuelles en adresses physiques du contexte courant] 3) vacctxflush() est appellée depuis expand() dans vmproc.c. [Ceci a lieu lorsque lorsqu'un processus diminue sa -taille et restute de la mémoire virtuelle] 4) vacctxflush() est appeilée depuis ovadvise() dans kern mman.c. [Lorsque le paramètre de ovadvise est VA_FLUSH, on invalide toutes les rubriques de table de pages du processus en cours. Une purge de contexte est plus ,efficace qu'un pluralité de purges de page] ) vac_segflush() est appellée depuis pmegrelease() dans vm machdep.c. - -,[pmegrelease() est appelé lorsqu'un pmeg est retiré. pmegrelease() peut être appelé soit depuis pmegalloc() soit depuis pmegallocreso()] 6) vac_segflush() est appellée depuis pmegload() dans vm_machdep.c. [un segment se trouvant dans le trou doit être libéré et mis à SEGINV dans la mappe des segments] 7) vac_pageflush() est appellée depuis pageout() dans vm_page.c. [ceci a lieu lorsqu'une page est marquée comme étant invalide par le pageout demon] - 8) vac_pageflush() est appellée depuis ovadvise() dans kernmman.c. [Ceci a lieu lorsque ovadvise() marque un page comme étant invalide] 9) vac_pageflush() est appellée depuis mapout() dans kernmman.c. [mapout() est appelée pour libérer un mappage d'adresse virtuelle du noyau en adresse physique. Mapout est appelée depuis: a) physstrat() lorsqu'un mappage d'adresse virtuelle du noyau en adresse du tampon utilisateur est libéré, b) wmemfree(), c) cleanup() et d) ptexpand() pour libérer les anciennes tables de page]. ) vac_pageflush() est appellée depuis pagemove() dans vmmachdep.c. [Dans pagemove(), on appelle vacpageflush(vers) car le mappage de "vers" en sa page physique n'est plus valable après un appel de setpgmap(). On appelle vacpageflush(depuis) car le mappage de "depuis" en sa page physique n'est plus valable après le second appel de setpgmap() ] 11) vacpageflush() est appellée depuis mbrelease() dans sundev/mb.c. [Ceci a lieu lorsque setpgmap(adresse,0) est appelée pour invalider le mappage des adresses virtuelles DVMA en adresses physiques] 12) vacflush() est appellée depuis resume() dans vax.s. [A la fin du temps de changement de contexte, le mappagge des u's du processus sortant devient invalide. On doit purger les u's du processus sortant avant que son mappage des u's ne devienne invalide. Comme les changements de contexte interviennent très fréquemment, on ne purge que la structure utilisateur et la pile du noyau, au lieu de purger la totalité de la page des u's (resume() est également appelée depuis procdup() afin de forcer une mise & jour des u's)] 13) vacflush() est appellée depuis smmap(), munmap() et munmapfd() dans kern mman.c. [Les mappages d'adresses virtuelles en adresses i5 physiques de certaines pages ont changé] 14) vac flushall() est appellée depuis dumpsys() dans machdep.c pour purger le contenu de la totalité du vac de la mémoire physique afin de faire un vidage mémoire de la mémoire physique. 15) Il existe un certain nombre d'endroits o les mappages d'adresses virtuelles en adresses physiques sont implicitement invalidés, par exemple lorsque le mappage pme/pte est toujours valable mais que ce mappage.ne sera plus jamais utilisé. On doit purger la partie correspondante de l'antémémoire, sinon l'antémémoire pourrait contenir certaines lignes du mappage précédent lorsqu'un nouveau mappage sera établi d'après cette adresse virtuelle: a) vac_pageflush() est appellêe depuis mbsetup() dans sundev/mb.c. [Dans mbsetup(), le mappage du pte en pages physiques est temporairement remplacé (jusqu'à mbrelease) par le mappage des adresses virtuelles DVMA]... b) vac_pageflush() est appellée depuis dumpsys() dans machdep.c. [La dernière page de la' région DVMA est utilisée pour mapper vers une page physique à la fois afin de faire un vidage mémoire de la mémoire physique. Un tel 'mappage est invalidé à chaque fois après appel de (*dumper)()] c) vac_pageflush() est appellée depuis physstrat() dans machdep.c. [Dans physstrat(), les-pages "utilisateur" sont doublement mappées vers le domaine du noyau. On purge ces pages utilisateur lorsque l'on installe les pages correspondantes du noyau. Ensuite, ces mappages de pages virtuelles du noyau en pages physiques sont invalidés par mapout(), ces adresses virtuelles du noyau y étant alors purgées] d) vac_pageflush() est appellée depuis copyseg() dans machdep.c. [Dans copyseg(), le mappage de l'adresse virtuelle CADDR1 en adresse physique"pgno" deveint invalide après copyin()] e) vac_pageflush() est appellée depuis mmrw() dans sun3/mem.c. [Dans mmrw()le mappagede "vmmap" vers une adresse physique est installé pour copier des données physiques vers le domaine utilisateur. Ce mappage devient invalide après uiomove()] f) vacpageflush() est appellée depuis pagein() dans vmpage.c. [Le mappage de CADDR1 vers la page physique pf+1 devient invalide après bzero()] g) vac_flush() est appellée depuis procdup() dans vm_proc.c pour purger la pile du noyau et les éléments u_* de forkutl. [Dans procdup(), forkutl mappe vers la page u physique du processus enfant via vgetu(). Comme le mappage de forkutl vers la page u physique de l'enfant devient invalide lorsque le parent revient de procdup(), forkutl est purgée avant le retour de procdupo()] h) vac_flush() est appellée depuis newproc() dans kernfork.c pour purger l'élément u * de vfutl.- [Dans newproc()o, dans le cas de vfork, vfutl mappe vers la page physique de l'enfant via uaccess(o. Ce mappage n'est plus du tout utilisé après appel de vpassvm()] i) vac_flush() est appellée depuis swapout() dans vm_swap.c pour purger l'élément u_* de utl'. [Dans swapout(), le mappage depuis utl, qui est soit xswaputl soit swap2utl, vers la page-u physique du proc p est invalide après que le proc p ait été retiré suite à la permutation] j) vac_flush() est appellée depuis swapin() dans vmswap.c pour purger l'élément u * de utl. [Dans swapin(), le mappage depuis swaputl vers la page-u physique du proc p devient invalide avant que l'on soit revenu de swapin()] k) vac_pageflush() est appellée depuis swap() dans vm_swp.c. [Le mappage de la iième page virtuelle du processus 2 vers la page physique n'est désormais plus valable] i 1) vac_flush() est appellée depuis pageout() dans vmpage.c pour purger l'élément u_* de pushutl. [Dans pageout()o, le mappage depuis pushutl vers 1.a page-u physique de rp devient invalide après l'appel vtod()] m) vac_flush() est appellée depuis pageout() dans vm page.c pour purger le groupe de pages qui font partie des pages à supprimer. - [Swap() mappe les pages physiques de ces pages vers les adresses virtuelles du proc[2] avant qu'il n'appelle-physstrat(). On doit donc remplacer les mappages des pages virtuelles sortantes vers les pages physiques par ceux des pages virtuelles de proc[2] vers ces pages physiques. C'est pour cela que l'on purge ces pages dans pageouto() avant d'appeler -swap()] * n) vac pageflush() est appellée depuis kmcopy() dans -..,..: i -. -,: - '.. - : " f. :- : 1:, "':'.: 26214-07 vm_pt.c. [kmcopy() est appelée depuis ptexpand() pour "recopier" des pte's, d'anciens pte's en nouveaux pte's. Elle "recopie", par mapin(), les nouveaux pte's sur les pages physiques des anciens pte's. On purge les anciens pte's avant de mettre en mappe les nouveaux pte's] o) vacpageflush() est appellée depuis distpte() dans vmpt.c. [distpte() est appelé lorsque les rubriques de pte d'un pte de texte partagé sont modifiées. Par exemple, pageout() modifie son bit de validité de "valable" en "non valable". Comme d'autres processus qui partagent cette page de texte pourraient avoir cette page de texte dans l'antémémoire, on purge cette page pour tous les processus en commun] p) vacflush() est appellée depuis vrelpt() dans vmpt.c pour purger les pte's du processus sortant. [Dans vrelpt(), les pages qui contiennent des pte's sont libérées, mais mapout() n'est pas appelée] q) vac_pageflush() est appellée depuis wlok_unlock() dans sunwindowdev/winlock.c. [Dans wlokunlock(), le mappage de wlock->lok_user vers la page-u physique du processus en cours devient invalide si wlock->lokuser n'est pas à zéro] r) vacpageflush() est appellée depuis wlock_done() dans sunwindowdev/winlock.c. [Dans wlock_done(), le mappage de wlock->lok_user vers la page u physique devient invalide] 16) Lorsque les bits'de protection sont modifiés et que la partie concernée de l'antémémoire doit êtrepurgée. Les endroits o cela arrive se situent: a) dans chgprot)() de vm_machdep. c, od l'on change la protection des pages de texte. On y appelle vac_pageflush() pour éviter d'avoir dans l'antémémoire des rubriques qui aient une protection différente de celle de la MMU; b) dans settproc() de vm machdep.c, o l'on change les bits de protection des pages de texte. On y appelle vacflush() pour purger la partie de texte du processus (settprot() est appelée depuis vm.text.c); c) dans vac disable_kpage() de vm_machdep.c, o l'on appelle vac_pageflush() pour purger toutes les lignes de l'antémémoire de cette page avant de faire ignorer l'antémémoire par cette page. V. Pourquoi ne purge-t-on pas l'antémémoire à tel ou tel endroit ? On donne ci-dessous une liste des endroits o le mappage des adresses virtuelles en adresses physiques est modifié mais o l'antémémoire n'est pas purgée. On indiquera les raisons pour lesquelles il n'est pas nécessaire d'opérer des purges dans l'antémémoire. 1) Dans ctxpass() de vmmachdep.c, le mappage des adresses virtuelles en adresses physiques du proc p est modifié en celui du proc q. Mais q prend dans l'antémémoire tout ce qui appartenait précedemment à p, de sorte qu'il n'y a pas besoin de purger l'antémémoire pour p. [ctxpass() est appellée par vpasspt() afin de transférer à q le contexte de p. vpasspt() est appellée par vpassvm(), qui est elle-même appelée avant et après vfork(). vpassvm() transfère à q les ressources de mémoire virtuelle et le contexte de p. Au retour de vpassvm(), le mappage de virtuel en physique -du contexte- n'est pas modifié. Comme le contexte est également transféré, les mappages concernés -de l'antémémoire sont toujours corrects, à l'exception du fait qu'il appartiennent désormais au procp au lieu du proc q. Il n'y a donc besoin de purger la mémoire.ni dans ctxpass() ni dans vpassvm()] 2) Dans vpasspt(), les mappages des adresses virtuelles en adresses physiques des processus "up" et "uq" ne sont pas modifiés au retour de vpasspt() (ou, plus exactement, les mappages sont restitués à l'état o ils étaient lors de l'entrée dans vpasspt()). 3) Dans swap() de vmswp.c, si "flag" indique que l'on repousse une page sale, on remplace le mappage de "addr" en une adresse physique par celui de la iième page de procE2]. Comme les pages sales ont été purgées dans pageout(), il n'y a pas besoin de purger à nouveau "addr" dans swap(). 4) Dans pmegload() de vm machdep.c, lorsque *pmxp(ctx_pmeg[seg]) est à zéro et que l'on a!need, on invalide pmeg[seg]. Comme on a effectué une purge soit de contexte (dans ctxfree()) soit de segment (dans pmegrelease()) au moment o l'on a mis à zéro ctx pmeg[seg], il n'y a pas besoin d'exécuter une purge de segment à cet endroit. [Il y a seulement deux endroits o l'on met à zéro (struct context *) -> ctx_pmeg[seg]. L'un est pmegrelease(), o l'on appelle vac segflush(seg) et setmap(seg,SEGINV). L'autre est dans ctxfree(), o l'on appelle vac_ctxflush () mais pas setsegmap(seg, SEGINV). Donc (struct context *) -> ctxyPmegEseg] est à zéro mais, dans ce cas, segmap de la MMU n'est pas SEGINV. Ceci est dû au fait que, lorsque *pmxp == 0 et que !need dans pmegload() a besoin d'un setsegmap (seg,SEGINV), il faut que le segmap de la MMU soit SEGINV. Comme on a fait un vacctxflush() dans ctxfree(), ce segment ne doit pas laisser de restes dans l'antémémoire] ) Dans ctxalloc() de vm_machdep.c, setsegmap est appelée pour invalider tous les mappages provenant de la mappe des segments. Comme ctxfree() est appellée antérieurement pour purger la totalité du contexte, il ne se trouve dans l'antémémoire aucune ligne associée à ces segments. On n'a donc pas besoin de purges de 262 4o7 segments. 6) Dans ptesync() de vmmachdep.c, ptesync() appelle pmegunload() qui effectue on OU logique des bits "mod" sur les pte's et restaure les bits "mod" du pmeg. Lorsque l'on vérifie si une autre page de cepmeg est sale, on vérifie son pte qui permet de se souvenir si le bit "mod" était positionné. On n'a pas besoin de purger le segment du fait que pmegunload() dépositionne les bits "mod" de ce pmeg. 7) unloadpgmap() de map.s sauvegarde les bits référencés et modifiés du pme de la MMU en un pte logiciel, et efface ces bits dans le pme. Du fait que, lors d'une exécution de pageout ou swapout, c'est le pte logiciel que que l'on examine pour décider si une page est sale ou non, il n'y a pas besoin de purger l'antémémoire lorsque les bits référencés et modifiés d'un pme sont modifiés. 8) dans pmegunload() de vmmachdep.c, on appelle setsegmap(CSEG,pmp-pmeg), unloadpgmap(v,pte,num) et setsegmap(CSEG,SEGINV). Dans unloadpgmapo(), la mappe des segments de CSEG est utilisée pour accéder aux pme's de ce segment. On n'accède pas à l'adresse virtuelle du CSEG du segment, de sorte que le CSEG du segment n'a rien qui lui corresponde dans l'antémémoire. Il n'y a donc aucunement besoin d'appeler vac_segflush(CSEG) avant d'avoir invalidé ce segment. 9) Dans mapout() de vmmachdep.c, lorsque l'on invalide un - segment en appelant setsegmap ( (u_int)ptos(btop(vaddr)), uchar)SEGINV), on a exécuté des purges de page sur toutes les pages précédemment utilisées de ce segment. Il n' y a donc aucunement besoin d'exécuter une purge de segment. REVENDICATIONS 1. Une station de travail utilisant une antémémoire à réinscription à adressage virtuel, comportant un processeur central (11) avec un bus d'adresse et un bus de données, une matrice des données de l'antémémoire (19) comportant une pluralité de blocs d'antémémoire, une matrice des paramétrages de l'antémémoire (23) comportant un élément de matrice pour chacun des blocs de l'antémémoire, chacun de ces éléments de matrice comportant un bit de validité (V), un bit de modification (M) et un bit de protection superviseur (P), un tampon de réinscription (39), une unité de gestion de la mémoire (27), une mémoire principale (31), un détecteur de présence dans l'antémémoire (25), un registre d'identification de contexte (32), une logique de contrôle de purge (33) et une logique de contrôle de la station de travail (40), caractérisée en ce que le détecteur de présence dans l'antémémoire (25) détecte la présence dans l'antémémoire pour un système d'exploitation partagé entre plusieurs contextes utilisateurs actifs, et en ce que cette station de travail comprend en outre: a) des moyens pour réaffecter des adresses virtuelles entre plusieurs contextes utilisateurs, et b) des moyens (48,49,50,52,55, 58) pour exécuter, à délivrance d'un ordre de purge, une opération de purge de bloc d'antémémoire avant de rendre le contrôle au processeur central et, dans chacune de ces opérations de purge, pour purger tous les blocs d'antémémoire dont le bit de validité de l'élément associé de la matrice des paramétrages de l'antémémoire est positionné, avant réaffectation des adresses virtuelles.. 2. La station de travail dé la revendication 1, dans laquelle le détecteur de présence dans l'antémémoire (25) comporte: a) des moyens pour détecter les blocs d'antémémoire qui ont leur bit de validité de l'élément associé de la matrice des paramétrages de l'antémémoire qui est positionné, b) des premiers moyens de décision, pour déterminer, pour le bloc d'antémémoire adressé par le processeur central, l'adresse du bloc d'antémémoire comportant une pluralité de bits d'adresse virtuelle d'accès, si ces bits d'adresse virtuelle d'accès concordent ou non avec des bits d'un champ d'adresse virtuelle se trouvant dans un élément correspondant de la matrice des paramétrages de l'antémémoire, c) des seconds moyens de décision, pour déterminer (i) pour le bloc d'antémémoire adressé par le processeur central, l'adresse du bloc d'antémémoire comportant une pluralité de bits de contexte d'accès, si ces bits de contexte d'accès concordent ou non avec des bits d'un champ d'adresse virtuelle se trouvant dans l'élément correspondant de la matrice des paramétrages de l'antémémoire et (ii) si le bit de protection superviseur est positionné dans l'élément correspondant de la matrice des paramétrages de l'antémémoire. 3. La station de travail de la revendication 1, dans laquelle les moyens pour.réaffecter les adresses virtuelles comportent un jeu d'ordres de purge, situé à l'intérieur du système d'exploitation partagé, ces ordres de purge -comportant un ordre de purge sur concordance de contexte, un ordre de purge-sur concordance de page, et un ordre de purge sur concordance de segment. 4. La station de travail de la revendication 1, dans laquelle les moyens (48,49,50,52,55,58) pour exécuter l'opération de purge comprennent: a) des moyens (48,49) pour décoder l'ordre de purge, cet ordre de purge étant un ordre de purge sur concordance de contexte, un ordre de purge sur concordance de page ou bien un ordre de purge sur concordance de segment, b) des moyens formant registre d'adresse de purge (52) pour mémoriser une adresse se trouvant dans l'ordre de purge décodé, - c) des moyens d'incrémentation (50), pour incrémenter des bits d'adresses prédéterminés afin de les combiner aux bits d'adresse se trouvant dans les moyens formant registre d'adresse de purge, et d) des moyens de concordance de purge (55,58), reliés aux moyens de décodage (48,49), pour produire un signal logique de concordance de purge, de sorte que la délivrance d'un ordre de purge provoque la purge de tous les blocs d'antémémoire ayant leur bit de validité associé qui est positionné, avant réaffectation des adresses virtuelles. 5. La station de travail de la revendication 2, dans laquelle les moyens pour détecter les blocs d'antémémoire qui ont leur bit de validité positionné comportent une première porté ET (22) ayant une première de ses entrées reliée au bit de validité de l'élément de matrice de la matrice des paramétrages de l'antémémoire correspondant au bloc d'antémémoire adressé par le processeur central. 6. La station de travail de la revendication 5, dans laquelle les premiers moyens de décision comportent un premier comparateur (20) relié au bus d'adresse et à la matrice des paramétrages de l'antémémoire, la sortie de ce premier comparateur étant reliée à une seconde entrée de la première porte ET (22). 7. La station de travail de la revendication 6, dans laquelle les seconds moyens de décision comportent un second comparateur (20) relié au registre d'identification de contexte (32) et à la matrice des paramétrages de l'antémémoire, la sortie de ce second comparateur étant reliée à une première entrée d'une porte OU EXCLUSIF (24), une seconde entrée de cette porte OU EXCLUSIF (24) recevant le bit de protection superviseur de. l'élément de la matrice des paramétrages de l'antémémoire correspondant au bloc d'antémémoire adressé par le processeur-central. 8. La station de travail de la revendication 7, dans laquelle le détecteur de présence dans l'antémémoire comprend en outre: a) une seconde porte ET (26) ayant l'une-de ses entrées reliée à la sortie de ladite porte OU EXCLUSIF (24), une seconde entrée reliée à la sortie de ladite première porte ET (22) et une troisième entrée reliée à la sortie d'un troisième comparateur (20) dont les entrées sont reliées au bus d'adresse et à l'élément de matrice de la matrice des pramétrages de l'antémémoire adressé par le processeur central, et b) un quatrième comparateur (20), dont les entrées sont reliées au bus d'adresse et à l'élément de matrice de la matrice des paramétrages de l'antémémoire adressé par le processeur central, la sortie de ce quatrième comparateur (20) constituant une troisième entrée de ladite première porte ET (22). 9. La station de travail de la revendication 4, dans laquelle les moyens de décodage (48,49) comprennent une porte ET (48) reliée au processeur central et une première, une seconde et une troisième bascule bistable (49) ayant chacune leur entrée d'horloge reliée à la sortie de la porte ET (48) et leur entrée "D"' reliée au bus de données. 10. La station de travail de la revendication 9, dans laquelle les moyens formant registre d'adresse de purge (52) comprennent un registre qui charge des bits prédéterminés à partir du bus d'adresse lorsque -la sortie de la porte ET (48) est active. 11. La station de travail de la revendication 9, dans laquelle les moyens de concordance de purge comprennent une première, une deuxième et une troisième porte ET (55), ayant chacune l'une de leurs entrées reliée aux sorties."Q" respectives de la première, de la deuxième et de la troisième bascule bistable (49), et une seconde entrée reliée-à des moyens pour produire un signal de concordance de segment, un signal de concordance de page et un signal de concordance de contexte, ainsi qu'une porte OU (58) ayant une première, une deuxième et une troisième entrée reliées respectivement aux sorties de la première, de la deuxième et de la troisième porte ET (55), de sorte que la sortie de cette porte OU (58) soit active lorsque l'un des signaux de concordance de segment, de concordance de page ou de concordance de contexte est actif et que l'on a décodé un ordre correspondant de purge de segment, de purge de page ou de purge de contexte.