DE3810233C2 - - Google Patents
Info
- Publication number
- DE3810233C2 DE3810233C2 DE3810233A DE3810233A DE3810233C2 DE 3810233 C2 DE3810233 C2 DE 3810233C2 DE 3810233 A DE3810233 A DE 3810233A DE 3810233 A DE3810233 A DE 3810233A DE 3810233 C2 DE3810233 C2 DE 3810233C2
- Authority
- DE
- Germany
- Prior art keywords
- cache
- page
- sectors
- disk
- error
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 claims description 43
- 230000008569 process Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 7
- VLCQZHSMCYCDJL-UHFFFAOYSA-N tribenuron methyl Chemical compound COC(=O)C1=CC=CC=C1S(=O)(=O)NC(=O)N(C)C1=NC(C)=NC(OC)=N1 VLCQZHSMCYCDJL-UHFFFAOYSA-N 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 230000007547 defect Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000002950 deficient Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000004886 head movement Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B20/00—Signal processing not specific to the method of recording or reproducing; Circuits therefor
- G11B20/10—Digital recording or reproducing
- G11B20/18—Error detection or correction; Testing, e.g. of drop-outs
- G11B20/1816—Testing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing 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
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B20/00—Signal processing not specific to the method of recording or reproducing; Circuits therefor
- G11B20/10—Digital recording or reproducing
- G11B20/18—Error detection or correction; Testing, e.g. of drop-outs
Description
Diese Erfindung bezieht sich auf ein Verfahren zum Auslesen
von Cache-Seiten aus einem Plattenspeicher in einen
Platten-Cache eines Rechners, wobei jede Cache-Seite
die gleiche Anzahl von Plattensektoren aufweist und
bei Anforderungen des Rechners zu einem Plattensektor
die benachbarten Sektoren in der Cache-Seite vorausschauend
aus dem Plattenspeicher ausgelesen werden. Mit
dem Verfahren können die Auswirkungen fehlerhafter
Plattensektoren auf den Betrieb Platten-Cache mit
geringen Kosten herabgesetzt werden.
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 gespeichert. 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. Beim
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.
Ein Beispiel für eine derartige Lösung gibt der Artikel
IBM Technical Disclosure Bulletin, Vol. 29, Nr. 5,
Oktober 1986, S. 2116, 2117, der Ersatzspuren für defekte
Plattenspuren und entsprechende Einträge in einem
Cache-Inhaltsverzeichnis vorsieht. Ersatzsektoren für
defekte Plattensektoren und entsprechende Zugriff-Steuervorrichtungen
außerhalb eines Cache-Systems
beschreibt EP-A-01 51 789.
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 die Aufgabe der Erfindung, ein neuartiges Verfahren
zum Auslesen von Cache-Seiten aus einem Plattenspeicher
anzugeben mit dem fehlerhafte Plattensektoren so behandelt
werden, daß sie möglichst geringe Auswirkungen auf den
Betrieb des Cache-Systems haben. 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 veranschaulicht.
Fig. 5 ein schematisches Diagramm, das die LRU-Listenkette
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.
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
26, einen LRU-Zeiger 28 (LRU = least recently
used), einen MRU-Zeiger
30 (MRU = most recently used),
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 entnommen und in den Cache gespeichert.
- 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 1 Dieses 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 2 Dieses Feld bestimmt, auf welchem Laufwerk diese spezielle Seite enthalten ist.
Feld 3 Dieses Feld enthält die relative Blockadresse (RBA) des Startsektors der Seite auf dem Laufwerk.
Feld 4 Dieses 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 5 Dieses 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 6 Dieses Feld zeigt auf die nächste Seite, die in der Konflikt-Liste der Hash-Tabelle ist.
Feld 7 Dieses Feld zeigt auf die vorherige Seite, die in der Konflikt-Liste der Hash-Tabelle ist.
Feld 8 Dieses 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 Seite aus diesem Puffer kopiert und nicht von der Platte gelesen.
Feld 2 Dieses Feld bestimmt, auf welchem Laufwerk diese spezielle Seite enthalten ist.
Feld 3 Dieses Feld enthält die relative Blockadresse (RBA) des Startsektors der Seite auf dem Laufwerk.
Feld 4 Dieses 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 5 Dieses 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 6 Dieses Feld zeigt auf die nächste Seite, die in der Konflikt-Liste der Hash-Tabelle ist.
Feld 7 Dieses Feld zeigt auf die vorherige Seite, die in der Konflikt-Liste der Hash-Tabelle ist.
Feld 8 Dieses 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 Seite aus diesem Puffer kopiert und nicht von der Platte gelesen.
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
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
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 gespeichert
(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 aus der Freien-Liste entfernt und der neuen
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,
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-Systems 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 der
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.
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 die
Konflikt-Kette von Einträgen der Fehler-Liste.
VARIABLE | |
Variable | |
Bedeutung | |
RBA | |
Relative Block Adresse der zu lesenden Seite | |
Puffer-Zeiger | Zeiger, wohin die Daten eingelesen werden |
SEITENGRÖSSE | Anzahl 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-Maske | SEITENGRÖ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.
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 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
gehört. Wenn kein Fehler vorkommt, dann
verzweigt Schritt 180 zu Schritt 182. Wenn ein Fehler
während eines solchen Lesens vorkommt, dann wird die
Vorhanden-Marke, die zu einem solchen
Fehler gehört, in Schritt 284 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 181 setzt dann einen Fehler-Code entsprechend
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
154 erhält, indem er einen Neuen-Fehler-Zeiger
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 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 identisch, 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.
Im folgenden wird auf Fig. 12 Bezug genommen. Schritt 220
folgt nach einer positiven 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 berücksichtigt.
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 fehlen, d. h., das entsprechende Vorhanden-Bit ist auf 0 gesetzt.
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 fehlerhaft markiert sind, werden die angeforderten von der Platte gelesen. 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 fehlerhaften Sektoren auf dem Speichermedium entsprechen,
ohne daß eine spätere Fehlerbehebung ausgeschlossen ist und ohne die Komplexität
des Caches wesentlich zu vergrößern. Es erlaubt darüber hinaus dem
Betriebssystem zu versuchen, Operationen nochmals auszuführen
und Daten in einer Fehlersituation wieder herzustellen,
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. Zur Kennzeichnung von Fehlern
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 Fehler in einer Seite beim Einlesen auftreten, 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 befindet und die
Auswirkungen auf die Leistung nicht kritisch sind.
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.
Wiederholungen bei Fehlerbedingungen
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 (10)
1. Verfahren zum Auslesen von Cache-Seiten aus einem
Plattenspeicher in einen Platten-Cache eines
Rechners, wobei jede Cache-Seite die gleiche
Anzahl von Plattensektoren aufweist und bei
Anforderungen des Rechners zu einem Plattensektor
die benachbarten Sektoren in der Cache-Seite
vorausschauend aus dem Plattenspeicher ausgelesen
werden,
dadurch gekennzeichnet,
daß beim Auslesen von fehlerhaften Plattensektoren
aus dem Plattenspeicher in den zugehörigen
Cache-Seiten des Platten-Cache entsprechende
Lücken für die fehlerhaften Plattensektoren
gelassen werden, daß jeder Cache-Seite im
Platten-Cache eine Gültigkeits-Markierung
(Vorhanden-Marke) zugeordnet wird, die angibt,
welche der Sektoren in der ausgelesenen
Cache-Seite gültige Daten enthalten und daß die
Gültigkeits-Markierung bei Zugriffen des Rechners
zu Sektoren in der Cache-Seite ausgewertet wird.
2. Verfahren nach Anspruch 1, dadurch gekennzeichnet,
daß die Sektoren einer Cache-Seite auf dem Plattenspeicher
in aufeinanderfolgenden Positionen
gespeichert sind.
3. Verfahren nach Anspruch 1 oder 2, dadurch gekennzeichnet,
daß bei Anforderungen des Rechners zu
Sektoren, die in der Gültigkeits-Markierung als
fehlerhaft im Platten-Cache gekennzeichnet sind,
erneut versucht wird, die zugehörige Cache-Seite
vom Plattenspeicher zu lesen.
4. Verfahren nach einem der Ansprüche 1 bis 3,
dadurch gekennzeichnet, daß die Gültigkeits-Markierung
in der Cache-Seite selbst gespeichert
wird.
5. Verfahren nach einem der Ansprüche 1 bis 4,
dadurch gekennzeichnet, daß im Platten-Cache eine
verkettete Fehler-Liste aufrechterhalten wird,
deren Einträge jeweils die Gültigkeits-Markierung
zugeordneter Cache-Seiten enthalten, bei denen zu
früheren Zeitpunkten fehlerhafte Sektoren festgestellt
wurden und daß die Fehler-Liste vor jedem
Zugriff zu einer Cache-Seite auf dem Plattenspeicher
ausgewertet wird.
6. Verfahren nach Anspruch 5, dadurch gekennzeichnet,
daß beim Zugriff zu einer Cache-Seite auf dem
Plattenspeicher die Sektoren einzeln ausgelesen
werden, wenn die auszulesende Cache-Seite in der
Fehler-Liste aufgeführt ist.
7. Verfahren nach einem der Ansprüche 5 und 6,
dadurch gekennzeichnet, daß beim Zugriff zu einer
Cache-Seite auf dem Plattenspeicher die in der
Fehler-Liste als fehlerhaft markierten Plattensektoren
übersprungen werden.
8. Verfahren nach einem der Ansprüche 5 bis 7,
dadurch gekennzeichnet, daß die Gültigkeits-Markierung
in der Fehler-Liste für eine
Cache-Seite jedesmal dann fortgeschrieben wird,
wenn beim Auslesen der Cache-Seite vom Plattenspeicher
ein Fehler auftritt.
9. Verfahren nach Anspruch 8, dadurch gekennzeichnet,
daß die Verknüpfung bisheriger und aktueller
Gültigkeits-Markierungen in der Fehler-Liste 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.
10. Verfahren nach Anspruch 8, dadurch gekennzeichnet,
daß die bisherigen und die gegenwärtigen Gültigkeits-Markierungen
in der Fehlerliste nach einer
logischen ODER-Verknüpfung erfolgt und daß ein
erneuter Leseversuch nur für solche Sektoren
erfolgt, in denen mindestens ein Leseversuch
erfolgreich war.
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 DE3810233A1 (de) | 1988-10-20 |
DE3810233C2 true 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) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE19541861B4 (de) * | 1994-11-10 | 2005-08-04 | Sharp K.K. | Fehlerbearbeitungsvorrichtung für Aufzeichnungs- und Wiedergabegerät und Verfahren zum Verarbeiten von Fehlern bei einem Plattenantrieb |
Families Citing this family (62)
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 |
US5287363A (en) * | 1991-07-01 | 1994-02-15 | Disk Technician Corporation | System for locating and anticipating data storage media failures |
AU9027091A (en) * | 1990-11-05 | 1992-05-26 | Disk Technician Corporation | System for locating and anticipating data storage media failures |
JP2625609B2 (ja) * | 1991-07-10 | 1997-07-02 | インターナショナル・ビジネス・マシーンズ・コーポレイション | ディスク記憶装置 |
AU662973B2 (en) * | 1992-03-09 | 1995-09-21 | Auspex Systems, Inc. | High-performance non-volatile ram protected write cache accelerator system |
US5309451A (en) * | 1992-08-12 | 1994-05-03 | Digital Equipment Corporation | Data and parity prefetching 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 |
US5315602A (en) * | 1992-08-12 | 1994-05-24 | Digital Equipment Corporation | Optimized stripe detection 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 |
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 |
WO1997043835A1 (en) * | 1996-05-15 | 1997-11-20 | Seagate Technology, Inc. | Read error recovery utilizing ecc and read channel quality indicators |
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 |
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 |
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 |
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 |
JP4988008B2 (ja) | 2010-05-13 | 2012-08-01 | 株式会社東芝 | 情報処理装置およびドライバ |
JP4988007B2 (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 | 武汉中元华电软件有限公司 | 一种基于外部存储实现高效查找哈希表的预处理方法 |
Family Cites Families (33)
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 | 記録方法 |
US4780808A (en) * | 1981-11-27 | 1988-10-25 | Storage Technology Corporation | Control of cache buffer for memory subsystem |
US4536836A (en) * | 1981-11-27 | 1985-08-20 | Storage Technology Corporation | Detection of sequential data stream |
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 |
DE3405073A1 (de) * | 1984-02-13 | 1985-08-14 | Siemens AG, 1000 Berlin und 8000 München | Speicherungsverfahren fuer eine in fernmeldeanlagen, insbesondere fernsprechvermittlungsanlagen eingesetzte speichereinrichtung |
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 | デイスクキヤツシユ制御方式 |
JP2650891B2 (ja) * | 1986-04-16 | 1997-09-10 | 株式会社日立製作所 | 回転形記憶装置の制御方法 |
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 |
-
1987
- 1987-03-30 US US07/032,214 patent/US4972316A/en not_active Expired - Lifetime
- 1987-12-09 FR FR878717531A patent/FR2613506B1/fr not_active Expired - Fee Related
- 1987-12-10 GB GB8728923A patent/GB2202976B/en not_active Revoked
- 1987-12-15 EP EP87118539A patent/EP0284663B1/de not_active Expired - Lifetime
- 1987-12-15 ES ES198787118539T patent/ES2031114T3/es not_active Expired - Lifetime
- 1987-12-15 AT AT87118539T patent/ATE75070T1/de not_active IP Right Cessation
- 1987-12-15 DE DE8787118539T patent/DE3778347D1/de not_active Expired - Fee Related
- 1987-12-16 BE BE8701439A patent/BE1001066A4/fr not_active IP Right Cessation
-
1988
- 1988-02-04 CA CA000558112A patent/CA1288870C/en not_active Expired - Fee Related
- 1988-02-17 JP JP63032994A patent/JPS63247853A/ja active Granted
- 1988-02-19 PH PH36534A patent/PH27346A/en unknown
- 1988-02-27 CN CN88100953A patent/CN1014565B/zh not_active Expired
- 1988-02-29 KR KR1019880002102A patent/KR940005786B1/ko not_active IP Right Cessation
- 1988-03-08 MY MYPI88000235A patent/MY102811A/en unknown
- 1988-03-25 IT IT8819949A patent/IT8819949A0/it unknown
- 1988-03-25 DE DE3810233A patent/DE3810233A1/de active Granted
-
1992
- 1992-06-17 GR GR920401291T patent/GR3004931T3/el unknown
- 1992-07-02 SG SG68092A patent/SG68092G/en unknown
- 1992-09-03 HK HK654/92A patent/HK65492A/xx unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE19541861B4 (de) * | 1994-11-10 | 2005-08-04 | Sharp K.K. | Fehlerbearbeitungsvorrichtung für Aufzeichnungs- und Wiedergabegerät und Verfahren zum Verarbeiten von Fehlern bei einem Plattenantrieb |
Also Published As
Publication number | Publication date |
---|---|
CA1288870C (en) | 1991-09-10 |
EP0284663A2 (de) | 1988-10-05 |
EP0284663B1 (de) | 1992-04-15 |
DE3778347D1 (de) | 1992-05-21 |
FR2613506A1 (fr) | 1988-10-07 |
JPS63247853A (ja) | 1988-10-14 |
FR2613506B1 (fr) | 1990-02-09 |
KR880011667A (ko) | 1988-10-29 |
JPH0564814B2 (de) | 1993-09-16 |
SG68092G (en) | 1992-09-04 |
MY102811A (en) | 1992-11-30 |
KR940005786B1 (ko) | 1994-06-23 |
CN1014565B (zh) | 1991-10-30 |
ATE75070T1 (de) | 1992-05-15 |
US4972316A (en) | 1990-11-20 |
IT8819949A0 (it) | 1988-03-25 |
GR3004931T3 (de) | 1993-04-28 |
GB2202976A (en) | 1988-10-05 |
PH27346A (en) | 1993-06-08 |
DE3810233A1 (de) | 1988-10-20 |
CN88100953A (zh) | 1988-12-28 |
ES2031114T3 (es) | 1992-12-01 |
GB8728923D0 (en) | 1988-01-27 |
BE1001066A4 (fr) | 1989-06-27 |
EP0284663A3 (en) | 1989-03-22 |
GB2202976B (en) | 1991-10-09 |
HK65492A (en) | 1992-09-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE3810233C2 (de) | ||
DE69913984T2 (de) | Verteiltes transaktionales verarbeitungssystem und verfahren | |
DE69721590T2 (de) | Ein bereichsbasiertes seiten-table-walk-bit verwendendes verfahren sowie vorrichtung | |
DE3131341C2 (de) | ||
DE69735400T2 (de) | Speicherplattenanordnung | |
DE2350884C2 (de) | Adreßumsetzungseinheit | |
CH627580A5 (de) | Austauschanordnung zur bereitstellung von austauschadressen fuer den betrieb eines pufferspeichers in einer speicherhierarchie. | |
DE3934145C2 (de) | Platteneinheit-Steuerungsvorrichtung und Informationsverarbeitungssystem, das dieselbe enthält | |
DE60036960T2 (de) | Unterscheidung von feinkorntranslation | |
DE3805107A1 (de) | Verfahren und vorrichtung zur steuerung virtueller adressraeume eines virtuellen speichers | |
DE19914730A1 (de) | Verfahren zum Verhindern eines Datenübertrags an beschädigte Adressen | |
DE2806024A1 (de) | Speichersystem mit fehlerfeststell- und korrekturmoeglichkeit | |
DE2523414B2 (de) | Hierarchische Speicheranordnung mit mehr als zwei Speicherstufen | |
DE102009031125A1 (de) | Nand-Fehlerbehandlung | |
DE4029980C2 (de) | Umspeicherverfahren und Umspeichersystem zur Erhöhung der Systemzuverlässigkeit | |
DE19961499A1 (de) | Caching von Objekten in Platten-gestützten Datenbanken | |
DE112010004076T5 (de) | Wiederverwendung Logischer Datenobjekte in einem Virtuellen Server | |
DE19945993A1 (de) | Informationsspeichervorrichtung | |
DE1935944C3 (de) | Steuereinrichtung in einer elektronischen Datenverarbeitungsanlage | |
DE2613800C2 (de) | ||
DE102021108478A1 (de) | System und Verfahren zur Cache-Verzeichnis-TCAM-Fehlererkennung und - Korrektur | |
DE102004003352A1 (de) | Systeme und Verfahren zum Puffern von Daten zwischen einer Übereinstimmungscachesteuerung und einem Speicher | |
DE1499742A1 (de) | Steuerbare Speicherzugriffsvorrichtung fuer Speichereinrichtungen von Datenverarbeitungsanlagen mit Multiprogrammverarbeitung | |
DE3832758C2 (de) | Verfahren zum Adressieren eines im Rückschreib-Modus betriebenen virtuellen Cache-Speichers | |
DE2750126C3 (de) | Datenverarbeitungssystem mit einem Zwischenpufferspeicher |
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 |