FR 2881540 A1 20060804 FR 0600901 A 20060201 ARRIÈRE-PLAN 1] Les processeurs d'aujourd'hui sont plus puissants et plus rapides que jamais. En conséquence, même les temps d'accès à la mémoire, typiquement mesurés en dizaines de nanosecondes, peuvent être un obstacle à l'exécution à pleine vitesse d'un processeur. Généralement, le temps d'unité centrale de traitement (CPU selon les initiales du terme anglosaxon Central Processing Unit) d'un processeur est la somme des cycles d'horloge utilisés pour exécuter des instructions et les cycles d'horloge utilisés pour un accès à la mémoire. Tandis que les processeurs modernes se sont considérablement améliorés en termes du temps d'exécution d'instructions, les temps d'accès de dispositifs de mémoire proposés à un prix raisonnable ne se sont pas améliorés de façon semblable. 2] Un procédé ordinaire de compensation du:emps d'attente d'accès à la mémoire est la mise en mémoire cache. La mise en mémoire cache tire parti de la relation inverse entre la capacité et la vitesse d'un dispositif de mémoire; c'est-à-dire qu'un dispositif de mémoire plus grand (en termes de capacil:é de stockage) est généralement plus lent qu'un dispositif de mémoire plus petit. De surcroît, des mémoires plus lentes sont moins coûteuses, et conviennent par conséquent mieux à l'usage et tant qu'une portion d'un stockage en masse, que ne le sont des mémoires plus coûteuses, petites et rapides. 3] Dans un système de mise en mémoire cacl-e, la mémoire est agencée dans un ordre hiérarchique de différentes vitesses, de différentes tailles et de différents coûts. Par exemple, une mémoire petite, rapide, ordinairement appelée une "mémoire cache", est typiquement placée entre un processeur et une mémoire principale, plus grande mais plus lente. La mémoire cache n'a la capacité de stocker qu'un sous-ensemble des données stockées dans la mémoire principale. Le processeur n'a besoin que d'une certaine quantité, petite, des données provenant de la mémoire principale, afin d'exécuter des instructions individuelles pour une application particulière. Le sous-ensemble de mémoire est choisi sur la base d'une pertinence immédiate basée sur des théories temporelles et des théories de localité spatiale bien connues. Ceci est analogue à une situation où l'on emprunte seulement quelques livres à la fois à partir d'une grande collection de livres dans une bibliothèque, afin d'effectuer un grand projet de recherche. Tout comme la recherche peut être aussi efficace et même avoir un meilleur rendement si seulement quelques livres sont empruntés à la fois, le traitement d'un programme a un bon rendement si une petite portion de toutes les données stockées en mémoire principale est sélectionnée et stockée dans la mémoire cache à un moment donné quelconque. 4] Une mémoire cache d'entrée/sortie ("E/S") localisée entre la mémoire principale et un contrôleur d'E/S ("IOC selon les initiales du terme anglo-saxon Input Output Controller") aura probablement des exigences différentes de celles d'une mémoire cache de processeur, comme il lui est typiquement exigé de stocker davantage d'informations d'état pour chaque ligne de données, ou "ligne de mémoire cache", qu'une mémoire cache de processeur. En particulier, une mémoire cache d'E/S aura besoin de suivre la trace de l'identité du dispositif particulier d'un certain nombre de différents dispositifs d'E/S lançant une requête d'accès à, et/ou ayant la propriété d'une ligne de mémoire cache. L'identité de l'émetteur-de-requête/propriétaire en cours pour la ligne de mémoire cache peut être utilisée, par exemple, pour y fournir un accès équitable. En outre, un dispositif d'E/S peut écrire dans seulement une petite portion d'une ligne de mémoire cache. Ainsi, il peut être exigé à une mémoire cache d'E/S de stocker des bits d'état indiquant quelle partie de la ligne de mémoire cache a été écrite ou chargée. De plus, un ou plusieurs bits seront utilisés afin d'indiquer l'état de ligne de la ligne correspondante de mémoire cache; par exemple privée, en cours, affectée, propre, sa"e, en cours de chargement, etc. Qui plus est encore, dans une mémoire cache d'E/S, il n'existe aucune localité temporelle; c'est-à-dire que les données ne sont utilisées qu'une fois. En conséquence, une mémoire cache d'E/S n'a pas besoin d'être extrêmement grande et fonctionne davantage comme une mémoire tampon destinée à contenir des données pendant qu'elles sont transférées depuis la mémoire principale vers le dispositif d'US et vice versa. 5] A mesure que les cartes d'US deviennent plus rapides et plus complexes, elles peuvent émettre un nombre plus grand de requêtes pour un accès direct à la mémoire ("DMA" selon les initiales du terme anglo-saxon Direct Memory Access) Est ont davantage de requêtes DMA en instance à la fois. Le contrôleur d'E/S, qui reçoit ces requêtes DMA depuis des cartes d'US et morcelle chacune en une ou plusieurs requêtes de la taille d'une ligne de mémoire cache, vers la mémoire principa e, a généralement une mémoire cache destinée à contenir les données qui sont chargées depuis la mémoire principale en réponse à chaque requête DMA, mais la quantité de données qui peuvent être stockées dans la mémoire cache est fixée en taille et est une ressource rare sur la puce de contrôleur d'E/S. 6] Lorsque le contrôleur d'US tente d'accéder à une position de mémoire en réponse à une requête DMA provenant d'une carte d'E/S, il interroge sa mémoire cache afin de déterminer si elle a déjà une copie des données, pour lesquelles une requête est lancée, stockée dans celle- ci. Sinon, le contrôleur d'US tente d'obtenir une copie des données depuis la mémoire principale. 7] Comme indiqué précédemment, lorsqu'un contrôleur d'US chargé des données depuis la mémoire principale en réponse à une requête DMA provenant d'une carte d'E/S, il a besoin de mettre ces dernières données dans sa mémoire cache, lorsque les données sont mises à disposition depuis la mémoire. Si la mémoire cache est pleine (c'est-à-dire s'il n'existe pas de lignes vides de mémoire cache disponibles), les nouvelles données peuvent déplacer des données stockées dans la mémoire cache qui n'ont pas encore été utilisées. Ceci a pour résultat une perte de performance, comme les données qui sont déplacées doivent par la suite être ré-chargées depuis la mémoire principale. 8] Les transferts d'E/S tendent à être des rafales longues 35 de données qui sont de forme linéaire et séquentielle. Des techniques de préchargement de données permettent aux sous-systèmes d'E/S de lancer des requêtes pour des données stockées dans la mémoire antérieurement au besoin d'un dispositif d'E/S d'avoir les données. Par une pré-chargement de données avant la consommation de données par le dispositif, des données peuvent être envoyées de manière continue vers le dispositif sans interruption, améliorant ainsi la performance du système d'ES. La quantité de données qui sont pré-chargées de cette manière pour une seule transaction DMA est appelée la "profondeur de pré- chargement". Plus la pré-chargement est "profonde", plus des données sont chargées avant que les données provenant de la première requête n'aient été consommées. 9] Cependant, certaines requêtes DMA, en particulier des lectures DMA par interconnexion de composants périphériques ("PCI" selon les initiales du terme anglo-saxon Peripheral Component Interconnect), sont spéculatives par nature. Ceci provient du fait qu'uniquement l'adresse de démarrage, mais non la longueur, des données est spécifiée dans une requête de lecture DMA par PCI. Par conséquent, une lecture DMA par PCI utilisera des opérations de pré-chargement afin d'extraire des données dont le contrôleur d'E/S "calcule au pifomètre" que le dispositif d'E/S aura besoin avant qu'une requête ne soit en fait lancée par le dispositif pour ces dernières données. Par contraste, des lectures DMA selon la norme PCI-X spécifient et une adresse de démarrage, et une longueur des données à lire et sont par conséquent non spéculatives. Dans un mode de réalisation de l'art antérieur, une machine de pré-chargement est utilisée pour prédire des requêtes futures, sur la base d'une requête en cours, et suit la trace de requêtes de mémoire qui ont déjà été initiées et mises en file d'attente. 0] Dans un scénario du pire cas, le contrôleur d'E/S pourrait émettre des requêtes de pré-chargement vers la mémoire principale pour chaque ligne de mémoire cache de chaque transaction DMA en instance provenant de chaque carte d'E/S. Dans ce scénario du pire cas, la capacité d'une mémoire cache typique de contrôleur d'E/S serait insuffisante pour prendre en compte toutes les lignes de mémoire cache pour lesquelles des requêtes sont lancées. Alternativement, la mémoire cache pourrait être agrandie, ayant pour résultat une mémoire cache de contrôleur d'E/S qui est beaucoup plus grande que ce qui est nécessaire dans des circonstances normales. 1] Dans des cas dans lesquels le nombre de requêtes émises est supérieur à la taille de la mémoire cache, il existera une contention pour des lignes de mémoire cache. Dans un mode de réalisation de l'art antérieur, un algorithme de remplacement de cache ("CRA" selon les initiales du terme anglo-saxon Cache Replacement Algorithrn) est mis en oeuvre par le contrôleur d'E/S afin de sélectionner quel(le)s ligne(s) de mémoire cache doit/doivent être déplacée(s) ou "vidée(s)". II sera admis que des CRA qui sont aléatoires peuvent déplacer des lignes de mémoire cache qui n'ont pas encore été utilisées. D'autres CRA vident des lignes de mémoire cache vieilles ou non utilisées d'abord, comme il existe une probabilité plus grande que ces dernières lignes ne seront pas nécessaires; cependant, de tels algorithmes ne confèrent aucun poids au fait de savoir si une ligne de mémoire cache contient des données spéculatives, par opposition à des données non spéculatives, lorsqu'ils considèrent s'il faut vider une ligne particulière. RÉSUMÉ [0012] Selon un mode de réalisation de l'invention on propose un procédé d'utilisation de mémoire dans un système d'ordinateur. Le procédé comprend les étapes consistant à déterminer, en réponse à la réception d'une transaction DMA depuis une entité, par exemple une carte d'E/S, si une requête de mémoire comprenant une portion, ayant la taille d'une ligne de mémoire cache, de la transaction DMA est spéculative; et à assurer, en réponse à une détermination que la requête de mémoire n'est pas spéculative, qu'un indicateur de verrouillage de pré-chargement d'une ligne de mémoire cache d'une mémoire cache associée à la requête de mémoire soit dans une condition verrouillée, empêchant ainsi qu'un algorithme de remplacement de cache ("CRA") vide la ligne associée de mémoire cache. 3] Un autre mode de réalisation est un procédé d'utilisation de mémoire dans un système d'ordinateur. Le procédé comprend les étapes consistant à diviser, en réponse à la réception d'une transaction DMA depuis une entité, la transaction DMA en au moins une requête de mémoire ayant la taille d'une ligne de mémoire cache; à déterminer si la au moins une requête de mémoire est spéculative; et à assurer, en réponse à une détermi- nation que la au moins une requête de mémoire n'est pas spéculative, qu'un indicateur de verrouillage de pré-chargement d'une ligne de mémoire cache d'une mémoire cache associée à la au moins une requête de mémoire soit dans une condition verrouillée, empêchant ainsi qu'un algorithme de remplacement de cache ("CRA") vide la ligne associée de mémoire cache. 4] Un autre mode de réalisation est un système destiné à l'utilisation de mémoire dans un ordinateur. Le système comprend un moyen de mémoire cache destiné à stocker des données en rapport avec des transactions DMA; un moyen, fonctionnant en réponse à la réception d'une transaction DMA depuis une entité, destiné à déterminer si une requête de mémoire comprenant une portion, ayant la taille d'une ligne de mémoire cache, de la transaction DMA est spéculative; et un moyen, fonctionnant en réponse à une détermination que la requête de mémoire n'est pas spéculative, destiné à assurer qu'un indicateur de verrouillage de pré- chargement d'une ligne de mémoire cache du moyen de mémoire cache associé à la requête de mémoire soit dan:; une condition verrouillée, empêchant ainsi qu'un algorithme de remplacernent de cache ("CRA") vide la ligne associée de mémoire cache. 5] Un autre mode de réalisation est un support lisible par ordinateur, pouvant fonctionner avec un ordinateur incluant une mémoire cache, destiné à effectuer des transactions DMA dans un ordinateur. Le support a, stockées sur celui-ci, des instructions exécutables par l'ordinateur, fonctionnant en réponse à la réception d'une transaction DMA depuis une entité, destinées à déterminer si une requête de mémoire comprenant une portion, ayant la taille d'une ligne de mémoire cache, de la transaction DMA est spéculative; et des instructions exécutables par l'ordinateur, fonctionnant en réponse à une détermination que la requête de mémoire n'est pas spéculative, destinées à assurer qu'un indicateur de verrouillage de pré-chargement d'une ligne de mémoire cache de la mémoire cache associée à la requête de mémoire soit dans une condition verrouillée, empêchant ainsi qu'un algorithme de remplacement de cache ("CRA") vide la ligne associée de mémoire cache. BRÈVE DESCRIPTION DES DESSINS 6] La figure 1A est un schéma fonctionnel d'une mémoire cache d'E/S fournie à titre d'exemple; [0017] la figure 1B est un schéma fonctionnel d'un système 15 d'ordinateur conforme à un mode de réalisation; [0018] la figure 1C est un schéma fonctionnel d'un contrôleur d'E/S du système d'ordinateur de la figure 1B; [0019] la figure 2 est un schéma fonctionnel d'un sous-système d'interfaces d'E/S du contrôleur d'E/S de la figure 1C; [0020] la figure 3 est un schéma fonctionnel plus détai lé du sous-système d'interfaces d'E/S de la figure 2; et [0021] la figure 4 est un ordinogramme illustrant le fonctionnement d'un procédé d'un mode de réalisation destiné à utiliser la mémoire cache du contrôleur d'E/S de la figure 1C. DESCRIPTION DÉTAILLÉE DES DESSINS 2] Dans les dessins, des éléments pareils ou semblables sont désignés par des références numériques identiques dars les différentes vues de ceux-ci, et les différents éléments représentés ne sont pas nécessairement dessinés à l'échelle. 3] La figure 1A est un schéma fonctionnel d'une mémoire cache d'E/S 100, fournie à titre d'exemple. Comme l'illustre la figure 1A, la mémoire cache 100 comprend une unité de balise 101, une unité d'état 102 et une unité de données 103. L'unité de données 103 comprend un certain nombre de lignes de mémoire cache, telle que la ligne 104 de mémoire cache, chacune des- quelles est de préférence d'une longueur de 128 octets. Chaque ligne de mémoire cache a, associée à celle-ci, une ligne de balise qui est stockée dans l'unité de balise 101, telle que la ligne de balise 105, et une ligne d'état qui est stockée dans l'unité d'état 102, telle que la ligne d'état 106. 4] Comme le montre la figure 1A, chaque ligne de balise de l'unité de balise 102 peut inclure les données suivantes: adresse 105(a) de ligne de mémoire est l'adresse de la ligne de mémoire cache cache associée dans l'unité 103 de données; adresse 105(b) de démarrage: est l'adresse du bloc initial de données de la ligne associée de mémoire cache; bus 105(c) : identifie le bus PCI lançant une requête pour la ligne de mémoire cache; dispositif 105(d) : identifie le dispositif lançant la requête pour les données de ligne de mémoire cache; validation d'octets 105(e) : identifie les octets à transférer et les chemins de données à utiliser pour transférer les données; identifiant 105(f) de transaction: identifie une transaction initiant la requête pour une lecture DMA; et nombre d'octets 105(g) : indique le nombre d'octets soumis à la requête de lecture. 5] L'unité de balise 101 stocke toutes les informations identifiées ci-dessus en partie pour identifier l'émetteur et la requête de départ. 6] Comme le montre également la figure 1A, chaque ligne d'état de l'unité d'état 102 peut inclure les données suive ntes: 15 20 25 verrouillage 106(a) de lecture: une variable indiquant qu'un d spositif d'E/S a lancé une requête pour la ligne de mémoire cache correspondante et que la ligne de mémoire cache n'a pas encore été retournée vers le dispositif ayant lancé la requête; données d'état 106(b) : les données d'état peuvent indiquer un ou plusieurs états des états de ligne de mémoire cache suivantes: partagé ("SH") : la ligne de mémoire cache est présente dans la mémoire cache et contient la même valeur que dans la mémoire principale; privé ("P") : la ligne de mémoire cache est présente dans la mémoire cache et la mémoire cache a un accès en lecture et en écriture à la ligne de mémoire cache; sale ("D") : la mémoire cache a les données marquées comme étant privée:3 et la valeur a été mise à jour seulement dans la mémoire cache; non valide ("I") : la ligne associée de mémoire cache ne représente pas la valeur actuelle des données; image saisie sur le vif ("SN") : la ligne associée de mémoire cache représente une valeur qui était actuelle au moment où une rec uête de lecture a été effectuée et qui a par la suite été espionnée; chargement en cours ("FIP") : la ligne associée de mémoire cache est en cours de chargement; et préchargement ("PRE") la ligne associée de mémoire cache est en cours de préchargement. 7] La figure 1B est un schéma fonctionnel d'un système d'ordinateur 107 conforme à un mode de réalisation. Comme l'illustre la figure 1B, le système d'ordinateur 107 inclut un sous-système d'E/S 108 comprenant au moins un contrôleur d'E/S (IOC) 109 qui communique avec une interface multifonctionnelle 110 par l'intermédiaire d'une liaison 111 à grande vitesse. Chaque élément d'une pluralité de fentes 112 pour carte d'E/S destinées à loger des cartes d'E/S est connecté au contrôleur d'E/S 10G par l'intermédiaire d'un bus d'E/S 113. L'interface multifonctionnelle 110 fournit entre autres une interface vers un certain nombre de CPU 114 et la mémoire principale 115. 8] La figure 1C est un schéma fonctionnel de haut niveau du contrôleur d'E/S 109. Un bloc 120 d'interface de liaison se connecte à un ou plusieurs sous-systèmes 122 d'interfaces d'E/S par l'intermédiaire de bus internes, unidirectionnels, représentés à la figure 1C par les bus 124. Le bloc 120 d'interface de liaison se connecte en outre à l'interface multifonctionnelle 1 1 CI par l'intermédiaire de la liaison à grande vitesse 111 laquelle, comme le montre la figure 1C, comprend un bus d'arrivée 228 (du point de vue de l'interface 110) et un bus de départ 230 (encore une fcis, du point de vue de l'interface 110). 9] La figure 2 est un schéma fonctionnel plus détaillé de l'un des sous-systèmes d'interfaces d'E/S 122. Le sous-système 122 d'interfaces d'E/S inclut une unité FiFo 200 d'écriture différée ("WPF" selon les initiales du terme anglo-saxon Write Posting FIFO), une unité 202 de mémoire cache et de mémoire tampon de traduction anticipée ("Cache/TLB" selon les initiales du terme anglo-saxon Translation Lookaside Buffer) et une pluralité d'interfaces de bus d'E/S 204. Chacune des interfaces de bus d'E/S 204 fournit une interface entre l'un des bus d'E/S 113 et le sous-système 122 d'interfaces d'E/S. Le sous-système 122 d'interface d'E/S inclut en outre une unité FiFo 208 de données de contrôle ("CDF" selon les initiales du terme anglo-saxon Control Data FIFO), une unité 210 de lecture et une unité DMA 212, à des fins qui seront décrites de manière plus détaillée ci-dessous. 0] L'unité Cache/TLB 202 inclut une mémoire cache 240 et une mémoire TLB 242. La mémoire cache 240 contient 96 entrées pleinement associatives, chacune ayant une largeur de 128 octets. Dans un mode de réalisation, une quantité considérable d'informations d'état est disponible sur chaque ligne de mémoire cache incluant l'état de ligne, le nombre d'octets écrits, le nombre d'octets en instance vers la ligne, le bus d'E/S auquel la ligne est destinée, et davantage. Par exemple, il sera admis que le mode de réalisation de mémoire cache de la figure 1A peut être utilisé dans certaines mises en oeuvre du sous-système d'interfaces d'E/S 122 aux fins de la présente divulgation. 1] Tel qu'utilisé dans la présente, le terme "extrémité inférieure" sera utilisé pour faire référence à l'extrémité d'un dispositif ou d'une unité la plus proche des fentes 112 pour carte d'E/S, tandis que le terme "extrémité supérieure" sera utilisée pour faire référence à l'extrémité d'un dispositif ou d'une unité I.a plus proche de l'interface multifonctionnelle 110. En conséquence, dans un mode de réalisation, l'extrémité inférieure de chacune de l'unité CDF 208, de l'unité 210 de lecture, de l'unité WPF 200 et de l'unité DMA 212 inclut une structure séparée pour chacune des interfaces 204 de bus d'E/S, de telle manière qu'aucun des bus d'E/S 113 n'est obligé d'entrer en conflit avec un bus quelconque des,autres bus, pour être mis en mémoire tampon dans le contrôleur d'E/S 109. Tout arbitrage entre les bus d'E/S 113 se produit à l'intérieur de chacune des unités 200, 208, 210 et 212, pour regrouper ou diviser le trafic en les ressources uniques à un niveau plus élevé (par exemple plus proche de l'interface multifonctionnelle 110;. Par exemple, une adresse d'écriture DMA montera à travers l'une des interfaces 204 de bus d'E/S et sera stockée dans un registre d'adresses correspondant (non montré) dans l'unité DMA 212. En référence maintenant également à la figure 3, les données suivant l'adresse entreront dans un élément dédié d'une pluralité d'éléments pré-WPF 300 dans l'unité WPF 200. Chaque élément pré-WPF 300 est câblé en dur à un bus correspondant des bus d'E/S 113. Lorsque les données atteignent la tête de l'élémert pré-WPF 300, un arbitrage se produit parmi tous les éléments pré-WPF, une adresse d'entrée de mémoire cache ("CEA" selon les initiales du terme anglo-saxon Cache Entry Address) est affectée à l'écriture, et les données sont transférées depuis l'élément pré- WPF vers une mémoire tampon FiFo principale 302 de données pour écriture différée ("WPDF" selon les initiales du terme anglo-saxon Write Posting Data FIFO). 2] Des mémoires tampons FiFo qui s'interfacent avec les bus d'arrivée et de départ 228, 230 sont des unités uniques da FiFo et ne sont pas divisées par les bus d'E/S 113. Les mémoires tampons FiFo dans l'unité d'arrivée 214 traitent différentes fonctions incluant des lectures d'erreur TLB et des chargements et des vidages depuis la mémoire cache 240. 3] Le contrôleur d'E/S 109 est la cible de toutes les transactions de lecture de mémoire PCI à destination de la mémoire principale 115. Une adresse virtuelle PCI sera traduite en une adresse physique à 44 bits par la mémoire TLB 242, si e,le est activée pour ce dernier accès, et ensuite transférée vers un contrôleur 304 de mémoire cache à travers les registres 306 d'adresses physiques. S'il existe une occurrence, c'est-à- dire que les données pour lesquelles une requête est lancée se trouvent déjà dans la mémoire cache 240, les données:seront automatiquement retournées vers le bus d'E/S ayant lancé la requête, à travers une mémoire tampon d'une pluralité de mémoires tampons FiFo 308 de données de lecture, dédiées à ceci. S'il n'existe aucune occurrence, une entrée de ligne vide de mémoire cache sera affectée pour stocker les données et une Entrée appropriée sera effectuée dans la mémoire tampon FiFo 310 de chargement. Si des indices de pré-chargement indiquent que des données supplémentaires doivent être envoyées, les nouvelles adresses seront de manière semblable générées et chargées depuis la mémoire principale. 4] Pour des lectures PCI-X de longueur fixe, jusqu'à huit requêtes DMA de lecture/écriture peuvent se situer dans chacune d'une pluralité de mémoires tampons FiFo d'adresses de requête 314 ("RAF" selon les initiales du terme anglo-saxon Request Address FIFO). Afin de minimiser le temps d'attente de démarrage pour les lectures DMA, il existe une fonction de pré-lectu-e qui commence le traitement de la lecture suivante dans chaque mémoire tampon RAF 314 avant que la lecture en cours n'ait été achevée. Ceci inclut les étapes consistant à traduire l'adresse en utilisant la mémoire TLB 242 et à émettre des chargements pour la lecture. Lorsque la lecture DMA en cours a achevé se:, pré-chargements, s'il existe une autre lecture derrière celle-ci dans la mémoire tampon RAF 314, des pré-chargements seront émises pour cette dernière lecture. Le flux d'origine de lecture continue; lorsqu'elle s'achève, les quelques premières lignes du flux suivant devraient déjà se situer dans la mémoire cache 240. 5] Généralement, la mémoire cache 240 reste cohérente, permettant à de multiples lectures DMA de sous-ligne de faire référence à la même copie chargée d'une ligne. Le progrès vers l'avant pendant les lectures est garanti par un "verrouillage" d'une entrée de mémoire cache qui a été chargée jusqu'à ce qu'il y soit fait accès depuis les bus d'E/S 113. Généralement, seulement une ligne de mémoire cache par transaction DMA est verrouillée à un moment donné quelconque. Le verrouillage d'une entrée de mémoire cache de cette manière est uniquement utilisé afin de garantir un progrès vers l'avant, non afin d'optimiser le CRA. Une entrée verrouillée ne signifie pas que la propriété pour la ligne de mémoire cache est verrouillée; ceci signifie simplement qu'un endroit est réservé dans la mémoire cache 240 pour ces dernières données jusqu'à ce qu'il y soit fait accès depuis le PCI. La propriété de la ligne pourrait encore se perdre en raison d'un rappel. Uniquement la même entité PCI qui avait lancé la requête pour les données au départ sera capable d'y accéder. Tout accès supplémentaire en lecture à cette dernière ligne de mémoire cache par une autre entité PCI serait retenté jusqu'à ce que l'entité PCI de départ ait lu les données, à quel point la ligne de mémoire cache est déverrouillée. Une ligne est considérée comme étant chargée, lorsqu'il est spécifiquement lancé une requête pour celle- ci par une transaction PCI, même si la transaction avait été retentée. Une ligne est considérée comme étant pré-chargée, si une requête est lancée pour celle-ci par le bloc de mémoire cache, en tant que le résultat de l'association de bits d'indice à une! ligne chargée. Des lignes de mémoire cache qui sont pré- chargées ne sont pas verrouillées et pourraient être vidées avant qu'elles ne soient réellement utilisées, s'il se produit un emballement de la mémoire cache. La spécification de PCI garantit qu'un maître dont une transaction est retentée, répétera la transaction à l'issue du processus. La taille de mémoire cache a été sélectionnée pour assurer qu'une ligne de mémoire cache verrouillée ne soit pas un problème de performance et ne contribue pas à la privation de ressources vis-à-vis de certains dispositifs PCI. 6] Le contrôleur d'E/S 109 maintient un bit de temporisation sur chaque ligne verrouillée de mémoire cache. Ce bit est remis à 0 à chaque fois qu'il est fait accès à la ligne correspondante de mémoire cache etest basculé à chaque fois qu'un temporisateur "lock_timeout" ("verrouillage_expiration") expire. Suite à la transition du bit de temporisation de 1 à 0, la ligne est vidée. Ceci est une sauvegarde destinée à empêcher qu'une ligne de mémoire cache soit verrouillée indéfiniment. 7] Il existe un bit pour chaque ligne qui indique qu'un chargement est en cours par rapport à cette dernière ligne. Si les données à lire retournent sur le lien pour une ligne qui n'a pas le bit de chargement en cours mis à 1, les données ne serort pas écrites dans la mémoire cache pour cette dernière transaction et une erreur sera enregistrée. Il existe également un temporisateur sur chaque chargement en cours destiné à empêcher qu'une ligne devienne verrouillée indéfiniment. 8] En ce qui concerne les écritures DMA, si l'entrée à la tête de la mémoire tampon WPDF 302 est une écriture à destination de la mémoire, une ligne de mémoire cache a dé.à été réservée pour les données. Une mémoire tampon FiFo pour adresses d'écriture différée ("WPAF" selon les initiales du terme anglo-saxon Write Posting Address FIFO") contient la valeur du CEA. L'état de la ligne de mémoire cache indiquée par le CEEA est vérifié pour déterminer si la propriété de la ligne a été obtenue. Une fois que la propriété en est reçue, les données sont copiées depuis la mémoire tampon WPDF 302 vers l'intérieur de la mémoire cache 240. Les bits d'état de la ligne de mémoire cache sont ensuite mis à jour. Si la propriété n'en a pas encore été -eçue, l'état de la ligne de mémoire cache est surveillé jusqu'à ce que la propriété en soit obtenue, auquel point l'écriture est effectuée. 9] Pour traiter une nouvelle requête DMA, la mémoire cache 240 doit avoir des lignes disponibles afin d'effectuer des requêtes depuis la mémoire principale. Pour maintenir disponibles quelques lignes de mémoire cache, un algorithme de remplacement de cache ("CRA") est employé. Si le CRA effectue une détermination pour vider une ligne, l'état de ligne de mémoire cache sera vérifié et le CEA sera écrit dans une mémoire tampon FiFo 316 de vidage afin de faire de la place pour la transaction suivante. 0] Des lignes peuvent également être vidées automatiquement, et il existe des mécanismes d'indication de vidage automatique séparé et pour les lectures, et pour les écritures. Pour des lectures DMA connectées, il existe deux types différents de vidage automatique. Dans le cas par défaut, un vidage se produit lorsque le dernier octet de la ligne de mémoire cache est réellement lu sur la PCI. Le deuxième type est un mode de vidage automatique agressif qui peut être activé en mettant Ln bit d'indication à 1 avec la transaction. Dans ce mode, la ligne est vidée depuis la mémoire cache 240 dès que le dernier octet est transféré vers la mémoire tampon appropriée des mérloires tampons RDF 308. Pour des lectures DMA de longueur fixe, le mode de vidage automatique agressif est toujours utilisé. 1] Il existe également deux types de visages automatiques pour les écritures. Le mode par défaut fait en sorte qu'une ligne soit vidée avec le dernier octet écrit dans une ligne de mémoire cache depuis la mémoire tampon WPDF 302. Le deuxième mode, activé par l'intermédiaire d'un bit d'indication avec la transaction, est un vidage automatique agressif. Dans ce mode, la ligne est vidée depuis la mémoire cache 240 dès qu'il n'exista plus aucune écriture en instance à destination de cette dernière liç ne de mémoire cache dans la mémoire tampon WPDF 302. 2] En référence toujours à la figure 3, chacun des bus d'E/S 113 peut avoir jusqu'à huit requêtes en file d'attente dans sa mémoire tampon RAF 314. Un contrôleur de séquence DMA 318 de l'unité DMA 212 peut travailler sur une lecture, une écriture et une pré-lecture pour chaque bus d'E/S. Chaque lecture/écriture peut s'effectuer pour un bloc de mémoire allant jusqu'à 4 koctets. Une pré-lecture n'est démarrée que lorsque la lecture en cours est presque achevée. Une écriture peut passer devant une lecture, si la lecture ne fait pas de progrès. 3] Le temps d'attente DMA est caché comme suit. Pour des lectures DMA, un pré-chargement est utilisé pour minimiser le temps d'attente vu par les cartes d'E/S. Une indication indiquant la profondeur de chargement est fournie avec la transaction et est définie par logiciel. Comme indiqué précédemment, pour une écriture DMA, les données à écrire partent depuis le bus d'E/S vers l'intérieur d'un élément correspondant des éléments pré-WPF 300 et ensuite vers l'intérieur de la mémoire tampon WPDF 302. Les mémoires tampons FiFo 300, 302 sont suffisamment grandes pour cacher une partie du temps d'attente associé à une requête DMA d'écriture. 4] Une modification simple de l'algorithme de remplacement peut améliorer sa performance de manière dramatique. Ce changement consiste à ajouter un bit "prefetch_lock" (préchargement_verrouillage) à la ligne d'état de chaque entrée de la mémoire cache. Le bit "prefetch_lock", lorsqu'il est mis à 1, empêche que le CRA remplace cette dernière ligne de mémoire cache. Le bit "prefetch_lock" sera mis à 1 pour tout chargement non spéculatif dans la mémoire cache. Le bit sera remis à 0 suite à l'utilisation ou au vidage des données. 5] Ce mode de réalisation est approprié pour une structure quelconque de mémoire cache qui a des chargements non spéculatifs. Ce mode de réalisation assure que les données soient utilisées avant d'être supprimées. Le bit "prefetch_lock" sera utilisé avec la portion non spéculative des requêtes DMA de Iectu-e. La portion non spéculative est la partie de la lecture DMA qui est garantie pour être mise à disposition à la carte d'E/S. Par exemple, une lecture DMA de taille fixe par PCI-X spécifie exactement pour combien d'octets elle a lancé une requête. Le bit "prefetch_Iock" des lignes de mémoire cache, dans lesquelles tous ces derniers octets sont stockés, sera mis à 1 jusqu'à ce que les données aient été envoyées vers la carte d'E/S. 6] Sans le bit "prefetch_lock", le CRA pourrait déplacer une ligne dont les données n'ont pas été envoyées vers la carte d'E/S. Clairement, ceci serait contre-productif, parce que cette dernière ligne aurait besoin d'être ré-chargée afin de satisfaire à la requête DMA. Ceci réduirait et la largeur de bande, et la performance globale. 7] Le bit "prefetch_lock" est remis à 0 une fois que les données provenant de la lecture DMA ont été envoyées vers la carte d'E/S. A ce moment, la ligne peut être sélectionnée pour vidage par le CRA. Si le CRA est requis lorsque la mémoire cache est pleine, il doit sélectionner des lignes dont le bit "prefetch_lock" n'est pas mis à 1. Ces dernières lignes peuvent contenir des pré-chargements spéculatifs, des données se trouvant encore dans la mémoire cache depuis une lecture DMA précédente, etc. [0048] Afin d'empêcher des impasses, un mécanisme à sécurité intégrée est requis pour traiter la situation imprcbable dans laquelle la mémoire cache est pleine et toutes les lignes ont le bit "prefetch_lock" mis à 1. Si une requête pour une ligne de mémoire cache doit être satisfaite afin de faire du progrès vers l'avant, il est acceptable de déplacer une ligne dont le bit "prefetch_lock" a été mis à 1. Cette dernière situation sera extrêmement rare. Un procédé pour traiter cette situation est de remettre à 0 les bits "prefetch_lock" de toutes les lignes, lorsqu'aucun progrès vers l'avant ne peut être fait et d'exécuter ensuite le CRA, laissant la sélection de la ligne/des lignes à vider au CRA. 9] Si une ligne de mémoire cache est verrouillée, mais qu'une condition d'erreur se produit de telle manière que la ligne de mémoire cache ne sera jamais utilisée, un certain mécanisme doit exister pour remettre à 0 le bit "prefetch_lock" de la ligne. Une possibilité est de remettre à 0 tous les bits "prefetch_lock" de toutes les lignes de mémoire cache, lorsque la mémoire cache devient pleine. Si les conflits de mémoire cache sont sans importance et que la mémoire cache n'est pas pleine, les bits "prefetch_lock" peuvent rester mis à 1 sans aucune perte de performance. S'il existe un conflit de mémoire cache et que la mémoire cache est pleine, tous les bits "prefetch_lock" peuvent être remis à 0. Ceci devrait être une occurrence rare. 0] Une autre possibilité est de mettre en oeuvre un compteur pour chaque ligne verrouillée. Après un certain nombre de cycles d'horloge, si la ligne est encore verrouillée, elle sera déverrouillée même si les données n'ont pas été utilisées. Si la période de temporisation est sélectionnée de manière à être suffisamment longue, ce déréglage du verrou ne se produira que pour une condition d'erreur. 1] La figure 4 est un ordinogramme du fonctionnement d'un mode de réalisation. Il sera admis que le procédé illustre à la figure 4 est exemplifié pour des cartes d'E/S à titre de mise en oeuvre, bien que d'autres entités capables de DMA puissent ê':re du ressort des enseignements contenus dans la présente. Au bloc 400, une carte d'E/S effectue une lecture DMA ou une écriture DMA. Au bloc 402, le contrôleur d'E/S divise la requête DMA en requêtes, ayant la taille d'une ligne de mémoire cache, à destination de la mémoire. Au bloc 404, il est effectué une détermination pour savoir si la requête de mémoire en cours est spéculative. Tel qu'utilisé dans la présente, le terme "requête spéculative" signifie toute requête qui n'est pas soit la première ligne de mémoire cache d'une lecture DMA par PCI, soit une ligne de mémoire cache quelconque d'une lecture DMA de taille fixe par PCI-X. Si la requête de mémoire en cours est non spéculative, l'exécution procède vers le bloc 406, auquel un bit "prefetch_lock" pour la ligne de mémoire cache est mis à 1 (verrouillée), indiquant que la ligne ne peut pas être remplacée par un CRA; autrement, l'exécution procède vers le bloc 408, auquel le bit "prefetch_lock" pour la ligne de mémoire cache est mise à 0 (déverrouillée), indiquant que la ligne peut être remplacée par un CRA. 2] Ultérieurement à l'exécution du bloc 406 ou du bloc 408, l'exécution procède vers le bloc 412, auquel le conirôleur d'E/S émet la requête de mémoire. Au bloc 414, il est effectué une détermination pour savoir si toutes les requêtes de mémoire pour la transaction DMA ont été émises. Sinon, l'exécution procède vers le block 415, auquel la requête de mémoire suivante pour la transaction DMA en cours est évaluée, et retourne ensuite vers le bloc 416. Si une détermination positive est effectuée au bloc 414, l'exécution procède vers le bloc 416, auquel il est effectué une détermination que toutes les requêtes de mémoire peur la lecture/écriture DMA en cours ont été émises. 3] Il sera admis que l'ordinogramme illustré à la figure 4 n'illustre que la manière dont les transactions DMA sont traitées conformément à un mode de réalisation. La séquence d'événements qui est exécutée lorsque les données pour lesquelles une requête est lancée sont retournées depuis la mémoire principale vers la mémoire cache est en dehors de la portÉe des modes de réalisation décrits dans la présente et ne sera par conséquent pas décrite de manière plus détaillée. De surcroît, comme indiqué précédemment, le bit "prefetch_lock" d'une ligne de mémoire cache sera remis à 0 suite à la mise à dispositicn des données dans la ligne de mémoire cache à l'agent ayant lancé la requête ou suite au vidage des données, par exemple en raison de l'expiration d'un temporisateur associé aux données. 4] Une mise en oeuvre des modes de réalisation décrits dans la présente fournit ainsi un procédé et un système pour une utilisation de la mémoire cache avec un bon rendement en empêchant que des lignes de mémoire cache soient vidées avant que les données stockées dans celles-ci ne puissent être utilisées. Les modes de réalisation montrés et décrits ont été caractérisés comme étant fournis uniquement à titre d'illustration; il doit par conséquent facilement être bien entendu que différents changements et différentes modifications pourraient être effectués à ceux-ci sans s'écarter de la portée de la présente inventior, telle qu'exposée dans les revendications suivantes. 21 REVENDICATIONS 1. Procédé d'utilisation de mémoire dans un système d'ordinateur (107), comprenant les étapes suivantes: - déterminer, en réponse à la réception d'une transaction DMA depuis une entité (400), si une requête de mémoire comprenant une portion, ayant la taille d'une ligne de mémoire cache, de la transaction DMA est spéculative (404) ; et - assurer, en réponse à une détermination que la requête de mémoire n'est pas spéculative, qu'un indicateur de verrouillage de pré-chargement d'une ligne de mémoire cache d'une mémoire cache associée à la requête de mémoire soit dans une condition verrouillée (406), empêchant ainsi qu'un algorithme de remplacement de cache ("CRA") vide la ligne associée de mémoire cache. 2. Procédé selon la revendication 1, comprenant en outre l'étape consistant à assurer, en réponse à une détermination que la requête de mémoire est spéculative (404), qu'un indicateur de verrouillage de préchargement d'une ligne de mémoire cache associée à la requête de mémoire soit dans une condition déverrouillée (408). 3. Procédé selon la revendication 1 ou la revendication 2, comprenant en outre l'étape consistant à diviser, en réponse à la réception d'une transaction DMA depuis l'entité, la transactions DMA reçue en un certain nombre de requêtes de mémoire ayant la taille d'une ligne de mémoire cache (402). 4. Procédé selon la revendication 1, la revendication 2 ou la revendication 3, comprenant en outre l'étape consistant à déverrouiller l'indicateur de verrouillage de pré-chargement, en réponse à la mise à disposition, à l'entité, de données stockées dans la ligne associée de mémoire cache. 5. Procédé selon la revendication 1, la revendication 2, la revendication 3 ou la revendication 4, comprenant en outre 'étape consistant à déverrouiller l'indicateur de verrouillage de pré-chargement, en réponse à l'expiration d'une période de temps prédéterminée associée à des données stockées dans la ligne associée de mémoire cache. 6. Procédé selon la revendication 1, la revendication 2, la revendication 3, la revendication 4 ou la revendication 5, dans lequel l'étape de détermination comprend l'étape consistant à déterminer si la requête de mémoire comprend une portion d'une transaction de lecture DMA par PCI-X, dans laquelle, si la requête de mémoire comprend une portion d'une transaction de lecture DMA par PCI-X, il est effectué une détermination que la requête de mémoire n'est pas spéculative (404). 7. Procédé selon la revendication 1, la revendication 2, la revendication 3, la revendication 4, la revendication 5 ou la revendication 6, dans lequel l'étape de détermination comprend l'étape consistant à déterminer si la requête de mémoire est une première requête de mémoire d'une transaction de lecture DMA par PCI-X, dans laquelle, si la requête de mémoire est une première requête de mémoire d'une transaction de lecture DMA par PC:I-X, il est effectué une détermination que la requête de mémoire n'est pas spéculative (404). 8. Procédé selon la revendication 1, la revendication 2, la revendication 3, la revendication 4, la revendication 5, la revendication 6 ou la revendication 7, dans lequel l'étape de détermination comprend l'étape consistant à déterminer si la requête de mémoire comprend une portion d'une transaction de lecture DMA de longueur fixe, dans laquelle, si la requête de mémoire comprend une portion d'une transaction de lecture DMA de longueur fixe, il est effectué une détermination que la requête de mémoire n'est pas spéculative (404). 9. Procédé selon la revendication 1, la revendication 2, la revendication 3, la revendication 4, la revendication 5, la revendication 6, la revendication 7 ou la revendication 8, dans lequel l'entité est un dispositif d'entrée/sortie (E/S= et la mémoire cache est une mémoire cache d'entrée/sortie (E/S) cohérente (240). 10. Système d'utilisation de mémoire dans un ordinateur (107), le système comprenant: un moyen (240) de mémoire cache, destiné à stocker des données relativement à des transactions DMA; un moyen, fonctionnant en réponse à la réception d'une transaction DMA depuis une entité (400), destiné à déterminer si une requête de mémoire comprenant une portion, ayant la taille d'une ligne de mémoire cache, de la transaction DMA est spéculative (404) ; et un moyen, fonctionnant en réponse à une détermination que la requête de mémoire n'est pas spéculative, destiné à assurer qu'un indicateur de verrouillage de pré-chargement d'une ligne de mémoire cache du moyen de mémoire cache associée à la requête de mémoire soit dans une condition verrouillée (406), empêchant ainsi qu'un algorithme de remplacement de cache ("CRA") v de la ligne associée de mémoire cache.