Brevet FR2613506A1 — publié le 19881007

METHODL DE TRAITEMENT D ' ERrEUP. DE SECTEURS DE DISQUES DANS TUNE ANTEMEMiOiRE DOMAINE DE L'INVENTION La présente invention concerne des améliorations apportées aux méthodes d'exploitation d'un système de traitement de données comportant une antémémoire de dispositif d'emmagasinage à accès direct (DASD) de façon à traiter des erreurs de secteur de disques provoquées par des défauts du milieu d'emmagasinage. La présente invention concerne plus particuliiremrent une méthode d'exploitation d'un ordinateur personnel performances élevées pour apporter une sc!uticn bz:z marché. au problè.e du traitement des erreurs graves dans une antêmémoire DASD. ART ANTEPiREUR i1 est bier. connu dans l'art antérieur..utiiiser des unités de commande à discues fixes ou durs pour emmagasiner des informations pour effectuer des opérations de traitement dans ure unité de traitement connectée à une mémoire principale. Des informations sozt emmaga snees sur des cdsaues selc:. unre configuration predéterminée de cylindres et de secteurs, chaque secteur contenant unr. nombre prédéterminé de multiplets. Une unité de commande comprend plusieurs têtes, une tête étant prévue de chaque côté d'un disque sur lequel des données sont emmagasinées. Les données sont lues depuis un disque, secteur par secteur. Pour accéder à un secteur désiré, une tête doit tout d'abord être entraînée au cylindre contenant le secteur désiré, le disque doit être entraîné en rotation devant la tête jusqu'à ce que le secteur désiré soit atteint et le secteur est aiors lu et son contenu placé dans une mémoire intermédiaire. Er. considérant le temps total requis pour accéder à des données sur un disque, on constate que le temps le plus long s'écoule pendant le mouvement physique d'une tête. Ainsi, lorsque le traitement implique une importante activité d'entrée/sortie (E/S), il est hautement souhaitable de réduire autant que possible l'importance du mouvement de la tête pour bénéficier de performances améliorées. La mise en antémémoire DASD est une technique connue dans l'art antérieur et constitue un moyen d'améliorer les performances du systàme en réduisant l'importance du mouvement de la tête et l'activité E/S physique. Selon cette techr.ique, une partie de la mémoire principale est utiLisée comme une antémémcire pour emmagasiner des pages de secteurs de donnees. Lorsque l'on accède initialement _ un secteur désir-, non seulement ce secteuz mais aussi un ou plusieurs secteurs proches supplementaires sont lus dans i'antCm-moire et Les acczs suivants c crs secteurs sCnt faits k des vitesse de mémoire principale au lieu d'être faits à des vitesses d'unité de commande à disques. L'amélioration des performances est due à la probabilité de l'emmagasinage des données suivantes a traiter près des données qui ont été précédemrment traitées. L'un des problèmes connus dans l'art antérieur survient en raison du fait que des défauts existent dans le milieu d'emmagasinage à disque. Ainsi, des secteurs contenant ces défauts sont considérés comme mauvais et ne peuvent pas être utilisés. Ces mauvais secteurs sont normalement identifiés par formattage et les utilisations ultérieures de ceux ci sont évitées par simple saut des mauvais secteurs. Le problème devient plus compliqué dans les systèmes à antémémoire puisque, lorsqu'un bon secteur est initialement lu dans l'antémémoire, des secteurs proches de la même page peuvent contenir des erreurs ou être,aucvas. Dans le cadre de l'art antérieur aui nous est connu, ce problème a été résolu de deux manières différentes. Tout d'abord, toute page contenant un mauvais secteur est elle même considérée comme mauvaise et un sianal ou message d'erreur est envoyé à l'utilisateur. Ensuite, l'unité de commande de disques peut être construite de façon que seuls les bons secteurs soient envoyés à l'antémémoire. Cette solution est une solution matérielle et est relativement compliquée et coûteuse à réaliser. La présente invention concerne une méthode qui peut être facilement mise en oeuvre par logiciel ou prcgrammaticn pour apporter une solution effective bon marché qui serait particulièrement utile dans les ordinateurs personnels a hautes performances et relativement bon march,. RESU ME DE L'IxI N-T:': L'un des objets de la presente invention est de fournir une nouvelle méthode de traitement des erreurs de secteur de disques dans un système à antémimcire DASL. Ur. autre cl-jet de la présente inventicn est d'apporter une solution bon marché au problème du traitement des erreurs de secteur dans un ordinateur personnel ayant un système d'antémémoire DASD. Un autre objet de la présente invention est de fournir une méthode de traitement des erreurs de secteur dans un système d'antémémoire DASD, laquelle méthode pourra être facilement mise en oeuvre par la programmation de matériel connu. Un autre objet de la présente invention est de fournir une méthode pouvant être facilement utilisée avec un système d'exploitation de disques (DOS) dispcnible dans le commerce pour assurer une fonction d'antéméimoire qui soit transparente à l'utilisateur tout en résolvant facilement le problème du traitement des erreurs de disques. En résumé, selon les enseignements de la présente invention, à mesure que chaque page contenant plusieurs secteurs est lue en mémoire principale, une table séparée est construite et emmagasine des informations pour savoir si chaque secteur est bon ou mauvais. Les accès ultérieurs à n'importe quel secteur sont effectués en se reportant à ou en consultant les informations de cette table et en sautant tout secteur indiqué comme étant mauvais ou erroné. DESS:NS D'autres ob3ets et avantages de la présente invention ressortirunt mieux fe la descriptio- aui va suivre faite en se reportant aux dessins ci joints dans lesquels: La figure i est une représentation schématique d'un s\,stème d'ordinateur personnel dans lege&2 la n7thode. de la présente invention peut être mise en oeuvre. La figure 2 est une représentation schématique de la structure de données d'antémémoire utilisée dans la présente invention. La figure 3 est une représentation schématique montrant combien de pages sont référencées depuis une table de données mêlées. 26 '3506 La figure 5 est une représentation schm.tiaue illustrant la chaîne de liste LRU (la page la moins récemment utilisée). La figure 6 est une représentation schématique montrant comment divers programmes et matériels sont généralement mis en oeuvre dans la présente invention. Les figures 7-12 sont des organigrammes illustrant la méthode de la présente invention, et La figure 13 est une représentation schématique illustrant la structure des données de liste d'erreurs. DESCRIPTION La description qui va suivre est organisle en deux parties. La premiere partie décrit le fonctionnement gCnéral de l'antémémoire DASD et décrit donc J'environnemernt dans lequel est utlilse la mêthode de la présente invention. La deuxième partie est une description détaillée du traitement des erreurs des milieux d'emragasinage. Il est cependant évident que la présente invention réside dans la méthode et non dans la mise en ceuvre d'un logiciel particulier. ANTEMEMOIRE La méthode de la présente invention est de préférence utilisée dans un système de traitement de données classique 10 tel que l'ordinateur personnel IBM AT. Ce système 10 comprend généralement un processeur 12 connecté à une mémoire principale 14 et à des dispositifs E/S 15. Ce système peut contenir une ou plusieurs unités de commande de disques 16, chacune de ces unités étant respectivement connectée une unité d'entraînement de discues 18. Une antémémoire 2C et une mémoire intermédiaire de données 2; sort formées dans la mémoire principale 14 comme des structures de données, la mémoire intermédiaire de données étant utilisée par DOS pour emmagasiner temporairement chaque secteur de données en cours de transfert depuis les unités d'entraînement de disques 18. En se reportant à la figure 2, on voit que l'antémémoire 20 comprend une structure de pages 21 comprenant une pluralité de pages d'antémémoire 221 à 22-n. L'antémémoire 20 contient en outre une table de données mêlées 24, un pointeur de liste libre 26, un pointeur LRU (la page la moins récemment utilisée) 28, un pointeur MRU (la page la plus rCcemment utilisée) 30 et une liste d'erreurs 31 dont les détails seront maintenant décrits. Ces six parties toujours présentes quelque soit la tai2le de l'antêmémcire, sort: La pace d'antémémcire 22 - Flle définit la structure d'ure ?age d'antémÄmnire en mémoire. Elle contient des informations pour étiqueter la page physique qui est représentée, la partie de la liste LRU, la partie de la liste de conlits de la table de données mêlées et les données reelles de la page d'antémémoire groupées par secteurs. Le pointeur LRU (la page la moins récemment utilisée) 28 - Ce pointeur indique une page d'antémémoire qui est la page la moins récemment utilisée dans l'antémémoire. C'est à dire que toutes les autres pages dans l'antémémoire ont été accédées plus récemment que la page indiquée par le pointeur LRU. Le pointeur MRU (la page la plus récemment utilisée) 30 - Ce pointeur indique une page d'antémémoire qui est la page la plus récemment utilisée dans l'antémémcire. C'est dire qu'aucune page dans l'antémémoire n'a -td accédée plus récemment que la page indiquée par le pointeur MRU. La table de données mêlées d'antémémoire 24 - Cette table est un vecteur des pointeurs des pages d'antémémoire. Le vecteur a une longueur de 311 entrées. Lorsqu'un secteur est demande, l'antémémoire intercepte la demande et la mêle dans cette table pour déterminer si le secteur est dans l'antémémoire. En utilisant une table de données mêlées, un temps très court suffit pour déterminer si un secteur est dans l'antmermoire, même s'il y a ur. grand nombre de pages dans l'antémémoire. Le pointeur de liste libre 26 - Ce pointeur indique une page d'antémémoire qui n'est pas actuellement utilise dans l'a ntm rcire. irnitialement, toutes les pages dans!'antémémoire sont sur cette liste. Lorsque l'on constate qu'une page n'est pas dans l'antémémoire, une page est retirée de la liste libre et placée dans l' antémémoire. La liste d'erreurs 31 - Cette structure de données décrite en détails ci dessous, est utilisée pour indiquer l'historique des erreurs de pages. La table 1 indique les champs d'une page d'antémémoire 22. Les champs dans la structure sont définis ci dessous. On notera que tous les pointeurs sont maintenus sous la forme de deux multiplets. C'est le cas pour une architecture segmentée comme la famille Intel 8086/80186/80286/80386. La valeur emmag-asnee dans le pointeur est le segment (8086/80186) ou le sélecteur (8C286/80386). Un décalage suppose de O est associe à chaque structure de données. Les divers champs ont les significations suivantes: Champ 1 Ce champ contient des bits ou des drapeaux qui indiquent les secteurs dans la page qui sont présents et contiennent des données valides et les secteurs qui sont manquants en raison d'erreurs. Champ 2 Ce champ détermine sur quelle unité d'entraînement cette page particulière est contenue. Champ 3 Ce champ contient l'adresse de bloc relative (REBA) du secteur de début de la page sur unité d'entraînement. Ch&rap 4 Ce champ indique la page suivante qui est moins récemment utilisée que cette page. S'il s'agit de la page la moins récemment utilisée, ce champ contiendra alors la valeur 0. Ce champ est aussi utilisé pour lier des pages ensemble sur la liste libre. Champ 5 Ce champ indique la page suivante qui est plus récemment utilisée que cette page. S'il s'agit de la page la plus récemment utilisée, ce champ contiendra alors la valeur 0. Champ 6 Ce champ indique la page suivante qui est sur la liste de conflits de la table de données mêlées. Champ 7 Ce champ indique la page précédente qui est sur la liste de conflits de la table de données mêlées. Champ 8 Ce champ contient les données pour la page telles qu'elles sortent de DASD. Si cette page est référencée plusieurs fois, les parties de la page qui sont demandées seront des copies issues de cette mémoire intermédiaire plutôt que lues depuis le dispositif. Champ Contenu Multiplets I Drapeaux présents 2 2 ID Entraînement 1 3 RBA 4 4 LPU suivant 2 LRU précédent 2 6 Conflit suivant 2 - Conflit précédent 2 8 Mémoire intermédiaire pages Secteurs l-8 TABLE 1 PAGE ANTEMEMOIRE 22 Chaque RBA est déterminé par la formule suivante: RBA = ((CN x NH) + HN) x SPT + SN (Formule 1) dans laquelle: CN = Nombre de cylindres NH = Nombre de têtes par unité d'entraînement HN = Nombre de têtes SPT = Nombre de secteurs par piste SN = Nombre de secteurs 1l L'index de données mêlées est determinî pr ia formule suivante: Index données mêlées = RBA shr log (taille page) mod 311 (Formule 2) dans laquelle: shr = RBA décalé à droite du nombre de bits selon le logarithme base 2 de la taille de page taille page = nombre de secteurs par page mod = fontions modulo qui renvoient le reste La valeur de 311 est préférée comme longueur de table de données mêlées car i. s'agit d'un nombre premier relativement important. Etant donné cue 311 est un nombre premier important, il est peu probable cu'une application l'utiiise très souvent ou l'un de ses multiples pendant i'accès à l'antémémoire. Ceci permet de maintenir les chaînes de conflits courtes er réduisant les risques d'une application passant et synchronisme avec l'algorithme des donnees mrlées de façon que les données mêlées puissent être resclues rapidement. En se reportant à la figure 3, on voit que les diverses positions d'index 0-310 de la table 24 contiendront soit un 0, soit un pointeur de la première et peut être seule page d'antémémoire enchaînée à cette position. Si l'entrée de la table de données mêlées qui est sélectionnée contient la valeur 0, il n'y a alors pas de pages indiquées par l'entrée et la page n'est pas dans l'antémémoire. Ceci est considéré comme un "défaut de page". La position d'index 1 par exemple, contient un zéro indiquant qu'il n'y a pas de pages associées à celle ci dans l'antémémoire. Si d'autre part. l'entrC-e de la table de données mêlées n'est pas O, la valeur ici est utilisée comme un pointeur pour indiquer une page d'antémémoire 22. L'entraînement et RBA sur une page d'antémémoire sont comparés à l'entraînement requis et RBA. S'il apparaît que ce sont les mêmes, on considère qu'une page a été trouvée et que la page requise est dans l'antémémoire. Si ce ne sont pas les mêmes, la valeur Conflit suivant dans cette page est utilisée pour indiquer la page d'antémémoire suivante. Si une valeur de 0 est extraite de ce champ, la fin de la chaîne de conflits a été atteinte et la page requise n'est pas dans l'antémémoire. Il s'agit à nouveau d'un "défaut de page". Comme illustré par les dessin, les pages A-F sont revendiquées à partir de la table 24 pour former trois chaînes séparées de longueurs différentes. Si une page 22 est trouvée dans l'antém&moire, a chaîne de conflit pour cette entre de table de données mêlées est ré-ordonn;e pour que!D page trouvée sc!t ern tête de la chaîne de conflit. L'idée ici est que si la chaîne de conflit est gardée dans une ordre MRU, les balayages er. descendant la chaîne de conflits seront courts en raison de la probabilité d'un nouvel accès d'une page récemment utilisée. Ceci est particulièrement vrai si une page d'antémémoire représente plus d'un secteur physique. Si une page n'est pas trouvée dans l'antémémoire, une nouvelle page est attribuée (les moyens exacts permettant de réaliser cette opération seront décrits ultérieurement). Une page est lue depuis un disque et placée dans la mémoire intermédiaire de pages (champ 8). La nouvelle structure de page d'antémémoire est alors construite en fonction de la table de données mêlées avec des algorithmes similaires " ceux qui furent utilisés pour déterminer que la page n'était pas dans l'antémemoire. Il y a une différence importante. La chaîne de conflits pour l'entrée de lea table de données mêlées n'est pas résolue. A la place, la nouvelle page est insérée en tête de la chaîne de conflits si bien que les chaînes de conflits restent ordonnées par rapport à MRU. En outre, les pointeurs de chaîne LRU sont ré-ordonnés pour indiquer cette page comme la plus récemment utilisée. Une nouvelle page 22 n'est placée dans l'antémémoire 20 que lorsqu'un secteur requis n'est pas trouve dans l'antémémoire. La méthode a été décrite dans la section précédente. Cette section décrira comment une page est réellement attribuée de facon qu'elle puisse être placée dans la structure d'antémémoire. Il y a deux moyens d'attribuer une page. S'il y a une ou plusieurs pages sur la liste libre d'antémémoire, une page est retirée de la liste libre et attribuée pour la nouvelle page. S'il n'y a pas de pages sur la liste libre d'antémémoire, la page qui est indiquée par le pointeur LRU est retirée de la structure d'antémémoire et réattribuée à la nouvelle page. La figure 4 montre la structure de la liste libre d'antémémoire. Le pointeur de liste libre 26 indique la page d'antémémoire 22 en tête de la liste et l'un des champs de pointeur indicue la page libre suivante. Initialement, toutes les pages d'antémémoire sont sur la liste libre et aucune page n'est indiquée par la table de données mêlées ou la liste LRU. Lorsque des requêtes sont faites au disque et qu'il y a des défauts de page d'antémémoire, de plus en plus de pages 22 seront retirées de la liste libre jusqu'à ce que finalement, il n'y est plus aucune page sur la liste libre. Dans ce cas, les pages sont ré-utilisées en se basant sur la liste LRU. La figure 5 montre la structure de la liste LRU avec les pointeurs LPU et MRU 28 et 30 qui indiquent les extrémités de la liste et les diverses pages 22 étant enchainées par les pointeurs LRU Suivant et LRU Précédent. Etant donné que l'antémémoire essaie toujours d'effectuer une attribution depuis la liste libre avant de retirer des pages de la liste LRU, il est possible d'ajouter dynamiquement plus de pages à i'antémémoire une fois que l'antémémoire est opérationnelle. Ceci est particulièrement souhaitable si l'antémémoire n'est mise en oeuvre qu'en logiciel seulement. Le raisonnement derrière tout cela est qu'un système d'exploitation peut voir que la mémoire principale n'est pas entièrement utilisée et peut décider qu'une partie de cette mémoire pourrait être bien utilisée en dcnnant une partie de ou toute la mémoire inutilisée à l'antémémoire. L'inverse (le retrait de pages de l'antémémoire) est aussi possible en retirant une ou plusieurs pages partir de i'extrémit de la liste LU. Ceci peut ne pas être souhaitable étant donné qu'on ne peut pas garantir que les pages sont physiquement contigues en memoire. Mais en considérant un système d'exploitation suffisamment sophistiqué, la fragmentation de la mémoire peut ne pas être un problème. Chaque fois qu'une page est accédée dans l'antémémoire (soit par un coup au but ou par l'attribution d'une nouvelle page), cette page est retirée de sa position courante dans la liste LRU et passée en tête de la liste indiquée par le pointeur MRU. Etant donné que la structure de page d'antémémoire est fondée sur des pointeurs, le mouvement des pages dans la liste LRU est assurée par le simple déplacement alentour des valeurs de pointeur d'une manière connue. L'épinglage d'antémémoire (le placement permanent d'urne ou plusieurs pages dans l'antémémoire) est assuré facilement par ce concept. Pour épingler une page, tout ce qu'il est nécessaire de faire est de retirer la page de la liste LRU. Etant donné que des pages sont ré-attribuées à partir de la liste LRU, une page qui n'est pas sur la liste LRU ne peut jamais être ré-attribuée. L'épinglage est souhaitable lorsque l'on n'accède pas suffisamment souvent à certaines pages pour les conserver dans l'antémémoire. Ceci permettrait des structures de système de fichier comme des répertoires, des mappes de bits d'attribution, des fichiers de système, etc.... d'être conservées dans l'antémémoire pour assurer de bonnes performances sans qu'elles scient chassées par une lecture d'un fichier important. Afin d'exécuter l'épinglage d'antémémoire d'une manière utile, il est souhaitable de faire coopérer i'antémémoire et le système d'exploitation ou au moins un accessoire du système d'exploitation. L'accessoire irnformriera l'antémémoire que jusqu'à indication différente, les pages requises ne sont pas à placer dans LRU. L'accessolre lira alors le ou les secteurs, le ou les fichiers, etc..., et indiquera alors à l'antémémoire aue toutes autres requêtes d'antémémoire placeraient les pages dans LRU. L'antémémoire devrait êtres sensible au fait que certaines pages peuvent ne pas faire partie de LRU et ne doivent pas être insérées dans LRU en cas d'accès. On peut s'assurer de cela lorsqu'un coup au but d'antémémoire est réalisé en vérifiant si les champs de LRU Suivant et Précédent sont à 0. Si c'est le cas, la page n'est pas à placer dans LRU. De cette manière, aucun bit ou drapeau supplémentaire n'a à faire partie de la structure de page d'antémémoire pour supporter l'épinglage. La figure 6 montre de manière générale comment la présente invention est mise en oeuvre selon un ensemble de procédures appelé CACHESYS associé ' des programmes et du matériel classiques pour exécuter ladite méthode de la présente invention. Lorsqu'un programme d'application 40 a besoin de lire des données sur un disque 18, DOS 42 est appelé et, au moyen d'une interruption classique 13H, l'appel concernera le système d'entrée/sortie de base (BIOS) 44. CACHESYS 50 est interposé entre DOS 42 et BIOS 44 et peut être construit comme une routine de traitement d'interruption pour intercepter et exécuter les diverses procédures décrites en détails ci dessous. Il apparaît que DOS fonctionne comme BIOS 44 et par rapport à BIOS 44, le système CACHESYS apparaît comme DOS 42. C'est à dire que le fonctionnement de CACHESYS est transparent pour DOS 42 et BIGS 44. Sous la commande de BICS 44, les donnees du disque 18 seront transmises au travers de l'équipement 46 à la mémoire intermédiaire de données 21 en mérmcire principale et ensuite rendues disponibles pour le programme d'application au travers de DOS d'une manière classique. Lorsque CACHESYS 50 est opérationnel et en réponse à l'interception de l'appel d'interruption 13H, si le secteur désiré contenant les données nécessaires sont toujours dans l'antémémoire d'entraînement 20, les données seront alors placées dans la mémoire intermédiaire 21 et rendues disponibles pour le programme d'application. Si les données ne sont pas dans l'antémémoire 20, CACHESYS appellera alors BIOS 44 pour faire lire les données du disque 18 dans la mémoire intermédiaire 21, d'o elles seront rendues disponibles pour le programme d'application. De plus, dans le cas de la première utilisation de ces données, elles seront aussi placées dans l'antémémoire 20 pour être disponibles pour des opérations ultérieures. En outre, des secteurs consécutifs proches seront aussi pré-extraits ou lus dans l'antémémcire 20. En se reportant à nouveau à la figure 7, cn voit que lorsque les procédures 50 sont appelées comme par l'interception de l'interruption, l'étape 100 détermine ou calcule l'index dans la table de données mêlées 24 depuis la valeur RBA du secteur désiré. L'étape 102 place alors le contenu de la table de données mêlées à l'index dans une variable connue sous la désignation de PAGE PTR et l'étape 104 détermine si oui ou non PAGE PTR est égale à zéro pour signifier la fin d'une chaîne de conflits. Dans ce cas, une nouvelle page est alors lue à l'étape 206 et la nouvelle page est placée dans l'antémémoire par l'étape 108, après quoi l'étape 110 revient à DOS et à l'application. Si à la suite de l'étape 104, le pointeur de page n'est pas 'gal o zérc, les étapes 112 et 114 déterminent alors si le pointeur de page indique la page désirée. Cette opération est exécutée en comparant tout d'abord la sp cif-icatJon de commande du pointeur de page à la commande désirée contenant les données, à l'étape 112, et s'il s'agit de la commande correcte, l'étape 114 compare alors la valeur RBA du pointeur de page à la valeur RBA mise en condition OU avec le masque de RBA. Si les étapes 121 et 114 donnent des résultats négatifs, l'étape 116 met alors à jour le pointeur de page pour indiquer la page suivante dans la chaîne de conflits et l'exécution de ce procédé se poursuivra jusqu'à ce que la page désirée soit atteinte, après quoi les résultats positifs de l'étape 114 passent à 118. Les étapes 118-130 ont comme fonction générale de vérifier si oui ou non les secteurs requis se trouvent dans la page d'antémémoire. S'ils y sont, un résultat positif de l'étape 130 permetde passer à d'étape de retour 110 et les données de secteur sont transfer es 1, de sa page d'antémémoire 22 à la mémoire intermnédiaire 21. S'ils n'y sont pas, un résultat négatif de l'étape permet alors de revenir à l'étape 106 pour lire la page contenant les secteurs désirés. Afin de comprendre ce qui arrive pendant le déroulement des étapes 118-130, il sera maintenant souhaitable de considérer l'étape 106 et comment une nouvelle page est lue dans l'antémémoire. L'étape 106 est une étape générale et les étapes détaillées impliquées dans celle ci seront décrites en se reportant aux figures 8-12. Cependant, avant de décrire en détails ces diverses étapes, on expliquera certaines variables et structures de données utilisées ici. TRAITEMENI DES ERREURS La table 2 donne la signification des différentes variables utilisées pour l'exécuticn de ce procdea. Ces variables sont initialisées au début du procédé. La liste d'erreurs 31 (Figure 2) comprend comme le montre schématiquement la figure 13, une table de données mêlées d'erreurs 15C, la chaîne de conflits 152 et la liste libre 154 o il - a une entree par page.,es chaînes de conflits et les listes libres sont construites et traitées similairement aux procédures décrites en se reportant aux pages 3 et 4. Une table de données mêlées est utilisée puisque, bien que la liste d'erreurs soit relativement petite, elle est balayée chaque fois qu'il y a une entree/sortie physique et il est souhaitable de conserver un temps de recherche aussi court que possible. La table de données mêlées a une longueur de 64 repères, cette longueur étant choisie car il s'agit d'une puissance de deux et la valeur RBA de page peut être manipulée facilement avec des décalages et un masque plutôt qu'avec un partage. 2613!06 Ceci est justifié sur un nombre principal d'entrces par le fait auc des erreurs sur un disque sont généralement réparties plutôt uniformément et que la vitesse est le facteur le plus important étant donné que cette table sera accédée chaque fois que l'antémémoire sera affectée par des entrées/sorties physiques. La table de données mêlées 150 indique les chaînes de conflits des entrées de liste à erreur. Variable Signification RBA - Valeur RBA de la page à lire. POINTEUR MEMOIRE - Pointeur pour indiquer o INTERMEDIAIRE les données seront lues. DIMENSIONS PAGE - Nombre ae secteurs dans une page (2, 4 ou 8). MASQUE RBA - = NON (DIMENSIONS PAGE-1) (C'est à dire CFFFFFFFC). DECALAGE RBA - = log2 (DIMENSIONS PAGE) (C'est à dire ', 2 ou 3 pour DIMENSIONS PAGE 2, 4 ou 8). MASQUE CPTE SEC - DIMENSIONS PAGE-1. M]ASQUE ERREUR - = Nombre de bits = DIMENSIONS PAGE Justifié à droite dans un mot (C'est à dire 0003, 000F, OOFF pour DIMENSIONS PAGES 2, 4 ou 8). TABLE 2 VARIABLES La table 3 suivante définit la structure de chaque entrée dans la liste d'erreur. Q Champ Contenus Mu]tiplets 1 Drapeaux présents 2 ID Commande 3 Adresse bloc 4 4 Conflit suivant 2 Conflit précédent 2 Champ Signification i Ce champ contient un ensemble de drapeaux ou de bits qui indiquent les secteurs d'une page aui présentent des erreurs. Les "Mauvais" secteurs sont indiqués avec des bits 0 dans les positions du champ et les secteurs avec des bits valides sont indiqués par des bits _!. Ce chanm contient le numérc de l'unité de commande o la page est située. 3 Il s'agit de la valeur RBA du premier secteur de la page. 4 Ce champ indique la structure de liste d'erreurs suivante ou entrée dans la chaîne de conflits. Ce champ indique la structure de liste d'erreurs précédente dans la chaîne de conflits. TABLE 3 STRUCTURE LISTE ERREURS En se reportant maintenant à la figure 8, on voit que le début du procédé pour lire une nouvelle page commence à l'étape 132. Le procède général représente à la figure 8 détermine si l'antémémoire a prêcédemmer.t vu une erreur dans la page à lire. A l'étape 132, la valeur RBA du secteur désiré est mise en condition ET avec le masque de RBA et le résultat est utilisé à l'étape 134 pour calculer l'index dans la. table de données mêlées d'erreurs 150. L'index est calculé comme le reste de la réalisation d'une opération modulo 64 lors du décalage à droite du résultat de l'étape 132 de la valeur du décalage RBA. Puis, la variable PTR à l'étape 136 est établie au contenu de la table de données mêlées d'erreurs située dans l'index calculé à l'étape 134. Si PTR n'est pas établi à zéro, l'étape 138 passe alors à 140 et représente la condition dans laquelle il y a ur.ne entrée d'erreurs sur la chaîne de conflits. L'étape 140 détermine alors si l'indicateur ID de commande est le même que celui de l'unité contenant la page dans laquelle une erreur est apparue. Si ça n'est pas le cas, l'étape i44 indexe alors le pointeur et avance ensuite par l'entrde suivante dans la chaîne de conflits. Si le résultat de l'étape i40 est positif, l'étape 142 détermine alors si la valeur RBA désirée correspond à celle de l'entrée de liste d'erreurs. Si non, il y a passage sur l'entrée suivante de la liste de conflits. La sortie positive de l'étape 138 indique que la page associée n'a pas eu d'erreur avant et donc un essai sera effectuer pour lire la page entière en envoyant une seule commande à l'unité de commande de disques pour lire le nombre des secteurs dans une page. Une détermination positive par l'étape 142 indique que la page a eu une erreur avant et qu'elle sera lue secteur par secteur en envoyant plusieurs commandes à l'unité de commande de disques pour ne lire qu'un secteur à la fois. En se reportant maintenant à la figure 9, on voit due par un appel à BIOS, l'étape 160 permet d'obtenir DIMENSIONS PAGE, le nombre des secteurs par rage et la valeur RBA du secteur du début. Si aucune erreur n'est apparue pendant la lecture, l'étape 162 passe a/ors à 164 qui ensuite conditionne les bits présents, ce qui indique que tous les secteurs sont présents dans la page. C'est à dire qu'il n'y a pas de mauvais secteur ou d'erreur rencontrée pendant la lecture de ce secteur et que des données valides sont présentes dans chaque secteur. L'étape 166 conditionne la variable CURPTR pour indiquer l'adresse de la mémoire intermédiaire de données 21 dans laquelle un secteur sera lu. Les étapes 168-176 initialisent a!ors diverses variables comme indiqué. Puis, un appel est fait à BICS et à l'étape 178, un secteur est lu en asscciation avec la valeur RBA courante. Si aucune erreur n'apparaît, l'étape 18C permet alors de passer à l'étape 182. Si une erreur apparaît pendant cette lecture, le drapeau présent associé à cette erreur est conditionné à zéro à l'étape 184 par mise en condition OU Exclusif avec un masque de bit pour indiquer cue l'erreur ou que le secteur était mauvais. L'étape 186 conditionne alors un code d'erreur selon le code de retour que l'on doit à l'opération de lecture de l'étape 178. Les étapes 182-188 mettent à jour la valeur RBA courante, le pointeur courant, Le mascue de bit et le compte pour indiquer le secteuz suivant, puis le procédé se répète à l'étape 19G jusqu'à ce que le compte soit ramené à zéro. L'étape 192 décide alors si la page qui vient d'être lue est dans la table d'erreur 31. Si la page n'est pas dans la table d'erreurs, l'étape 192 permet alors de passer à l'étape 193 (Figure 10) qui obtient un élément de la liste sans erreur 154 en établissant un nouveau pointeur d'erreur. L'étape 194 détermine alors si la liste sans erreur était vide, c'est à dire si le nouveau pointeur d'erreur est égal - zérc. Si oui, le branchement est alors réalisé de l'étape 194 a l'étape 204, ce qui ramone les bits présents et le code d'erreur. Si la liste sans erreur n'est pas vide, les étapes 196-202 permettent alors d'insérer une nouvelle entrée d'erreur dans la table de données mêlées d'erreur. Cette opération est réalisée en établissant le pointeur sans erreur égal au pointeur sans erreur suivant à l'étape 186, ce qui établit le nouveau pointeur d'erreur présent égal au bit présent correspondant à l'étape 198, ce qui établit le nouveau pointeur d'erreur en position suivante selon la valeur obtenue depuis l'index de la table de données mêlées d'erreur et établit ensuite l'index de dcnnées mêlées d'erreur au nouveau pointeur d'erreur à l'étape 202. La procédure représentée à la figure _ verifie les erreurs précédentes dans les secteurs requis. Les étapes 206-218 sont identiques aux étapes 118-'20 mais varient selon les points d'entrée et de sortie. Ainsi, les étapes 118-130, er. raison de cette variation, vérifient si ies secteurs recuis sont dans la page d'antémémoire et produisent un résultat positif à l'étape i30 lorsque tous les secteurs sont dans la page. Le résultat négatif indique que tous les secteurs requis ne sont pas dans une page si bien que le système d'exploitation doit essayer d'assurer une certaine forme de récupération d'erreur. D'autre part, les étapes 206-218 sont utilisées pour vérifier si les secteurs requis ont été précédemment affectés d'erreurs. Le résultat positif de l'étape 218 indique que la page présente des erreurs mais que les secteurs requis n'en présentent pas tandis que le résultat négatif de l'étape 218 indique que les secteurs requis présentent des erreurs. A l'étape 206, la valeur RBA et le masque SECCOUNT sont mis en condition ET et le résultat est emmagasiné dans le compte de décalage variable. L'étape 208 êa'bt alors les bits présents égaux au pointeur présent décalé sur la droite de la valeur du compte de décalage. L'étape 210 établit le décalage de masque égal à DIMENSIONS PAGE moins le nombre des secteurs. L'étape 212 produit un masque de test en décalant sur la droite le masque d'erreur d'une valeur correspondant au décalage de masque. Puis, les bits présents sont mis en condition ET avec un masque de test à l'étape 214 et alors mis en condition OU Exclusif avec le masque de test à l'étape 216, après quoi l'étape 218 teste les résultats. Cette procédure est avantageuse car elle permet de déterminer rapidement s'il y a des erreurs dans les secteurs requis sans avoir recours à des boucles ou à de multiples chemins de décision. Or. comprendra aussi peut être mieux la présente invention en utilisant l'exemple suivant dans lequel orn suppose que DIMENSIONS PAGE a 8 secteurs, le secteur 5 de la page (le sixième secteur) présentait une erreur la dernière fois que la page a été lue et ainsi son bit présent correspondant est conditionné àa zerc. La table 4 donne un exemple de l'exécution de la procédure lorsqu'un secteur requis se trouve dans une page qui présente des erreurs mais que le secteur requis n'est pas l'une des erreurs. L'exemple lira deux secteurs en commencant au secteur 3 de la page. La table 5 montre un exemple du déroulement de cette procédure lorsqu'un secteur requis a présenté une erreur pendant une lecture précédente. L'exemple lira deux secteurs en commençant au secteur 4 de la page. 0 0 0 0 0 0 0 0 1 1 1 1 1 i masque erreur 0 0 0 0 0 00 0 0 0 0 0 0 1 1 masque test 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 drapeaux présents 000 0 00 0 0 00 0 1 1 0 l 1 étape 212 G C 0 00 0 0 0 00 0 10 étape 214 0 0 0 0 0 0 00 0 0 0 0 0 0 étape 216 TABLE 4 PAS D'EPREURS DANS SECTEURS REQUIE 0 0 00 0 0 0 0 1 1 11 1 nasque erreur 000 0 00 0 00 0 0 00 0 0 0 0 0 1 masque test 000 0 0 000 1 1 01101 1 1 1 1 drapeaux présents 0 00 0 00 0 0 00 0 0 01i 0 1 étape 212 0 00 0 00 0 0 00 00 0 0 0 0 0 0 étape 214 0 00 0 00 0 01 0 é00 0 0 0 0 0 1 0 tape 216 TABLE 5 ERREURS DANS SECTEURS REQUIS En se reportant maintenant à la figure 12, or voit que l'étape 220 résulte d'une détermination négative à l'étape 218 (Figure '') et provoque le conditionnement d'un bit présent selon le PTR présent. L'étape 222 établit le compte Ccal à D'MEg7SIOS PAGE, ''étape ^24 établit la valeur CURRBA égaie à RBA, l'étape 226 établit CURPTR égal au pointeur dans la mémoire intermédiaire de données et l'étape 228 établit]E masque de bit égal à un. L'étape 230 détermine alors si le secteur courant avait une erreur avant en mettant ern condition OU le bit présent et le masque de bit. Si le résultat n'est pas égal à zéro,!'étape 232 permet alors la lecture au moyen d'un appel B.CS, d'un secteur à la valeur CURRBA. L'étape 234 détermine alors si il y avait une erreur pendant cette lecture. Si oui, l'étape 236 conditionne les drapeaux présents pour indiquer qu'il y avait une erreur et aussi retenir le code d'erreur à l'étape 238. L'étape 240 et les suivantes, déplacent le secteur suivant en incrémentant la valeur CURRBA à l'étape 240. Le CURPTR est alors incrémenté du nombre de multiplets par secteur à l'étape 242 et le masque de bit est décalé sur la gauche de un à l'étape 244. Le compte est décrémenté à l'étape 246. Lorsqu'il atteint zéro, un branchement est établi à l'étape 204 (Figure 10). Autrement, l'étape 248 détermine alors que tous les secteurs n'ont pas été lus et assure donc un rebranchement à l'étape 230 pour permettre la répétition de l'exécution du procédé. On va maintenant résumer le déroulement des procédures. Les défauts du milieu sont gérés avec les drapeaux présents dans la structure de pages d'antémémoire. Lorsque l'on essaie de lire une page à partir d'un disque, si une erreur est renvoyée, l'antémémoire est restaurée de la manière suivante: 1. Elle "sauvegarde" le premier secteur de la page. 2. Elle commence la lecture des secteurs dans la mémoire intermédiaire de pages, un par un. Chacque fcis qu'elle lit un secteur avec succès, elle conditionne un drapeau présent correspcndant. 3. Si une erreur est rencontrée pendant -a lecture d'un secteur, le drapeau présent pour ce secteur est libéré (conditionné è 0) et des pointeurs appropri-s sont mis à jour comme si le secteur était lu. 4. Une fois que tous les secteurs de la page cnt ô= lus (un e la fois), Les bits présents sont balayés pour déterminer si un ou plusieurs des secteurs requis depuis l'antémémoire est ou sont manquants, c'est à dire si le bit présent correspondant est établi à 0. S'il en est ainsi, la dernière erreur reçue pendant la lecture depuis le dispositif, est renvoyée au demandeur. La procédure est légèrement différente si la page qui correspond à la demande est déjà dans l'antémémoire. Ce cas est traité de la manière suivante: 1. Les drapeaux présents sont balayés pour déterminer si un ou plusieurs des secteurs recuis est ou sont manquants. Si aucun n'est manquart, l'antémémoire fonctionne alors d'une manière normale et les données sont renvoyées au demandeur. 2. Si un ou plusieurs secteurs est ou sont manquants, seuls les secteurs qui ont besoin d'être lus depuis la disquette, sont lus. Si aucune erreur n'est rencontrée pendant la lecture, les secteurs appropriés sont marqués présents dans la page d'antémémoire et le traitement se poursuit. Ce schéma permet L i'antémémoire d'avoir des "trous" qui correspondent aux erreurs dans le milieu sans perte de données ou par augmentation significative de la complexité de l'anritémémcire. ô; permet aussi au système d'exploitation d'essayer de re-exécuter des opérations et de récupérer des données dans une situation d'erreur sans que l'antémémoire rende la tâche du systrme d'exploitation plus difficile. Lorsque l'antémémoire rencontre une erreur, elle détermine quel secteur ou quels secteurs de la page présente ou présentent des erreurs et laisse ou laissent des "trous" dans la page qui correspondent aux secteurs présentant des erreurs. Une valeur de 16 bits est aussi produite par le procédé de récupération d'erreur et cette valeur est considérée comme les drapeaux présents. S'il y a des bits zéro dans ces drapeaux, c'est que la page présente une ou plusieurs erreurs. Si la page présente des erreurs, l'antémémoire détermine si cette page a présenté des erreurs précédemment. Ceci est assuré par des données mêlées dans une liste d'erreurs avec la valeur RBA de la page pour vérifier si cette page se trouve sur la liste. Si cette page n'est pas sur la liste, elle est ajoutée à la liste. Si cette page a présenté des erreurs précédemment, l'une des opérations suivantes peut être exécutée: 1. Conserver les drapeaux présents précédents. 2. Remplacer les drapeaux présents par ceux produits à l'instant. Il s'agit de ce que l'antémémoire de logiciel a mis en oeuvre. 3. Mettre en condition ET les deux ensembles de drapeaux présents et retenir le résultat. Ceci implique aue si un secteur dans une page a présenté une erreur, il ne sera pas lu à moins de demande particulière. 4. Mettre en condition OU logique les deux ensembes de drapeaux présents et retenJ-r le résultat. Ceci implique que si un secteur dans une page est lu avec succès, l'antémémoire essaiera toujours de le lire. Si tous leE bits du drapeau présent sont toujours tous des zéros, l'entrée est retiree de (ou au moins n'est pas placée dans) dans la liste d'erreurs. Ceci est assuré pour plusieurs raisons. La première est qu'elle permet à la liste d'erreurs d'être beaucoup plus petite. Et étant donné que le système d'exploitation tend à retirer l'attribution de pistes entières lorsqu'il y a génération de défauts de milieux, le système d'exploitation n'essaiera pas en général de lire ces zones. La seconde raison est que si une page ne comporte pas de bon secteurs, le système d'exploitation est alors dans un état de récupération d'erreur générale et les performances ne sont pas critiques. Il y a aussi quelque chose que l'antémémoire pourrait faire avec la page de toute façon pour que l'antémémoire ne perde pas d'espace en gardant la trace de cette erreur. Lorsqu'une requête est présentée à l'antémémoire et résulte en un manque d'antémémoire, le système détermine tout d'abord si la page qu'il est sur le point de lire a déjà présenté des erreurs précédemment. Si la page a déjà présenté des erreurs, le système vérifie si l'un des secteurs requis a été indiqué comme erroné. Si aucun des secteurs reauis ne comporte d'erreurs, les secteurs de la page sont alors lus un à la fois en sautant le ou les secteurs aui était erroné ou étaient erronés. Ainsi, l'erreur ou les erreurs a ou cnt été évité ou évitées. De nouveaux essais d'erreurs par l'initiateur d'une requête sont permis étant donné que si un secteur requis a présentC des erreurs, il sera lu par l'antémémoire. Tout ce que cette action pour éviter des erreurs assure, c'est qu'elle permet à l'antémémoire d'éviter de pré-extralre un ou des secteurs qui a ou ont présenté des erreurs sauf si ce ou ces secteurs sont explicitement requis. Ii est évident pour l'homme de l'art que d'autres changements et modifications peuvent être apportés à l'invention sans sortir de l'esprit et du cadre de celle ci telle que définie dans les revendications ci jointes. REVENDICATIONS Méthode d'exploitation d'un ordinateur personnel comprenant une mémoire principale présentant une antémémoire DASD pour emmagasiner des pages de secteurs de données lues consécutivement, secteur par secteur, à partir d'un disque présentant des défauts de milieu d'emmagasinage et dans lequel un système d'exploitation gère le transfert des données vers et depuis un programme d'application en mettant en mémoire intermédiaire un secteur lorsqu'il est transféré, caractérisée en ce qu'elle comprend les étapes suivantes: la génération d'un signal de requête pour lire ur secteur prédéterminé depuis ledit discue, en réponse audit signal de requête, la lecture d'une page depuis ledit disque, laquelle page contient ledit secteur prédéterminé et des secteurs pré-extraits supplémentaires, ledit secteur prédéterminé et lesdits secteurs pré- extraits étant situés dans des emplacements consécutifs sur ledit disque, la génération sélective de signaux d'erreurs chaque fois que des essais sont faits pour lire des données depuis des secteurs présentant des défauts de milieu, et en réponse auxdits signaux d'erreur, l'emmagasinage dans ladite antémémoire, des indications des secteurs qui correspondent à ces signaux d'erreur. 2. La méthode selon la revendicaticn 1 caractérisée en ce que: ladite étape de lecture comprend l'emmagasinage de données lues depuis un secteur pour lequel il n'y a pas de signal d'erreur dans ladite antémémoire et l'établissement d'une indication correspondant à ce secteur pour signifier que des données valides de ce secteur sont présentes dans ladite antémémoire. 3. La méthode selon la revendication 2 caractérisée en ce qu'elle comprend: l'attribution à chaaue page dans ladite antémémoire d'un nombre prndéterminé d'emplacements de mémcire consécuti ts pour emmagasiner des secteurs de données depuis ledit disque, et ern ce que ladite étape de lecture comprend la lecture desdites données depuis lesdits secteurs dans les emplacements de mémoire attribués auxdits secteurs, après quoi en réponse auxdits signaux d'erreur, ladite étape de lecture est sautée si bien que lesdites indications correspondant auxdits secteurs pour lesquels des signaux d'erreur ont été générés, signifient l'absence de données valides dans lesdits emplacements de mémoire attribués à ces secteurs. 4. La méthode selon la revendication 2 caractérisée en ce qu'elle comprend: la provision dans ladite antémémoire pour chaque page contenue dans celle ci, d'une pluralité de bits présents correspondant en nombre au nombre 26-135 3 6 3_ des secteurs dans une page, chaque kit correspondant à un secteur prédéterminé différent desdits secteurs dans chaque page, et le conditionnement de chaque bit pour signifier alternativement la présence et l'absence de données valides dans ledit secteur correspondant de données emmagasiné dans ladite antémémoire. 5. La méthode selon la revendication 4 caractérisée en ce qu'elle comprend: la provision d'un second signal de requête pour un secteur de données emmagasiné dans ladite antérmémoire, et en réponse audit second signal de requête, l'accès à l'un desdits bits présents correspondent au secteur requis pour s'assurer de la validité des données au'il contient. 6. La méthode selon la revendication 1 caractérisée en ce qu'elle comprend: la création et l'emmagasinage dans ladIte antémémoire d'un historique de ces pages qui, une par une, ont été emmagasinées dans ladite antémémoire et qui contenaient au moins un secteur dont la lecture a provoqué la génération d'un signal d'erreur, - et, en réponse audit signal de requête, l'accès audit historique pour y entrer la page correspondant au secteur requis. 7. La méthode selon la revendication 6 caractérisée en ce qu'elle comprend: la provision dans ledit historique d'indications du statut de tous les secteurs de chaque page pàur lesquels il v a une entree, ce statut comprenant une indication de chaque secteur en rapport avec sa lecture pour lequel un signal d'erreur a éte généré. La méthode selon la revendication 7 caractérise en ce qu'elle comprend: la mise à jour desdites indications d'historique chaque fois qu'une page est lue dans ladite antémémoire, page pour laquelle il y a une entrée existante dans ledit historique.