DE3810233A1 - Verfahren zur behandlung von sektorenfehlern in plattenspeichern - Google Patents

Verfahren zur behandlung von sektorenfehlern in plattenspeichern

Info

Publication number
DE3810233A1
DE3810233A1 DE3810233A DE3810233A DE3810233A1 DE 3810233 A1 DE3810233 A1 DE 3810233A1 DE 3810233 A DE3810233 A DE 3810233A DE 3810233 A DE3810233 A DE 3810233A DE 3810233 A1 DE3810233 A1 DE 3810233A1
Authority
DE
Germany
Prior art keywords
page
cache
sectors
error
read
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE3810233A
Other languages
English (en)
Other versions
DE3810233C2 (de
Inventor
Jerry Duane Dixon
Sotomayor, Jr
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE3810233A1 publication Critical patent/DE3810233A1/de
Application granted granted Critical
Publication of DE3810233C2 publication Critical patent/DE3810233C2/de
Granted legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/18Error detection or correction; Testing, e.g. of drop-outs
    • G11B20/1816Testing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/18Error detection or correction; Testing, e.g. of drop-outs

Description

Diese Erfindung bezieht sich auf Verfahren zum Betrieb eines Datenverarbeitungssystems mit einem DASD-Cache (DASD = Direct Access Storage Device, Speichervorrichtung mit direktem Zugriff), um Plattensektorfehler, die von Defekten auf dem Speichermedium herrühren, zu behandeln. Im speziellen bezieht sich die Erfindung auf ein Verfahren zum Betrieb eines Hochleistungs-Personalcomputers, um das Problem der Behandlung von schlechten Sektoren in einem DASD-Cache mit geringen Kosten zu lösen.
Es sind Festplattenlaufwerke bekannt, um Information zur Verarbeitung in einer Verarbeitungseinheit, die an einen Hauptspeicher angeschlossen ist, zu speichern. Die Information ist auf Platten gemäß einem vorherbestimmten Muster von Zylindern und Sektoren gespeichert, wobei jeder Sektor eine vorherbestimmte Anzahl von Bytes enthält. Ein Laufwerk schließt mehrere Köpfe ein, wobei ein Kopf für jede Seite einer Platte, auf der Daten gespeichert sind, zur Verfügung steht. Die Daten werden von der Platte jeweils sektorenweise gelesen. Um auf einen gewünschten Sektor zuzugreifen, muß der Kopf zunächst zu dem Zylinder bewegt werden, der den gewünschten Sektor enthält, die Platte muß an dem Kopf vorbeibewegt werden, bis der gewünschte Sektor erreicht ist und dann wird der Sektor gelesen und sein Inhalt in einen Puffer gestellt. Betrachtet man den gesamten Zeitaufwand, der erforderlich ist, um auf Daten auf einer Platte zuzugreifen, dann entsteht die hauptsächliche Verzögerung während der physischen Bewegung des Kopfes. Wenn also die Verarbeitung eine hohe E/A-Aktivität (E/A = Eingabe/ Ausgabe) einschließt, dann ist es sehr wünschenswert, das Ausmaß der Kopfbewegungen so weit wie möglich zu reduzieren, um eine verbesserte Leistung zu erhalten.
Die Benutzung von DASD-Caches ist eine bekannte Technik, mit der die Systemleistung durch Reduzierung von Kopfbewegungen und physischer E/A-Aktivität verbessert wird. Bei einer solchen Technik wird ein Teil des Hauptspeichers als Cache (Pufferspeicher) für die Speicherung von Seiten aus Datensektoren benutzt. Wenn zu Anfang auf einen gewünschten Sektor zugegriffen wird, dann wird nicht nur dieser Sektor, sondern zusätzlich einer oder mehrere in der Nähe liegende Sektoren in den Cache gelesen und nachfolgende Zugriffe auf solche Sektoren werden mit der Geschwindigkeit des Hauptspeichers und nicht mit den Geschwindigkeiten des Plattenlaufwerks durchgeführt. Die Leistungsverbesserung kommt dadurch zustande, daß die nächsten zu bearbeitenden Daten wahrscheinlich in der Nähe derjenigen Daten gespeichert sind, die gerade vorher verarbeitet wurden.
Ein in der Fachwelt bekanntes Problem entsteht durch Defekte, die auf den Speicherplattenmedien vorkommen. So werden Sektoren, die solche Defekte enthalten, als schlecht betrachtet und können nicht benutzt werden. Solche schlechten Sektoren werden gewöhnlicherweise beim Formatieren identifiziert und ihre spätere Benutzung einfach dadurch vermieden, daß ein schlechter Sektor übersprungen wird. In Datenverarbeitungssystemen, die einen Cache benutzen, wird das Problem komplizierter, weil, wenn ein guter Sektor anfangs in den Cache eingelesen wird, in der Nähe liegende Sektoren derselben Seite Fehler enthalten oder schlecht sein können. Im uns bekannten Stand der Technik wird dieses Problem auf zwei Arten gelöst. Bei der ersten wird jede Seite, die einen schlechten Sektor enthält, selbst als schlecht betrachtet und ein Fehlersignal oder eine Fehlermeldung an den Benutzer geschickt. Bei der zweiten kann die Plattensteuereinheit so konstruiert werden, daß nur gute Sektoren in den Cache gesandt werden. Eine solche Lösung ist eine Hardware-Lösung, sie ist relativ kompliziert und teuer in ihrer Durchführung. Die gegenwärtige Erfindung ist auf ein Verfahren gerichtet, das ohne weiteres durch Software oder Programmierung implementiert werden kann, um eine effektive Niedrigkostenlösung bereitzustellen, die insbesondere in relativ billigen Hochleistungs-Personalcomputern nützlich ist.
Es ist Aufgabe der Erfindung, ein neuartiges Verfahren zur Behandlung von Plattensektorfehlern in einem System mit DASD-Cache bereitzustellen. Diese Aufgabe wird durch die im Anspruch 1 angegebene Erfindung gelöst; Ausgestaltungen der Erfindung sind in den Unteransprüchen angegeben. Erfindungsgemäß wird zu jeder, mehrere Sektoren enthaltenden und in den Hauptspeicher eingelesenen Seite, eine separate Tabelle gebildet, in der Information gespeichert ist, ob ein jeder Sektor gut oder schlecht ist. Nachfolgende Zugriffe auf irgendeinen Sektor werden unter Bezugnahme auf oder Nachschlagen in der Information einer solchen Tabelle und durch Überspringen jedes als schlecht oder fehlerhaft vermerkten Sektors vollzogen.
Es ist ein Vorteil der Erfindung, daß das Problem der Behandlung von Plattensektorfehlern in Personalcomputern, die ein DASD-Cache-System haben, ohne großen Aufwand gelöst wird. Es ist ein weiterer Vorteil, daß die Erfindung ohne weiteres durch Programmierung bereits bekannter Hardware implementiert werden kann. Es ist ein weiterer Vorteil, daß die Erfindung ohne weiteres mit einem kommerziell verfügbaren Plattenbetriebssystem (DOS, Disk Operating System) benutzt werden kann, um eine Cache-Funktion bereitzustellen, die für den Benutzer transparent ist und wirsam das Problem der Behandlung von Plattenfehlern löst.
In dem folgenden Ausführungsbeispiel wird auf die Fig. 1 bis 13 Bezug genommen. Hierin bedeuten:
Fig. 1 ein schematisches Diagramm eines Personalcomputersystems, in dem das Verfahren gemäß der Erfindung durchgeführt werden kann.
Fig. 2 ein schematisches Diagramm der in der Erfindung benutzten Cache-Datenstruktur.
Fig. 3 ein schematisches Diagramm, das illustriert wie auf Seiten über eine Hash-Tabelle zugegriffen wird.
Fig. 4 ein schematisches Diagramm, das die Liste der freien Seiten (free page list) veranschaulicht.
Fig. 5 ein schematisches Diagramm, das die LRU-Listenkette (list chain) veranschaulicht.
Fig. 6 ein schematisches Diagramm, das veranschaulicht, wie verschiedene Programme und Hardware allgemein mit der Erfindung in Zusammenhang stehen.
Fig. 7-12 Flußdiagramme, die das Verfahren gemäß der Erfindung veranschaulichen.
Fig. 13 ein schematisches Diagramm, das die Datenstruktur der Fehler-Liste veranschaulicht.
Die folgende Beschreibung ist in zwei Teile gegliedert. Der erste beschreibt die allgemeine Wirkungsweise eines DASD-Caches und daher die Umgebung, in welcher das Verfahren der Erfindung abläuft. Der zweite Teil liefert eine detaillierte Beschreibung, wie Speichermedienfehler behandelt werden. Wohlgemerkt, die Erfindung besteht in einem Verfahren und nicht in irgendeiner speziellen Software-Implementation.
Cache
Das Verfahren wird vorzugsweise in einem konventionellen Datenverarbeitungssystem 10 wie z. B. einem IBM Personalcomputer AT ausgeführt. Ein solches System 10 umfaßt im allgemeinen einen Prozessor 12, der an einen Hauptspeicher 14 und E/A-Geräte 15 angeschlossen ist. Ein solches System kann einen oder mehrere Plattensteuereinheiten 16 enthalten, die jeweils an ein zugehöriges Plattenlaufwerk 18 angeschlossen sind. Im Hauptspeicher 14 sind in Form von Datenstrukturen ein Cache 20 und ein Datenpuffer 21 ausgebildet, wobei der letztere von DOS benutzt wird, um jeden von den Plattenlaufwerken 18 übertragenen Datensektor zu speichern.
Unter Bezugnahme auf Fig. 2 umfaßt der Cache 20 eine Seitenstruktur 23, die eine Vielzahl von Cache-Seiten 22-1 bis 22-n umfaßt. Der Cache 20 enthält weiterhin eine Hash-Tabelle 24, einen Freie-Liste-Zeiger (free list pointer) 26, einen LRU-Zeiger 28 (LRU = least recently used, am längsten nicht mehr benutzt), einen MRU-Zeiger 30 (MRU = most recently used, vor kürzester Zeit benutzt) und eine Fehler-Liste 31, deren Details nun beschrieben werden. Diese sechs Teile sind unabhängig von der Größe des Cache-Speichers immer vorhanden; sie sind:
  • Cache-Seite 22 - Dies definiert die Struktur einer Cache-Seite im Speicher. Sie enthält Information die angibt, welche physikalische Seite dargestellt ist, einen Teil der LRU-Liste, einen Teil der Hash- Tabellen-Konflikt-Liste und die aktuellen Daten der nach Sektoren gruppierten Cache-Seiten.
  • LRU-Zeiger 28 - Dieser zeigt zu der Cache-Seite, die im Cache am längsten nicht mehr benutzt ist. D. h., auf alle anderen Seiten im Cache ist vor kürzerer Zeit zugegriffen worden als auf die Seite, auf die der LRU-Zeiger zeigt.
  • MRU-Zeiger 30 - Dieser zeigt auf die Cache-Seite, die im Cache vor kürzester Zeit benutzt wurde. D. h., auf keine Seite im Cache ist vor kürzerer Zeit zugegriffen worden als auf die Seite, auf die der MRU-Zeiger zeigt.
  • Cache-Hash-Tabelle 24 - Diese Tabelle ist ein Vektor von Zeigern auf die Cache-Seiten. Der Vektor ist 311 Einträge lang. Wenn ein Sektor angefordert wird, fängt der Cache diese Anforderung ab und sucht mittels eines Hash-Algorithmus in dieser Tabelle, um herauszufinden, ob der Sektor im Cache ist. Durch Benutzung einer Hash-Tabelle wird selbst dann, wenn sich eine große Anzahl von Seiten im Cache befindet, sehr wenig Zeit benötigt, um festzustellen, ob ein Sektor im Cache ist.
  • Freie-Liste-Zeiger 26 - Dieser zeigt auf eine Cache-Seite, die gegenwärtig nicht im Cache benutzt wird. Anfänglich stehen alle Seiten im Cache auf dieser Liste. Wenn eine Seite nicht im Cache gefunden wird, dann wird eine Seite aus der Freien-Liste (free list) entnommen und in den Cache gestellt.
  • Fehler-Liste 31 - Diese Datenstruktur, die weiter unten im Detail beschrieben wird, wird zur Aufzeichnung der Geschichte der Seitenfehler benutzt.
Tabelle 1 listet die Felder einer Cache-Seite 22 auf. Die Felder in der Struktur sind unten definiert. Es ist zu bemerken, daß alle Zeiger aus zwei Bytes bestehen. Dies gilt für eine segmentierte Architektur wie z. B. die Intel-Familie 8086/80186/80286/80386. Der in dem Zeiger gespeicherte Wert ist das Segment (8086/80186) oder der Selektor (80286/80386). Ein angenommener Offset von 0 gehört zu jeder Datenstruktur.
Die Bedeutungen der verschiedenen Felder sind:
Feld 1Dieses Feld enthält Bits oder Marken (flags), die anzeigen, welche Sektoren in einer Seite vorhanden sind und gültige Daten enthalten, und welche Sektoren wegen Fehler fehlen. Feld 2Dieses Feld bestimmt, auf welchem Laufwerk diese spezielle Seite enthalten ist. Feld 3Dieses Feld enthält die relative Blockadresse (RBA) des Startsektors der Seite auf dem Laufwerk. Feld 4Dieses Feld zeigt auf die nächste Seite, die vor längerer Zeit benutzt wurde als diese Seite. Wenn das die am längsten nicht mehr benutzte Seite ist, dann wird dieses Feld den Wert 0 enthalten. Dieses Feld wird auch dazu benutzt, Seiten auf der Freien-Liste zu verknüpfen. Feld 5Dieses Feld zeigt auf die nächste Seite, die vor kürzerer Zeit benutzt wurde als diese Seite. Wenn das die vor kürzester Zeit benutzte Seite ist, dann wird dieses Feld den Wert 0 enthalten. Feld 6Dieses Feld zeigt auf die nächste Seite, die in der Konflikt-Liste der Hash-Tabelle ist. Feld 7Dieses Feld zeigt auf die vorherige Seite, die in der Konflikt-Liste der Hash-Tabelle ist. Feld 8Dieses Feld enthält die Daten für die Seite in der Form, wie sie aus dem DASD kommt. Wenn auf diese Seite mehrfach zugegriffen wird, dann werden die angeforderten Teile der Seiten aus diesem Puffer kopiert und nicht von der Platte gelesen.
Tabelle 1
Cache-Seite 22
Jede RBA ist durch die folgende Formel bestimmt:
RBA = ((CN × NH) + HN) × SPT + SN (Formel 1)
wobei
CN= Zylindernummer NH= Anzahl von Köpfen pro Laufwerk HN= Kopfnummer SPT= Anzahl von Sektoren pro Track SN= Sektorennummer
Der Hash-Index wird durch die folgende Formel bestimmt:
Hash-Index = RBA shr log (SEITENGRÖSSE) mod 311 (Formel 2)
wobei
shr= RBA nach rechts um eine Anzahl Bits verschoben, die dem Logarithmus zur Basis 2 der SEITENGRÖSSE entspricht SEITENGRÖSSE= Anzahl der Sektoren pro Seite mod= Modulofunktion, die den Rest zurückgibt
Die Zahl 311 wird für die Länge der Hash-Tabelle bevorzugt, weil sie eine relativ große Primzahl ist. Da 311 eine große Primzahl ist, ist es unwahrscheinlich, daß eine Anwendung sie oder eines ihrer Vielfachen während des Zugriffes auf den Cache sehr häufig benutzt. Dies hält die Konflikt-Ketten kurz, indem die Wahrscheinlichkeit herabgesetzt wird, daß eine Anwendung in Synchronisation mit dem Hash-Algorithmus gerät; daher kann das Hashing-Verfahren schnell durchgeführt werden.
Im folgenden wird auf Fig. 3 Bezug genommen. Die verschiedenen Indexpositionen 0 bis 310 von Tabelle 24 enthalten entweder eine 0 oder einen Zeiger zu der ersten und vielleicht einzigen Cache-Seite, die mit einer solchen Position verkettet ist. Wenn der ausgewählte Hash- Tabelleneintrag den Wert 0 enthält, dann gibt es keine Seiten, auf die der Eintrag zeigt und die Seite ist nicht im Cache. Dies wird als der "Seitenfehltreffer" betrachtet. Indexposition 1 z. B. enthält eine 0 und zeigt damit an, daß es keine damit verknüpften Seiten im Cache gibt. Wenn andererseits der Hash-Tabelleneintrag nicht null ist, wird der Wert als ein Zeiger auf eine Cache-Seite 22 benutzt. Das Laufwerk und die RBA in einer Cache-Seite werden mit dem angeforderten Laufwerk und RBA verglichen. Wenn diese sich als dieselben herausstellen, dann wird dies als "Seitentreffer" betrachtet und die angeforderte Seite ist im Cache. Wenn sie nicht gleich sind, wird der Wert "Konflikt-Liste, nächste Seite" in einer solchen Seite benutzt, um auf die nächste Cache-Seite zu zeigen. Wenn ein Wert 0 aus diesem Feld ausgelesen wird, dann ist das Ende der Konflikt-Kette erreicht und die angeforderte Seite ist nicht im Cache. Dies ist wiederum ein "Seiten­ fehltreffer". Wie veranschaulicht, werden die Seiten A-F von Tabelle 24 verlangt und bilden drei verschiedene Ketten unterschiedlicher Länge.
Wenn eine Seite 22 im Cache gefunden wird, wird die Konflikt-Kette für diesen Hash-Tabelleneintrag neu geordnet, so daß die gefundene Seite sich am Kopf der Konflikt-Kette befindet. Die Idee hierbei ist, daß, bei einer MRU-Ordnung der Konflikt-Kette, die Abwärtsdurchsuchungen der Konflikt-Kette wegen der Wahrscheinlichkeit, daß auf eine kürzlich angesprochene Seite wieder zugegriffen wird, kurz sein werden. Dies gilt insbesondere, wenn eine Cache-Seite mehr als einen physikalischen Sektor darstellt.
Wird eine Seite nicht im Cache gefunden, wird eine neue Seite zugeordnet (die genauen Schritte, die dabei durchgeführt werden, folgen weiter unten). Eine Seite wird von einer Platte eingelesen und in einen Seitenpuffer gestellt (Feld 8). Die neue Cache-Seitenstruktur wird dann bezüglich der Hash-Tabelle mit einem ähnlichen Algorithmus konstruiert wie der, mit dem bestimmt wurde, ob die Seite nicht im Cache ist. Die Konflikt-Kette für den Hash-Tabelleneintrag wird nicht aufgelöst. Statt dessen wird die neue Seite am Kopf der Konflikt-Kette eingefügt, so daß die Konflikt-Kette in der MRU-Ordnung bleibt. Auch werden die Zeiger der LRU-Kette neu geordnet, um diese Seite als die vor kürzester Zeit angesprochene anzuzeigen.
Eine neue Seite 22 wird nur dann in den Cache 22 gestellt, wenn ein angeforderter Sektor nicht im Cache gefunden wird. Die Methode wurde im vorhergehenden Abschnitt beschrieben. Dieser Abschnitt beschreibt nun, wie eine Seite tatsächlich zugeordnet wird, so daß sie in die Cache-Struktur gestellt werden kann. Es gibt zwei Wege, mit denen eine Seite zugeordnet werden kann. Wenn es eine oder mehrere Seiten in der Freien-Liste (cache free list, Liste der freien Cache-Seiten) gibt, dann wird eine Seite zugeordnet. Wenn es keine Seiten in der Freien-Liste gibt, dann wird die Seite, auf die der LRU-Zeiger zeigt, aus der Cache-Struktur entfernt und der neuen Seite neu zugeordnet. Fig. 4 zeigt die Struktur der Liste der freien Cache-Seiten. Freie-Liste-Zeiger (free list pointer) 26 zeigt auf die Cache-Seite 22 am Kopf der Liste und eines der Zeigerfelder zeigt auf die nächste freie Seite. Anfänglich sind alle Cache-Seiten auf der Freien-Liste und es wird auf keine Seiten durch die Hash- Tabellen oder die LRU-Liste gezeigt. Wenn dann Anforderungen an die Platte erfolgen und Cache-Seitenfehltreffer auftreten, dann werden mehr und mehr Seiten 22 aus der Freien-Liste entfernt, bis es schließlich keine Seiten in der Freien-Liste gibt. Wenn dies eintrifft, dann werden die Seiten wieder neu benutzt, ausgehend von der LRU-Liste. Fig. 5 zeigt die Struktur der LRU-Liste mit den LRU- und MRU-Zeigern 28 und 30, die auf die Enden der Liste zeigen und die verschiedenen Seiten 22, die durch die Zeiger LRU-Nächste-Seite und LRU-Vorherige-Seite verkettet sind.
Da der Cache stets versucht, aus der Freien-Liste zuzuordnen, bevor Seiten aus der LRU-Liste entfernt werden, ist es möglich, dynamisch mehr Seiten zum Cache hinzuzufügen sobald der Cache betriebsbereit ist. Dies ist insbesondere wünschenswert, wenn der Cache nur durch Software implementiert wird. Der Grund dafür ist, daß ein Betriebssystem feststellen kann, daß der Hauptspeicher nicht zur Gänze benutzt wird und daher entscheidet, daß der unbenutzte Teil dieses Speichers nützlich dazu verwendet werden kann, einem Teil oder den ganzen unbenutzten Speicher dem Cache zuzuordnen.
Der gegenteilige Vorgang (Entfernung von Seiten aus dem Cache) ist auch möglich, indem eine oder mehrere Seiten vom Ende der LRU-Liste entfernt werden. Dies ist vielleicht nicht wünschenswert, da es nicht garantiert werden kann, daß die Seiten im Speicher physikalisch benachbart sind. Bei einem hinreichend ausgeklügelten Betriebssystem, stellt die Fragmentierung des Speichers möglicherweise kein Problem dar.
Immer wenn auf eine Seite im Cache zugegriffen wird (entweder durch einen Treffer oder durch eine neu zugeordnete Seite), dann wird die Seite aus ihrer gegenwärtigen Position in der LRU-Liste entfernt und an den Kopf der Liste bewegt, auf den der MRU-Zeiger zeigt. Da die Cache-Seitenstruktur auf Zeigern basiert, wird die Bewegung von Seiten in der LRU-Liste einfach durch die Bewegung von Zeigerwerten in bekannter Weise vollzogen.
Die Fixierung einer oder mehrerer Seiten im Cache (Cache-Pinning) kann mit diesem Aufbau leicht durchgeführt werden. Alles was getan werden muß, um eine Seite im Cache zu fixieren, besteht darin, die Seite aus der LRU-Liste zu entfernen. Da die Seiten aus der LRU-Liste neu zugeordnet werden, kann eine Seite, die nicht in der LRU-Liste ist, niemals neu zugeordnet werden. Das Fixieren von Seiten im Cache ist wünschenswert, wenn auf bestimmte Seiten nicht oft genug zugegriffen wird, um sie im Cache zu halten. Dies ermöglicht es, Datei-Systemstrukturen wie Inhaltsverzeichnisse, Zuordnungsbitmuster (allocation bit maps), Systemdateien usw. zwecks einer guten Leistung im Cache zu fixieren, ohne daß sie durch das Lesen einer großen Datei verdrängt werden. Um das Fixieren im Cache vernünftig durchzuführen, ist es wünschenswert, eine Kooperation zwischen dem Cache und dem Betriebssystem oder wenigstens ein Hilfsprogramm des Betriebssystems vorzusehen. Das Hilfsprogramm informiert in diesem Fall den Cache, daß die angeforderten Seiten nicht in die LRU zu stellen sind, bis eine gegenteilige Instruktion ergeht. Das Hilfsprogramm liest dann den oder die Sektoren, die Datei oder die Dateien usw. und teilt dem Cache mit, daß alle weiteren Cache-Anforderungen die Seiten in die LRU stellen sollen.
Der Cache muß dann berücksichtigen, daß einige Seiten vielleicht nicht in der LRU-Liste sind und nicht in die LRU-Liste eingefügt werden sollen, wenn darauf zugegriffen wird. Dies kann durchgeführt werden, wenn ein Cache-Treffer vorliegt, indem geprüft wird, ob die Felder "LRU Nächste Seite" und "LRU Vorherige Seite" Null sind. Wenn sie es sind, darf die Seite nicht in die LRU-Liste gestellt werden. Auf diese Weise müssen keine zusätzlichen Bits oder Markierungen als Teil der Cache-Seitenstruktur vorgesehen werden, um das Fixieren zu unterstützen.
Fig. 6 veranschaulicht die allgemeine Art, in der das Verfahren gemäß der Erfindung in einem Satz von Prozeduren, die CACHESYS genannt werden, verkörpert ist, die mit konventionellen Programmen und Hardware wechselwirken, um das Verfahren der Erfindung auszuführen. Wenn ein Anwendungsprogramm 40 Daten von einer Platte 18 lesen will, wird DOS 42 aufgerufen und ruft seinerseits mittels eines konventionellen Interrupts 13 H das elementare Eingabe/ Ausgabe-System (BIOS, Basic Input/Output System) 44 auf. CACHESYS 50 ist zwischen DOS 42 und BIOS 44 geschaltet und kann als Interrupt-Behandlungsroutine konstruiert sein, um die verschiedenen Prozeduren, die weiter unten im Detail beschrieben werden, abzufangen und auszuführen. Gegenüber DOS 42 erscheint das CACHESYS-System 50 wie BIOS 44 und gegenüber BIOS 44 erscheint das CACHESYS-System wie DOS 42. Das heißt, der Betrieb des CACHESYS-System 50 ist "transparent" für DOS 42 und BIOS 44. Unter Steuerung von BIOS 44 werden Daten von der Platte 18 über die Hardware 46 in den Datenpuffer 21 im Hauptspeicher übertragen und dann dem Anwendungsprogramm durch DOS in der üblichen Weise verfügbar gemacht. Wenn CACHESYS 50 in Betrieb ist und den Aufruf von Interrupt 13 H abgefangen hat, werden die Daten, wenn der gewünschte Sektor, der die benötigten Daten enthält, bereits im Laufwerks-Cache 20 ist, in den Puffer 21 gestellt und dem Anwendungsprogramm zur Verfügung gestellt. Wenn die Daten sich nicht im CACHE 20 befinden, dann ruft CACHESYS BIOS 44 auf, um die Daten von der Platte 18 in den Puffer 21 legen zu lassen, von wo sie dem Anwendungsprogramm verfügbar gemacht werden. Außerdem werden solche Daten bei ihrer ersten Benutzung auch in den CACHE 20 gestellt, um für nachfolgende Operationen zur Verfügung zu stehen. Zusätzlich werden auch benachbarte aufeinanderfolgende Sektoren im Vorgriff ausgelesen und in den CACHE 20 gestellt.
Im folgenden wird auf Fig. 7 Bezug genommen. Wenn die Prozeduren 50 beim Abfangen des Interrupts aufgerufen werden, dann bestimmt oder berechnet der Schritt 100 aus der RBA des gewünschten Sektors den Index in die Hash-Tabelle 24. Schritt 102 stellt dann den Inhalt der Hash-Tabelle bei diesem Index in eine Variable, die als SEITEN-ZEIGER bekannt ist, und Schritt 104 bestimmt, ob der SEITEN-ZEIGER gleich Null ist, was das Ende einer Konflikt-Kette bedeutet. Wenn die Variable SEITEN-ZEIGER gleich Null ist, dann wird in Schritt 106 eine neue Seite gelesen und die neue Seite wird in Schritt 108 in den Cache gestellt, wonach Schritt 110 zu DOS und der Anwendung zurückkehrt. Wenn sich als Resultat des Schrittes 104 der SEITEN-ZEIGER ungleich Null ergibt, dann bestimmen die Schritte 112 und 114, ob der SEITEN-ZEIGER auf die gewünschte Seite zeigt. Dies wird in Schritt 112 getan, indem zunächst die Laufwerkskennzeichnung des SEITEN-ZEIGERS mit dem gewünschten Laufwerk, das die Daten enthält, verglichen wird; wenn es das richtige Laufwerk ist, dann vergleicht Schritt 114 die RBA des SEITEN-ZEIGERs mit der RBA, die über ein logisches UND (AND) mit der RBA-Maske verknüpft ist. Wenn die Schritte 112 und 114 negative Resultate produzieren, dann setzt Schritt 116 den SEITEN-ZEIGER auf die nächste Seite in der Konflikt-Kette und dieser Prozeß geht voran, bis die gewünschte Seite erreicht ist, woraufhin das positive Resultat in Schritt 114 den Übergang nach 118 bewirkt.
Es ist der allgemeine Zweck der Schritte 118 bis 130 zu prüfen, ob sich die angeforderten Sektoren in der Cache- Seite befinden oder nicht. Wenn ja, dann wird ein positives Ergebnis von Schritt 130 in den Rückkehr-Schritt 110 gegeben und die Sektorendaten werden von ihrer Cache- Seite 22 in den Puffer 21 übertragen. Wenn nein, dann wird das negative Ergebnis von Schritt 130 an Schritt 106 zurückgegeben, damit die Seite eingelesen wird, die die gewünschten Sektoren enthält. Um zu verstehen, was während der Schritte 118 bis 130 geschieht, ist es nun angebracht, den Schritt 106 zu betrachten und wie eine neue Seite in den Cache eingelesen wird.
Schritt 106 ist ein allgemeiner Schritt und die detaillierten Schritte, die darin enthalten sind, sind in den Fig. 8 bis 12 gezeigt. Bevor jedoch im Detail diese verschiedenen Schritte beschrieben werden, wird eine Erklärung einiger darin benutzter Variablen und Datenstrukturen gegeben werden.
Fehlerbehandlung
Tabelle 2 listet die Bedeutung verschiedener in dem Prozeß benutzter Variablen auf. Diese Variablen werden zu Beginn des Prozesses initialisiert. Fehler-Liste 31 (Fig. 2) enthält, wie schematisch in Fig. 13 gezeigt, eine Fehler-Hash-Tabelle 150, eine Konflikt-Kette 152 und eine Freie-Liste 154 und zwar jeweils einen Eintrag pro Seite. Die Konflikt-Ketten und die Freien-Listen werden ähnlich den bezüglich der Fig. 3 und 4 beschriebenen Prozeduren konstruiert und gehandhabt. Eine Hash-Tabelle wird benutzt, weil die Fehler-Liste zwar relativ kurz ist, aber dennoch bei jedem physischen E/A durchsucht wird, und weil es wünschenswert ist, die Suchzeit so kurz wie möglich zu halten. Die Hash-Tabelle 150 ist 64 Indizes lang; diese Länge wurde gewählt, weil sie eine Potenz von 2 ist und weil die Seiten-RBA mit Verschiebeoperationen und einer Maske leichter manipuliert werden kann als mit Dividieren. Die Rechtfertigung hierfür gegenüber einer Primzahl von Einträgen ist, daß Fehler auf einer Platte gewöhnlicherweise ziemlich gleichförmig verteilt sind und die Geschwindigkeit am wichtigsten ist, da auf diese Tabelle jedesmal zugegriffen wird, wenn der Cache physikalischen E/A vornimmt. Die Hash-Tabelle 150 zeigt auf Konflikt-Kette von Einträgen der Fehler-Liste.
VariableBedeutung
RBARelative Block Adresse der zu lesenden Seite Puffer-ZeigerZeiger, wohin die Daten eingelesen werden SEITENGRÖSSEAnzahl der Sektoren in einer Seite (2, 4 oder 8) RBA-Maske= Nicht (SEITENGRÖSSE-1) (d. h. OFFFFFFFC) RBA-Verschiebung= log₂ (SEITENGRÖSSE) (d. h. 1, 2 oder 3 für die SEITENGRÖSSE 2, 4 oder 8) Sektoren-Zähl-MaskeSEITENGRÖSSE-1 Fehler-Maske= Bitanzahl = SEITENGRÖSSE rechtsbündig in einem Wort (d. h. 0003, 000F, 00FF für SEITENGRÖSSE 2, 4 oder 8)
Tabelle 3 definiert die Struktur jedes Eintrags in der Fehler-Liste.
Tabelle 3
FEHLER-LISTEN-STRUKTUR
Im folgenden wird auf Fig. 8 Bezug genommen. Der Start des Prozesses, eine neue Seite einzulesen, beginnt mit Schritt 132. Der allgemeine in Fig. 8 gezeigte Prozeß stellt fest, ob der Cache früher einen Fehler in der einzulesenden Seite gesehen hat. In Schritt 132 wird die RBA des gewünschten Sektors über ein logisches UND (AND) mit der RBA-Maske verknüpft und das Resultat wird in Schritt 132 dazu benutzt, den Index in der Fehler-Hash-Tabelle 150 auszurechnen. Der Index wird als Rest einer Modulo-64 Operation ausgerechnet, bei der das Resultat aus Schritt 132 um den Betrag der RBA-Verschiebung nach rechts verschoben wird. Als nächstes wird in Schritt 136 die Variable ZEIGER auf den Inhalt der Fehler-Hash-Tabelle gesetzt, der sich bei dem in Schritt 134 berechneten Index befindet. Wenn ZEIGER nicht auf Null gesetzt ist, dann verzweigt Schritt 138 nach 140 und zeigt damit an, daß es einen Fehlereintrag in der Konflikt-Kette gibt. Schritt 140 bestimmt dann, ob die Laufwerkskennzeichnung dieselbe ist wie diejenige mit der Seite, in welcher ein Fehler vorgekommen ist. Wenn sie es nicht ist, dann erhöht der Schritt 144 den Index von ZEIGEr und durchsucht daraufhin den nächsten Eintrag in der Konflikt-Kette. Wenn das Resultat von Schritt 140 positiv ist, dann bestimmt 142, ob die gewünschte RBA mit derjenigen aus dem Fehler-Listeneintrag übereinstimmt. Wenn nicht, dann wird zu dem nächsten Eintrag in der Konflikt-Kette weitergegangen. Das positive Ergebnis von Schritt 138 zeigt an, daß die zugehörige Seite vorher keinen Fehler gehabt hat; in diesem Fall wird ein Versuch unternommen, die ganze Seite zu lesen, indem ein einzelnes Kommando an die Plattensteuereinheit geschickt wird, um die Anzahl von Sektoren in einer Seite zu lesen. Das positive Ergebnis von Schritt 142 zeigt an, daß die Seite vorher einen Fehler hatte und daß sie sektorenweise gelesen wird, indem mehrere Befehle an die Plattensteuereinheit geschickt werden, um jeweils nur einen Sektor auf einmal zu lesen.
Im folgenden wird auf Fig. 9 Bezug genommen. Durch Aufrufen von BIOS erhält Schritt 160 die SEITENGRÖSSE, die Anzahl der Sektoren pro Seite und die RBA des Startsektors. Wenn während des Lesens kein Fehler vorkam, dann verzweigt Schritt 162 nach 164, welcher die Vorhanden- Bits setzt, die anzeigen, daß alle Sektoren in der Seite vorhanden (present) sind. D. h., es wurde kein schlechter Sektor oder Fehler während des Lesens eines solchen Sektors angetroffen und gültige Daten sind in jedem Sektor vorhanden. Schritt 166 setzt die Variable CURPTR, um auf die Adresse des Datenpuffers 21 zu zeigen, in die ein Sektor eingelesen wird. Dann initialisieren die Schritte 168 bis 176 verschiedene Variable, wie angezeigt. Als nächstes wird BIOS aufgerufen und in Schritt 178 ein Sektor gelesen, der zur gegenwärtigen RBA (CURrent RBA) gehört. Wenn kein Fehler vorkommt, dann verzweigt Schritt 180 zu Schritt 181. Wenn ein Fehler während eines solchen Lesens vorkommt, dann wird die Vorhanden-Marke (present flag), die zu einem solchen Fehler gehört, in Schritt 184 auf Null gesetzt, indem sie über ein logisches Exklusiv-ODER (XOR) mit einer Bit-Maske verknüpft wird, um anzuzeigen, daß der Sektor schlecht war. Schritt 186 setzt dann einen Fehler-Code dem Rückkehr-Code, der aus der Lese-Operation von Schritt 178 stammt. Die Schritte 182 bis 188 schreiben die gegenwärtige RBA (CURRBA), den gegenwärtigen Zeiger (CURPTR, CURrent PoinTeR), die Bit-Maske und die Variable COUNT fort, um auf den nächsten Sektor zu zeigen, woraufhin der Prozeß durch den Schritt 190 wiederholt wird, bis die Variable COUNT zu Null reduziert ist. Schritt 192 entscheidet dann, ob die gerade gelesene Seite sich in der Fehler-Tabelle 31 befindet.
Wenn sich die Seite nicht in der Fehler-Tabelle befindet, dann verzweigt Schritt 192 zu Schritt 193 (Fig. 10), welcher ein Element aus der Fehler-Freien-Liste (error free list) 154 erhält, indem er einen Neuen-Fehler-Zeiger (new error pointer) setzt. Schritt 194 bestimmt dann, ob die Fehler-Freie-Liste leer ist, d. h., ob der Neue-Fehler- Zeiger gleich Null ist. Wenn er es ist, dann wird eine Verzweigung von Schritt 194 nach Schritt 204 gemacht, welcher die Vorhanden-Bits und den Fehler-Code zurückgibt. Wenn die Fehler-Freie-Liste nicht leer ist, dann fügen die Schritte 196 bis 202 einen neuen Fehlereintrag in die Fehler-Hash-Tabelle ein. Dies wird durchgeführt, indem der Fehler-Frei-Zeiger (error free pointer) in Schritt 196 mit dem Nächsten-Fehler-Frei-Zeiger gleichgesetzt wird, indem der Neue-Fehler-Zeiger-Vorhanden in Schritt 198 mit dem entsprechenden Vorhanden-Bit gleichgesetzt wird, indem der Nächste-Neue-Fehler-Zeiger in Schritt 200 gemäß dem Wert entsprechend dem Index der Fehler-Hash-Tabelle gesetzt wird und indem dann der Fehler-Hash-Index in Schritt 202 auf den Neuen- Fehler-Zeiger gesetzt wird.
Die in Fig. 11 gezeigte Prozedur überprüft die angeforderten Sektoren auf frühere Fehler. Die Schritte 206 bis 218 sind mit den Schritten 118 bis 130 identsich, aber unterscheiden sich in den Eingangs- und Ausgangspunkten. Entsprechend diesem Unterschied überprüfen die Schritte 118 bis 130, ob die angeforderten Sektoren sich in der Cache-Seite befinden und erzeugen ein positives Resultat in Schritt 130, wenn sich alle Sektoren in einer Seite befinden. Das negative Resultat zeigt an, daß sich nicht alle angeforderten Sektoren in einer Seite befinden, sodaß das Betriebssystem versuchen muß, eine Form von Fehlerbehebung durchzuführen. Andererseits werden die Schritte 206 bis 218 dazu benutzt, zu überprüfen, ob die angeforderten Sektoren früher Fehler hatten. Das positive Resultat von Schritt 218 zeigt an, daß zwar die Seite Fehler hat aber die angeforderten Sektoren nicht, während das negative Resultat von 218 anzeigt, daß die angeforderten Sektoren Fehler haben.
In Schritt 206 werden die RBA und die Sektorzähl-Maske über ein logisches UND miteinander verknüpft und das Resultat in der Variable SCHIEBEZÄHLER gespeichert. Schritt 208 setzt dann die Vorhanden-Bits gleich dem um den Betrag des SCHIEBEZÄHLERS nach rechts verschobenen Vorhanden-Zeigers. Schritt 210 setzt die Maskenverschiebung gleich der SEITENGRÖSSE minus der Anzahl der Sektoren. Schritt 212 erzeugt eine Test-Maske, indem die Fehler-Maske um einen von der Maskenverschiebung bestimmten Wert nach rechts verschoben wird. Daraufhin werden die Vorhanden-Bits über ein logisches UND in Schritt 214 mit der Test-Maske verknüpft und in Schritt 216 über ein logisches Exklusiv-ODER mit der Test-Maske verknüpft, woraufhin Schritt 218 die Ergebnisse überprüft. Dieses Verfahren ist vorteilhaft, weil es schnell bestimmt, ob es Fehler in den angeforderten Sektoren gibt, ohne dabei von Schleifen oder einer Vielfalt von Entscheidungspfaden Gebrauch zu machen. Dies mag auch mit Hilfe des folgenden Beispiels besser verstanden werden, in welchem angenommen wird, daß SEITENGRÖSSE gleich 8 Sektoren ist, der Sektor 5 der Seite (der sechste Sektor) beim letzten Lesen der Seite einen Fehler hatte, so daß sein zugehöriges Vorhanden-Bit auf Null gesetzt ist. Tabelle 4 liefert ein Beispiel dafür, wie das Verfahren arbeitet, wenn ein angeforderter Sektor sich in einer Seite befindet, die einen Fehler hat, aber der angeforderte Sektor nicht einer der Fehler ist. Das Beispiel liest zwei Sektoren, beginnend bei Sektor 3 der Seite. Tabelle 5 zeigt ein Beispiel dieser Vorgehensweise, wenn ein angeforderter Sektor während eines vorhergehenden Lesens einen Fehler gehabt hat. Dieses Beispiel liest zwei Sektoren, beginnend bei Sektor 4 der Seite.
Tabelle 4
KEINE FEHLER IN DEN ANGEFORDERTEN SEKTOREN
Tabelle 5
FEHLER IN DEN ANGEFORDERTEN SEKTOREN
Im folgenden wird auf Fig. 12 Bezug genommen. Schritt 220 folgt nach einer negativen Feststellung in Schritt 218 (Fig. 11) und veranlaßt die Setzung eines Vorhanden-Bits gemäß des Vorhanden-Zeigers. Schritt 222 setzt die Variable COUNT gleich der SEITENGRÖSSE, Schritt 224 setzt die Variable CURRBA gleich der RBA, Schritt 226 setzt die Variable CURPTR gleich dem Zeiger in den Datenpuffer und Schritt 228 setzt die Bitmaske gleich 1. Schritt 230 bestimmt dann, ob der gegenwärtige Sektor vorher einen Fehler hatte, indem das Vorhanden-Bit über ein logisches UND mit der Bitmaske verknüpft wird. Wenn das Resultat ungleich Null ist, dann liest Schritt 232 mit Hilfe eines BIOS-Aufrufes einen Sektor bei der CURRBA (gegenwärtige relative Blockadresse). Der Schritt 232 bestimmt dann, ob es während eines solchen Lesens einen Fehler gab. Wenn es einen gab, dann setzt Schritt 236 die Vorhanden-Marken, um anzuzeigen, daß es einen Fehler gab und rettet auch den Fehlercode (in Schritt 238). Schritt 240 und die folgenden gehen dann zum nächsten Sektor über, indem die CURRBA in Schritt 240 inkrementiert wird. Die Variable CURPTR wird dann um die Anzahl der Bytes pro Sektor in Schritt 242 inkrementiert und die Bitmaske wird in Schritt 244 um eins nach links verschoben. Die Variable COUNT wird in Schritt 246 dekrementiert. Wenn sie Null erreicht, wird eine Verzweigung nach Schritt 204 vorgenommen (Fig. 10). Andernfalls stellt dann Schritt 248 fest, daß nicht alle Sektoren gelesen wurden und verzweigt darum nach Schritt 230 zurück, um den Vorgang zu wiederholen.
Im folgenden wird die Operation der Prozeduren zusammengefaßt. Speichermediendefekte werden mittels der Vorhanden- Markierungen in der Struktur der Cache-Seiten behandelt. Wenn ein Versuch unternommen wird, eine Seite von der Platte einzulesen, und wenn dabei ein Fehler festgestellt wird, behebt der Cache den Fehler in der folgenden Art und Weise:
  • 1. Er kehrt zum ersten Sektor der Seite zurück.
  • 2. Er beginnt die Sektoren jeweils einzeln in den Seitenpuffer einzulesen. Jedes Mal, wenn er einen Sektor erfolgreich einliest, setzt er eine entsprechende Vorhanden-Marke.
  • 3. Wenn während des Lesens auf einen Fehler gestoßen wird, dann wird die Vorhanden-Marke für diesen Sektor gelöscht (auf 0 gesetzt) und geeignete Zeiger werden fortgeschrieben so als ob der Sektor eingelesen worden wäre.
  • 4. Sobald alle Sektoren einer Seite eingelesen wurden (jeweils einzeln), dann werden die Vorhanden-Bits durchsucht, um festzustellen, ob einer oder mehrere der vom Cache angeforderten Sektoren fehlt, d. h., das entsprechende Vorhanden-Bit ist auf 0 gesetzt. Danach wird der letzte während des Lesens von dem Speichermedium empfangenen Fehler an den Anforderer zurückgegeben.
Das Verfahren ist geringfügig anders, wenn sich die angeforderte Seite bereits im Cache befindet. Es wird in der folgenden Weise gehandhabt.
  • 1. Die Vorhanden-Marken werden durchsucht, um zu bestimmen, ob einer oder mehrere der angeforderten Sektoren fehlen. Wenn keiner fehlt, dann arbeitet der Cache in einer normalen Weise und die Daten werden an den Anforderer zurückgegeben.
  • 2. Wenn einer oder mehrere Sektoren fehlen, dann werden nur jene Sektoren gelesen, die von der Platte gelesen werden müssen. Wenn keine Fehler während des Lesens angetroffen werden, dann werden die entsprechenden Sektoren in der Cache-Seite als vorhanden markiert und die Verarbeitung geht weiter.
Dieses Schema erlaubt es dem Cache, "Löcher" aufzuweisen, die Fehlern auf dem Speichermedium entsprechen, ohne daß Daten verloren gehen oder daß die Komplexität des Caches wesentlich vergrößert wird. Es erlaubt darüber hinaus dem Betriebssystem zu versuchen, Operationen nochmals auszuführen und Daten in einer Fehlersituation wieder herzustellen (recover), ohne daß der Cache die Aufgabe des Betriebssystems schwieriger macht.
Wenn der Cache auf einen Fehler trifft, stellt er fest, welcher Sektor bzw. welche Sektoren der Seite fehlerhaft sind und läßt "Löcher" in der Seite, die den fehlerhaften Sektoren entsprechen. Bei dem Verfahren, Fehler zu beheben, wird ein 16-Bit-Wert erzeugt, der als die Vorhanden-Marken bezeichnet wird. Wenn in diesen Marken irgendwelche Bits Null sind, dann hat die Seite einen oder mehrere Fehler.
Wenn es Fehler in einer Seite gibt, dann stellt der Cache fest, ob diese Seite bereits vorher Fehler hatte. Er tut dies, indem er unter Benutzung eines Hash-Verfahrens mit der RBA (relative Blockadresse) der Seite in einer Fehler-Liste nachschaut, ob sich diese Seite in der Liste befindet. Wenn sich die Seite nicht in der Liste befindet, dann wird sie ihr hinzugefügt. Wenn die Seite bereits vorher einen Fehler hatte, dann wird eine der folgenden Maßnahmen durchgeführt:
  • 1. Halte die vorhergehenden Vorhanden-Marken.
  • 2. Ersetze die Vorhanden-Marken durch die gerade erzeugten. Dies ist, was der Software-Cache implementierte.
  • 3. Verknüpfe die beiden Sätze der Vorhanden-Marken über ein logisches UND und sichere das Ergebnis. Dies bedeutet, daß ein Sektor einer Seite, wenn er jemals einen Fehler hatte, nicht gelesen werden wird, es sei denn dies wird besonders verlangt.
  • 4. Verknüpfe die beiden Sätze der Vorhanden-Marken über ein logisches ODER und sichere das Ergebnis. Dies bedeutet, daß, wenn ein Sektor in einer Seite jemals erfolgreich gelesen wurde, der Cache stets versuchen wird ihn zu lesen.
Wenn alle Bits in der Vorhanden-Markierung jemals alle Null sind, dann wird der Eintrag aus der Fehler-Liste entfernt (oder zumindest nicht dort hineingeschrieben). Dies wird aus mehreren Gründen getan. Der erste ist, daß so die Fehler-Liste viel kleiner ist; und da das Betriebssystem dazu neigt, bei Vorhandensein von Herstellungsfehlern des Speichermediums ganze Spuren aus dem Zuordnungsprozeß herauszunehmen, wird das Betriebssystem im allgemeinen nicht versuchen, diese Bereiche zu lesen. Der zweite Grund besteht darin, daß sich das Betriebssystem dann, wenn eine Seite überhaupt keine guten Sektoren hat, allgemein im Zustand der Fehler- Wiederherstellung (error recovery state) befindet und die Auswirkungen auf die Leistung nicht kritisch sind. Es gibt auch wenig, was der Cache mit der Seite unternehmen könnte und so vergeudet der Cache keinen Platz für die Aufzeichnung dieses Fehlers.
Wenn eine Anforderung an den Cache gestellt wird, die in einem Cache-Fehltreffer resultiert, dann bestimmt das System zunächst, ob die zu lesende Seite jemals vorher Fehler hatte. Wenn die Seite vorhergehende Fehler hatte dann schaut das System nach, ob einer der angeforderten Sektoren als ein Fehler markiert wurde. Wenn keiner der angeforderten Sektoren einen Fehler hatte, dann werden die Sektoren der Seite jeweils einzeln eingelesen, wobei die fehlerhaften Sektoren übersprungen werden. Dadurch sind die Fehler vermieden worden.
Wiederholungen bei Fehlerbedingungen (error retries) durch den Initiator einer Anforderung sind erlaubt, da ein angeforderter Sektor, wenn er Fehler hatte, vom Cache gelesen werden wird. Alles was die Fehler-Vermeidung tut, besteht darin, den Cache daran zu hindern auf von ihm als fehlerhaft markierte Sektoren im voraus zuzugreifen, wenn diese Sektoren nicht explizit angefordert werden.

Claims (7)

1. Verfahren zur Behandlung von Fehlern, die beim Auslesen defekter Sektoren eines Plattenspeichers in einen zugeordneten Platten-Cache des Hauptspeichers auftreten, der Datenseiten mit jeweils mehreren Sektoren enthält, dadurch gekennzeichnet, daß im Steuerfeld jeder Cache-Seite eine Markierung (Vorhanden-Marke) vorgesehen ist, die angibt, welche Sektoren der Seite gültige Daten enthalten und daß die Markierungen bei Zugriffen zur Cache-Seite ausgewertet werden.
2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß nach dem Auftreten eines Fehlers beim kontinuierlichen Auslesen der Sektoren einer Cache-Seite aus dem Plattenspeicher der Lesevorgang wiederholt wird, wobei die Sektoren einzeln nacheinander ausgelesen und die zugehörigen Markierungen gesetzt werden.
3. Verfahren nach Anspruch 1 oder 2, dadurch gekennzeichnet, daß im Hauptspeicher eine verkettete Liste mit der Angabe der Sektoren aufrechterhalten wird, bei denen Lesefehler aufgetreten sind, und daß die Fehlerliste vor dem Zugriff zu einer Cache-Seite abgefragt wird.
4. Verfahren nach den Ansprüchen 1 bis 3, dadurch gekennzeichnet, daß beim Zugriff zu einer Cache-Seite mit fehlerhaften Sektoren erneut versucht wird, die Daten aus den fehlerhaften Sektoren des Plattenspeichers auszulesen.
5. Verfahren nach Anspruch 3, dadurch gekennzeichnet, daß die Fehlerliste für eine Cache-Seite jedesmal dann fortgeschrieben wird, wenn beim Auslesen der Cache-Seite vom Plattenspeicher ein Fehler auftritt.
6. Verfahren nach Anspruch 5, dadurch gekennzeichnet, daß die Verknüpfung bisheriger und aktueller Markierungen in der Fehlerliste nach einer logischen UND-Verknüpfung erfolgt, und daß ein erneuter Leseversuch nur für solche Sektoren durchgeführt wird, in denen noch kein Lesefehler aufgetreten ist.
7. Verfahren nach Anspruch 5, dadurch gekennzeichnet, daß die bisherigen und gegenwärtigen Markierungen in der Fehlerliste nach einer logischen ODER- Funktion verknüpft werden, und daß ein erneuter Leseversuch nur für solche Sektoren erfolgt, in denen mindestens ein Leseversuch erfolgreich war.
DE3810233A 1987-03-30 1988-03-25 Verfahren zur behandlung von sektorenfehlern in plattenspeichern Granted DE3810233A1 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US07/032,214 US4972316A (en) 1987-03-30 1987-03-30 Method of handling disk sector errors in DASD cache

Publications (2)

Publication Number Publication Date
DE3810233A1 true DE3810233A1 (de) 1988-10-20
DE3810233C2 DE3810233C2 (de) 1992-05-07

Family

ID=21863717

Family Applications (2)

Application Number Title Priority Date Filing Date
DE8787118539T Expired - Fee Related DE3778347D1 (de) 1987-03-30 1987-12-15 Verfahren zur verarbeitung von fehlern in platten-sektoren in dasd-cache.
DE3810233A Granted DE3810233A1 (de) 1987-03-30 1988-03-25 Verfahren zur behandlung von sektorenfehlern in plattenspeichern

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE8787118539T Expired - Fee Related DE3778347D1 (de) 1987-03-30 1987-12-15 Verfahren zur verarbeitung von fehlern in platten-sektoren in dasd-cache.

Country Status (18)

Country Link
US (1) US4972316A (de)
EP (1) EP0284663B1 (de)
JP (1) JPS63247853A (de)
KR (1) KR940005786B1 (de)
CN (1) CN1014565B (de)
AT (1) ATE75070T1 (de)
BE (1) BE1001066A4 (de)
CA (1) CA1288870C (de)
DE (2) DE3778347D1 (de)
ES (1) ES2031114T3 (de)
FR (1) FR2613506B1 (de)
GB (1) GB2202976B (de)
GR (1) GR3004931T3 (de)
HK (1) HK65492A (de)
IT (1) IT8819949A0 (de)
MY (1) MY102811A (de)
PH (1) PH27346A (de)
SG (1) SG68092G (de)

Families Citing this family (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2637788B2 (ja) * 1988-09-02 1997-08-06 株式会社日立製作所 ディスクキャッシュ制御方式および情報処理システム
JP2954227B2 (ja) * 1989-02-15 1999-09-27 キヤノン株式会社 情報処理方法
US5347642A (en) * 1989-11-30 1994-09-13 Nec Electronics Inc. Cache memory management unit
AU9027091A (en) * 1990-11-05 1992-05-26 Disk Technician Corporation System for locating and anticipating data storage media failures
US5287363A (en) * 1991-07-01 1994-02-15 Disk Technician Corporation System for locating and anticipating data storage media failures
JP2625609B2 (ja) * 1991-07-10 1997-07-02 インターナショナル・ビジネス・マシーンズ・コーポレイション ディスク記憶装置
WO1993018461A1 (en) * 1992-03-09 1993-09-16 Auspex Systems, Inc. High-performance non-volatile ram protected write cache accelerator system
US5315602A (en) * 1992-08-12 1994-05-24 Digital Equipment Corporation Optimized stripe detection for redundant arrays of disk drives
US5420983A (en) * 1992-08-12 1995-05-30 Digital Equipment Corporation Method for merging memory blocks, fetching associated disk chunk, merging memory blocks with the disk chunk, and writing the merged data
US5309451A (en) * 1992-08-12 1994-05-03 Digital Equipment Corporation Data and parity prefetching for redundant arrays of disk drives
US5404471A (en) * 1992-11-20 1995-04-04 International Business Machines Corp. Method and apparatus for switching address generation modes in CPU having plural address generation modes
US6384995B1 (en) 1992-12-23 2002-05-07 International Business Machines Corporation Apparatus and method for detecting defects in data storage devices
US5566324A (en) * 1992-12-24 1996-10-15 Ncr Corporation Computer apparatus including a main memory prefetch cache and method of operation thereof
GB2276255A (en) * 1993-02-17 1994-09-21 Andor Int Ltd Track buffer with embedded error data
US5646923A (en) * 1993-11-17 1997-07-08 International Business Machines Corporation System and method for hiding P-list entries for a disk from an initiator using a small computer system interface
US5523903A (en) * 1993-12-23 1996-06-04 International Business Machines Corporation Sector architecture for fixed block disk drive
MY112118A (en) * 1993-12-23 2001-04-30 Hitachi Global Storage Tech Netherlands B V System and method for skip-sector mapping in a data recording disk drive.
US5606685A (en) * 1993-12-29 1997-02-25 Unisys Corporation Computer workstation having demand-paged virtual memory and enhanced prefaulting
US5577227A (en) * 1994-08-04 1996-11-19 Finnell; James S. Method for decreasing penalty resulting from a cache miss in multi-level cache system
JP3254340B2 (ja) * 1994-11-10 2002-02-04 シャープ株式会社 記録再生装置および記録再生装置のための欠陥処理方法
US5671390A (en) * 1995-05-23 1997-09-23 International Business Machines Corporation Log structured array storage subsystem using LSA directory and LSA sub-directory stored in different storage media
US5737344A (en) * 1995-05-25 1998-04-07 International Business Machines Corporation Digital data storage with increased robustness against data loss
US5907672A (en) * 1995-10-04 1999-05-25 Stac, Inc. System for backing up computer disk volumes with error remapping of flawed memory addresses
DE19781772T1 (de) * 1996-05-15 1999-04-29 Seagate Technology Lesefehlerbehandlung anhand von Fehlerkorrekturcodes und Lesekanal-Qualitätsindikatoren
US5721816A (en) * 1996-07-29 1998-02-24 Kusbel; Paul F. Adaptive recovery of read and write errors in a disc drive
US6154331A (en) * 1996-10-01 2000-11-28 Lsi Logic Corporation Disk formatter write gate look-ahead device
US5845318A (en) * 1996-10-28 1998-12-01 International Business Machines Corporation Dasd I/O caching method and application including replacement policy minimizing data retrieval and storage costs
US6065100A (en) * 1996-11-12 2000-05-16 Micro-Design International Caching apparatus and method for enhancing retrieval of data from an optical storage device
US5960460A (en) * 1997-01-02 1999-09-28 Exabyte Corporation Non-intrusive replication of hard disk
US6392833B1 (en) 1998-07-13 2002-05-21 Seagate Technology, Llc Reducing self-excited mechanical resonances in a disc drive
US7089449B1 (en) * 2000-11-06 2006-08-08 Micron Technology, Inc. Recovering a system that has experienced a fault
US7234021B1 (en) * 2001-10-05 2007-06-19 Emc Corporation Methods and apparatus for accessing data elements using improved hashing techniques
JP4074806B2 (ja) * 2002-11-20 2008-04-16 ヒタチグローバルストレージテクノロジーズネザーランドビーブイ 不良セクタの探索方法、データ記録装置、プログラム
US7114033B2 (en) * 2003-03-25 2006-09-26 Emc Corporation Handling data writes copied from a remote data storage device
US7437593B2 (en) * 2003-07-14 2008-10-14 International Business Machines Corporation Apparatus, system, and method for managing errors in prefetched data
US7277993B2 (en) * 2003-12-03 2007-10-02 Intel Corporation Write-back disk cache
US7379952B2 (en) * 2004-01-30 2008-05-27 Oracle International Corporation Techniques for multiple window resource remastering among nodes of a cluster
US7962453B2 (en) 2004-04-26 2011-06-14 Oracle International Corporation Dynamic redistribution of a distributed memory index when individual nodes have different lookup indexes
US7644239B2 (en) * 2004-05-03 2010-01-05 Microsoft Corporation Non-volatile memory cache performance improvement
US7490197B2 (en) 2004-10-21 2009-02-10 Microsoft Corporation Using external memory devices to improve system performance
US8250296B2 (en) * 2004-12-01 2012-08-21 Dell Products L.P. System and method for information handling system memory page mapping optimization
US20060200469A1 (en) * 2005-03-02 2006-09-07 Lakshminarayanan Chidambaran Global session identifiers in a multi-node system
US7689766B1 (en) 2005-06-10 2010-03-30 American Megatrends, Inc. Method, system, apparatus, and computer-readable medium for integrating a caching module into a storage system architecture
US7536529B1 (en) 2005-06-10 2009-05-19 American Megatrends, Inc. Method, system, apparatus, and computer-readable medium for provisioning space in a data storage system
US7814065B2 (en) 2005-08-16 2010-10-12 Oracle International Corporation Affinity-based recovery/failover in a cluster environment
US8914557B2 (en) 2005-12-16 2014-12-16 Microsoft Corporation Optimizing write and wear performance for a memory
US8631203B2 (en) 2007-12-10 2014-01-14 Microsoft Corporation Management of external memory functioning as virtual cache
US8352716B1 (en) 2008-01-16 2013-01-08 American Megatrends, Inc. Boot caching for boot acceleration within data storage systems
US8621154B1 (en) 2008-04-18 2013-12-31 Netapp, Inc. Flow based reply cache
US8161236B1 (en) 2008-04-23 2012-04-17 Netapp, Inc. Persistent reply cache integrated with file system
US8799429B1 (en) 2008-05-06 2014-08-05 American Megatrends, Inc. Boot acceleration by consolidating client-specific boot data in a data storage system
US9032151B2 (en) 2008-09-15 2015-05-12 Microsoft Technology Licensing, Llc Method and system for ensuring reliability of cache data and metadata subsequent to a reboot
US8032707B2 (en) 2008-09-15 2011-10-04 Microsoft Corporation Managing cache data and metadata
US7953774B2 (en) 2008-09-19 2011-05-31 Microsoft Corporation Aggregation of write traffic to a data store
US8171227B1 (en) 2009-03-11 2012-05-01 Netapp, Inc. System and method for managing a flow based reply cache
JP4988007B2 (ja) * 2010-05-13 2012-08-01 株式会社東芝 情報処理装置およびドライバ
JP4988008B2 (ja) 2010-05-13 2012-08-01 株式会社東芝 情報処理装置およびドライバ
USRE49818E1 (en) 2010-05-13 2024-01-30 Kioxia Corporation Information processing method in a multi-level hierarchical memory system
US8700861B1 (en) * 2012-03-28 2014-04-15 Emc Corporation Managing a dynamic list of entries for cache page cleaning
US9798623B2 (en) * 2012-05-11 2017-10-24 Seagate Technology Llc Using cache to manage errors in primary storage
US9240210B2 (en) 2013-11-26 2016-01-19 Seagate Technology Llc Physical subsector error marking
KR102498668B1 (ko) * 2017-05-17 2023-02-09 삼성전자주식회사 플래시-인지 힙 메모리 관리 방법 및 호스트 장치
CN109582598B (zh) * 2018-12-13 2023-05-02 武汉中元华电软件有限公司 一种基于外部存储实现高效查找哈希表的预处理方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0151789A2 (de) * 1984-02-13 1985-08-21 Siemens Aktiengesellschaft Speicherungsverfahren für eine in Fernmeldeanlagen, insbesondere Fernsprechvermittlungsanlagen eingesetzte Speichereinrichtung
DE3713043A1 (de) * 1986-04-16 1987-11-19 Hitachi Ltd Verfahren zur steuerung einer plattenspeichereinheit

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3997876A (en) * 1972-06-07 1976-12-14 International Business Machines Corporation Apparatus and method for avoiding defects in the recording medium within a peripheral storage system
US4384487A (en) * 1974-09-30 1983-05-24 Browning Alva L Dynamically restrained inertial reference instrument and reliability sensor
US4148098A (en) * 1976-10-18 1979-04-03 Xerox Corporation Data transfer system with disk command verification apparatus
US4168541A (en) * 1978-09-25 1979-09-18 Sperry Rand Corporation Paired least recently used block replacement system
US4523275A (en) * 1980-11-14 1985-06-11 Sperry Corporation Cache/disk subsystem with floating entry
US4394732A (en) * 1980-11-14 1983-07-19 Sperry Corporation Cache/disk subsystem trickle
US4490782A (en) * 1981-06-05 1984-12-25 International Business Machines Corporation I/O Storage controller cache system with prefetch determined by requested record's position within data block
JPS5877034A (ja) * 1981-10-30 1983-05-10 Hitachi Ltd 記録方法
US4536836A (en) * 1981-11-27 1985-08-20 Storage Technology Corporation Detection of sequential data stream
US4780808A (en) * 1981-11-27 1988-10-25 Storage Technology Corporation Control of cache buffer for memory subsystem
US4498146A (en) * 1982-07-30 1985-02-05 At&T Bell Laboratories Management of defects in storage media
US4638425A (en) * 1982-09-29 1987-01-20 International Business Machines Corporation Peripheral data storage having access controls with error recovery
JPS59153251A (ja) * 1983-02-18 1984-09-01 Toshiba Corp デイスクキヤツシユシステム
JPS59185931A (ja) * 1983-04-05 1984-10-22 Daikin Ind Ltd 空気調和装置
JPS608959A (ja) * 1983-06-29 1985-01-17 Fujitsu Ltd デイスク・キヤツシユ制御方法
US4603380A (en) * 1983-07-01 1986-07-29 International Business Machines Corporation DASD cache block staging
US4916605A (en) * 1984-03-27 1990-04-10 International Business Machines Corporation Fast write operations
US4807110A (en) * 1984-04-06 1989-02-21 International Business Machines Corporation Prefetching system for a cache having a second directory for sequentially accessed blocks
US4631723A (en) * 1984-06-08 1986-12-23 Honeywell Information Systems Inc. Mass storage disk drive defective media handling
US4680703A (en) * 1984-06-25 1987-07-14 International Business Machines Corp. Data processing system with reorganization of disk storage for improved paging
US4637024A (en) * 1984-11-02 1987-01-13 International Business Machines Corporation Redundant page identification for a catalogued memory
JPS61133433A (ja) * 1984-11-30 1986-06-20 Nec Corp 書換え不能なデ−タ記録媒体における不良セクタ代替え処理方式
US4685082A (en) * 1985-02-22 1987-08-04 Wang Laboratories, Inc. Simplified cache with automatic update
JPS61202381A (ja) * 1985-03-06 1986-09-08 Hitachi Ltd デイスク制御装置
JPH0756734B2 (ja) * 1985-05-27 1995-06-14 松下電器産業株式会社 情報記録再生装置
JPS61272821A (ja) * 1985-05-29 1986-12-03 Nec Corp 磁気デイスク制御装置
US4875155A (en) * 1985-06-28 1989-10-17 International Business Machines Corporation Peripheral subsystem having read/write cache with record access
JPS6222162A (ja) * 1985-07-23 1987-01-30 Alps Electric Co Ltd デイスクキヤツシユ制御方式
JPS6356452U (de) * 1986-09-29 1988-04-15
US4814903A (en) * 1987-06-29 1989-03-21 International Business Machines Corporation Alternate storage areas in magnetooptical media
US4914530A (en) * 1987-09-21 1990-04-03 Plus Development Corporation Media defect management within disk drive sector format

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0151789A2 (de) * 1984-02-13 1985-08-21 Siemens Aktiengesellschaft Speicherungsverfahren für eine in Fernmeldeanlagen, insbesondere Fernsprechvermittlungsanlagen eingesetzte Speichereinrichtung
DE3713043A1 (de) * 1986-04-16 1987-11-19 Hitachi Ltd Verfahren zur steuerung einer plattenspeichereinheit

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
IBM TDB, Vol. 29, Nr. 5, Okt. 1986, S. 2116, 2117 *
Wireless World, Januar 1983, S. 76-78 *

Also Published As

Publication number Publication date
JPS63247853A (ja) 1988-10-14
FR2613506A1 (fr) 1988-10-07
GB8728923D0 (en) 1988-01-27
GB2202976B (en) 1991-10-09
ATE75070T1 (de) 1992-05-15
PH27346A (en) 1993-06-08
MY102811A (en) 1992-11-30
EP0284663B1 (de) 1992-04-15
DE3778347D1 (de) 1992-05-21
FR2613506B1 (fr) 1990-02-09
CN88100953A (zh) 1988-12-28
BE1001066A4 (fr) 1989-06-27
EP0284663A3 (en) 1989-03-22
ES2031114T3 (es) 1992-12-01
CA1288870C (en) 1991-09-10
KR880011667A (ko) 1988-10-29
DE3810233C2 (de) 1992-05-07
IT8819949A0 (it) 1988-03-25
GR3004931T3 (de) 1993-04-28
CN1014565B (zh) 1991-10-30
KR940005786B1 (ko) 1994-06-23
SG68092G (en) 1992-09-04
EP0284663A2 (de) 1988-10-05
GB2202976A (en) 1988-10-05
US4972316A (en) 1990-11-20
JPH0564814B2 (de) 1993-09-16
HK65492A (en) 1992-09-11

Similar Documents

Publication Publication Date Title
DE3810233C2 (de)
DE3131341C2 (de)
DE69913984T2 (de) Verteiltes transaktionales verarbeitungssystem und verfahren
DE2515696C2 (de) Datenverarbeitungssystem
DE69721590T2 (de) Ein bereichsbasiertes seiten-table-walk-bit verwendendes verfahren sowie vorrichtung
DE2350884C2 (de) Adreßumsetzungseinheit
DE10055603B4 (de) Verfahren zum Zugriff auf eine Datei in einer Vielzahl von Datenspeicherbibliotheken und Datenspeicherbibliothek-System
DE3743890C2 (de)
DE3151745C2 (de)
CH627580A5 (de) Austauschanordnung zur bereitstellung von austauschadressen fuer den betrieb eines pufferspeichers in einer speicherhierarchie.
DE2523414B2 (de) Hierarchische Speicheranordnung mit mehr als zwei Speicherstufen
DE19961499A1 (de) Caching von Objekten in Platten-gestützten Datenbanken
DE102009031125A1 (de) Nand-Fehlerbehandlung
DE3934145A1 (de) Platteneinheit-steuerungsvorrichtung und informationsverarbeitungssystem, das dieselbe enthaelt
DE3046912C2 (de) Schaltungsanordnung zum selektiven Löschen von Cachespeichern in einer Multiprozessor-Datenverarbeitungsanlage
DE19945993A1 (de) Informationsspeichervorrichtung
DE69724533T2 (de) Durchschreiboperation mit Stufenumgehung in einem mehrstufigen Speicher eines Rechnersystems
DE2613800C2 (de)
DE102021108478A1 (de) System und Verfahren zur Cache-Verzeichnis-TCAM-Fehlererkennung und - Korrektur
DE112020001089T5 (de) Verbessern von cache-trefferverhältnissen bei ausgewählten datenträgern in einem speichersystem
DE3832758C2 (de) Verfahren zum Adressieren eines im Rückschreib-Modus betriebenen virtuellen Cache-Speichers
DE2710436C2 (de) Datenverarbeitungseinrichtung
DE2750126C3 (de) Datenverarbeitungssystem mit einem Zwischenpufferspeicher
DE112021000794T5 (de) Präventives zwischenspeichern für auslagerung eines ganzen stride
DE112021005198T5 (de) Hochauflösendes Bandverzeichnis für bandgestützte Speicherung

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
D2 Grant after examination
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee