DE102007010250A1 - Hierarchische Zeitstempel - Google Patents

Hierarchische Zeitstempel Download PDF

Info

Publication number
DE102007010250A1
DE102007010250A1 DE102007010250A DE102007010250A DE102007010250A1 DE 102007010250 A1 DE102007010250 A1 DE 102007010250A1 DE 102007010250 A DE102007010250 A DE 102007010250A DE 102007010250 A DE102007010250 A DE 102007010250A DE 102007010250 A1 DE102007010250 A1 DE 102007010250A1
Authority
DE
Germany
Prior art keywords
processing
data
hierarchical
timestamp
distributed
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.)
Withdrawn
Application number
DE102007010250A
Other languages
English (en)
Inventor
Douglas L. Voigt
James P. Colorado Springs Jackson
Alistair Palo Alto Veitch
James M. Colorado Springs Reuter
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.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
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 Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of DE102007010250A1 publication Critical patent/DE102007010250A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Ausführungsbeispiele der vorliegenden Erfindung betreffen digital codierte hierarchische Zeitstempel, die in computerlesbaren Medien gespeichert sind. Die hierarchischen Zeitstempel der vorliegenden Erfindung umfassen ein erstes Feld, das einen Zeitstempelwert speichert, und ein zweites Feld, das eine Verarbeitungsebenenanzeige speichert, die den Umfang des Zeitstempels innerhalb eines hierarchischen Verarbeitungssystems anzeigt.

Description

  • Während Computervernetzungs- und -verbindungssysteme stetig an Fähigkeiten, Zuverlässigkeit und Durchsatz gewonnen haben und während verteilte Rechensysteme, die auf Vernetzungs- und Verbindungssystemen basieren, entsprechend an Größe und Fähigkeiten zugenommen haben, wurde ein enormer Fortschritt gemacht beim Entwickeln des theoretischen Verständnisses von Problemen beim verteilten Rechnen, was wiederum die Entwicklung und umfassende Verbreitung von leistungsfähigen und nützlichen Werkzeugen und Lösungsansätze zum Verteilen von Rechenaufgaben innerhalb von verteilten Systemen ermöglicht. Früh in der Entwicklung von verteilten Systemen wurden große Großcomputer und Minicomputer, jeder mit einer Vielzahl von Peripheriegeräten, einschließlich Massenspeichergeräten, direkt oder durch Netze verbunden, um eine Verarbeitung von großen Rechenaufgaben zu verteilen. Während Vernetzungssysteme robuster, fähiger und wirtschaftlicher wurden, wurden unabhängige Massenspeichervorrichtungen, wie z. B. unabhängige Laufwerkarrays, die durch ein oder mehr Netze mit entfernten Hostcomputern verbunden sind, zum Speichern von großen Datenmengen entwickelt, die von zahlreichen Computersystemen, von Großcomputern bis zu Personalcomputern, gemeinschaftlich verwendet werden. In letzter Zeit wurde, wie es im Folgenden genauer beschrieben ist, damit begonnen, Entwicklungsbemühungen auf ein Verteilen von Massenspeichersystemen über zahlreiche Massenspeichervorrichtungen, die durch ein oder mehr Netze verbunden sind, zu richten.
  • In dem Maße, in dem sich Massenspeichervorrichtungen von Peripheriegeräten, die getrennt an ein einziges Computersystem angeschlossen sind und durch dasselbe gesteuert werden, zu unabhängigen Vorrichtungen, die durch entfernte Hostcomputer gemeinschaftlich verwendet werden, und schließlich zu verteilten Systemen entwickelt haben, die aus zahlreichen, diskreten Massenspeichereinheiten zusammengesetzt sind, die miteinander vernetzt sind, haben Probleme, die einem gemeinschaftlichen Verwenden von Daten und einem Unterhalten von gemeinschaftlich verwendeten Daten in konsistenten und robusten Zuständen zugeordnet sind, dramatisch zugenommen. In vielen Fällen können grundsätzliche Verfahren zum gemeinschaftlichen Verwenden von Daten, die für frühe verteilte Systeme entwickelt wurden, zur Verwendung bei komplexeren und stärker verteilten Systemen ohne größere Modifizierung und ohne den Aufwand erweitert werden, der benötigt wird, um die Korrektheit und Skalierbarkeit von größeren Modifizierungen zu überprüfen. Die Beteiligten an Entwurf, Entwicklung, Herstellung und Verkauf und schließlich die Benutzer von verteilten Systemen erkennen weiterhin den Bedarf an Erweiterung von bereits entwickelten Verfahren und Routinen zum verteilten Rechnen und an neuen Verfahren und Routinen, die gewünschte Pegel an Datenrobustheit und Konsistenz bei größeren, komplexeren und stärker verteilten Systemen liefern.
  • Es ist die Aufgabe der vorliegenden Erfindung, ein Verfahren zum Verhindern einer unerwünschten Erfassung von Zeitstempeldisparitäten und ein verteiltes Speichersystem mit verbesserten Charakteristika zu schaffen.
  • Diese Aufgabe wird durch ein Verfahren gemäß Anspruch 1 sowie ein System gemäß Anspruch 6 gelöst.
  • Ausführungsbeispiele der vorliegenden Erfindung betreffen digital codierte hierarchische Zeitstempel, die in computerlesbaren Medien gespeichert werden. Die hierarchischen Zeitstempel der vorliegenden Erfindung umfassen ein erstes Feld, das einen Zeitstempelwert speichert, und ein zweites Feld, das eine Verarbeitungsebene speichert, die den Umfang des Zeitstempels innerhalb eines hierarchischen Verarbeitungssystems anzeigt.
  • Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf die beiliegenden Zeichnungen näher erläutert. Es zeigen:
  • 1 ein Diagramm hoher Ebene eines FAB-Massenspeichersystems gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;
  • 2 ein Diagramm hoher Ebene eines exemplarischen FAB-Bausteins gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;
  • 3 bis 4 das Konzept eines Datenspiegelns;
  • 5 ein Diagramm hoher Ebene, das eine Löschcodierredundanz zeigt.
  • 6 ein 3 + 1-Löschcodierredundanzschema, das die gleichen Darstellungskonventionen verwendet, wie sie in den 3 und 4 verwendet werden;
  • 7 die hierarchischen Dateneinheiten, die bei einer aktuellen FAB-Implementierung verwendet werden, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 8A bis 8D eine hypothetische Abbildung von Logikdateneinheiten auf physische Platten eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt;
  • 9 die Logikdateneinheiten, die innerhalb eines FAB-Systems verwendet werden, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen, unter Verwendung einer anderen Darstellungskonvention;
  • 10A die Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt und die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt;
  • 10B eine Bausteinsegmentadresse, die eine Bausteinrolle gemäß einem Ausführungsbeispiel der vorliegenden Erfindung umfasst;
  • 11A bis 11H verschiedene unterschiedliche Typen von Konfigurationsveränderungen, die sich in der Datenbeschreibungsdatenstruktur, die in 10A gezeigt ist, innerhalb eines FAB-Systems wiederspiegeln, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 12 bis 18 den Grundbetrieb eines verteilten Speicherregisters;
  • 19 die Komponenten, die durch einen Prozess oder eine Verarbeitungsentität Pi verwendet werden, die zusammen mit einer Anzahl von anderen Prozessen und/oder Verarbeitungsentitäten Pj≠i ein verteiltes Speicherregister implementiert;
  • 20 eine Bestimmung des aktuellen Werts eines verteilten Speicherregisters mittels eines Quorums;
  • 21 Pseudocodeimplementierungen für die Routinehandhabungsvorrichtungen und Betriebsroutinen, die in 19 als Diagramm gezeigt sind;
  • 22 modifizierten Pseudocode, der dem Pseudocode ähnlich ist, der in 17 geliefert wird, der Erweiterungen zu dem Speicherregistermodell umfasst, die eine Verteilung von Segmenten über Bausteine gemäß Löschcodierredundanzschemata innerhalb eines FAB-Systems handhaben, die ein Aus führungsbeispiel der vorliegenden Erfindung darstellen;
  • 23 die große Abhängigkeit von Zeitstempeln seitens der Datenkonsistenztechniken, die auf dem Speicherregistermodell basieren, innerhalb eines FAB-Systems, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 24 eine hierarchische Zeitstempelverwaltung, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt;
  • 25 bis 26 Pseudocode für ein weiteres erweitertes Speicherregistermodell, das das Konzept von quorumbasierten Schreiboperationen in mehrere aktive Konfigurationen umfasst, die aufgrund einer Neukonfiguration eines verteilten Segments innerhalb eines FAB-Systems vorhanden sein können, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 27 Pseudocode hoher Ebene zur Erweiterung des Speicherregistermodells auf die Migrationsebene innerhalb eines FAB-Systems, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 28 die hierarchische Gesamtstruktur von sowohl Steuerverarbeitung als auch Datenspeicherung innerhalb eines FAB-Systems, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt;
  • 29A bis 29C ein Zeitstempelproblem im Zusammenhang mit einer Migration von einem 4 + 2-Löschcodierredundanzschema zu einem 8 + 2-Löschcodierredundanzschema zur Verteilung eines bestimmten Segments;
  • 30 einen eines neuen Typs von Zeitstempeln, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 31A bis 31F eine Verwendung des neuen Typs von Zeitstempel, der ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, um eine Datenkonsistenz während einer SCHREIB-Operation in ein FAB-Segment, das über mehrere Bausteine verteilt ist, unter mehreren Redundanzschemata zu ermöglichen;
  • 32 Pseudocode für einen asynchronen Zeitstempelsammelprozess, der ein Ausführungsbeispiel der vorliegenden Erfindung darstellt; und
  • 33A bis 33F eine Zusammenfassung eines allgemeinen Verfahrens, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, für eine gestufte Einschränkung des Umfangs von Zeitstempeln innerhalb eines hierarchisch organisierten Verarbeitungssystems.
  • Verschiedene Ausführungsbeispiele der vorliegenden Erfindung verwenden hierarchische Zeitstempel, um ein Verarbeiten und Verwalten von Daten innerhalb von verteilten Systemen zu ermöglichen und um eine Abfallsammlung von nicht mehr benötigten Zeitstempeln zu ermöglichen. Ein Ausführungsbeispiel der vorliegenden Erfindung ist im Folgenden im Zusammenhang mit einer verteilten Massenspeichervorrichtung, die derzeit entwickelt wird, beschrieben. Der Kontext ist ziemlich komplex. In folgenden Unterabschnitten werden zuerst das verteilte Massenspeichersystem und verschiedene Verfahren, die durch Verarbeitungskomponenten des verteilten Massenspeichersystems verwendet werden, erörtert, um den Kontext zu liefern, in dem hierarchische Zeitstempel, die Ausführungsbeispiele der vorliegenden Erfindung darstellen, nachfolgend beschrieben werden. Wie es jedoch im Folgenden ausgeführt wird, können hierarchische Zeitstempel eine breitgefächerte Anwendbarkeit bei vielen anderen verteilten Verarbeitungssystemen finden.
  • Einführung in FAB
  • Die Architektur eines vereinigten Arrays von Bausteinen („FAB" = federated array of bricks) stellt einen neuen, in hohem Maße verteilten Lösungsansatz zur Massenspeicherung dar. 1, zeigt ein Diagramm hoher Ebene eines FAB-Massenspeichersystems gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Ein FAB-Massenspeichersystem, das nachfolgend als ein „FAB-System" bezeichnet wird, weist eine Anzahl von kleinen, diskreten Komponentendatenspeichersystemen oder Massenspeichervorrichtungen 102109 auf, die miteinander durch ein erstes Kommunikationsmedium 110 kommunizieren und die durch ein zweites Kommunikationsmedium 114 Anforderungen von einer Anzahl von entfernten Hostcomputern 112113 empfangen und Antworten an dieselben senden können. Jedes diskrete Komponentendatenspeichersystem 102109 kann als ein „Baustein" bezeichnet werden. Ein Baustein kann eine Schnittstelle umfassen, durch die Anforderungen von entfernten Hostcomputern empfangen werden können und Antworten auf die empfangenen Anforderungen zurück zu den entfernten Hostcomputern gesendet werden können. Ein beliebiger Baustein eines FAB-Systems kann Anforderungen von Hostcomputern empfangen und auf Anforderungen von Hostcomputern antworten. Ein Baustein eines FAB-Systems übernimmt eine Koordinatorrolle bezüglich irgendeiner bestimmten Anforderung und koordiniert Operationen von allen Bausteinen, die am Antworten auf die bestimmte Anforderung beteiligt sind, und ein beliebiger Baustein in dem FAB-System kann eine Koordinatorrolle bezüglich einer gegebenen Anforderung übernehmen. Ein FAB-System ist deshalb ein Typ von in hohem Maße softwareimplementiertem, symmetrischem, verteiltem Rechensystem. Bei bestimmten alternativen Ausführungsbeispielen kann ein einziges Netz sowohl zum Verbinden von Bausteinen als auch zum Verbinden des FAB-Systems mit entfernten Hostcomputern verwendet werden. Bei anderen alternativen Ausführungsbeispielen können mehr als zwei Netze verwendet werden.
  • 2 zeigt ein Diagramm hoher Ebene eines exemplarischen FAB-Bausteins gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Der FAB-Baustein, der in 2 veranschaulicht ist, umfasst 12 SATA-Plattenlaufwerke 202213, die mit einem Platten-I/O(E/A)-Prozessor 214 eine Schnittstelle bilden. Der Platten-I/O-Prozessor 214 ist durch einen oder mehr Hochgeschwindigkeitsbusse 216 mit einer zentralen Brückenvorrichtung 218 verbunden. Die zentrale Brücke 218 ist wiederum mit ein oder mehr Allgemeinprozessoren 220, einem Host-I/O-Prozessor 222, einem Zwischenbaustein-I/O-Prozessor 22 und ein oder mehr Speichern 226228 verbunden. Der Host-I/O-Prozessor 222 liefert eine Kommunikationsschnittstelle mit dem zweiten Kommunikationsmedium (114 in 1), durch die der Baustein mit entfernten Hostcomputern kommuniziert. Der Zwischenbaustein-I/O-Prozessor 224 liefert eine Kommunikationsschnittstelle mit dem ersten Kommunikationsmedium (110 in 1), durch die der Baustein mit anderen Bausteinen des FAB kommuniziert. Die ein oder mehr Allgemeinprozessoren 220 führen ein Steuerprogramm aus, neben vielen Aufgaben und Zuständigkeiten zum Verarbeiten von Anforderungen von entfernten Hostcomputern und entfernten Bausteinen, Verwalten von Zustandsinformationen, die in den ein oder mehr Speichern 226228 und auf Speichervorrichtungen 202213 gespeichert sind, und zum Verwalten einer Datenspeicherung und Datenkonsistenz innerhalb des Bausteins. Die ein oder mehr Speicher dienen als ein Cache-Speicher für Daten sowie ein Speicherort für verschiedene Entitäten, einschließlich Zeitstempel und Datenstrukturen, die durch Steuerprozesse verwendet werden, die einen Zugriff auf Daten steuern, die innerhalb des FAB-Systems gespeichert sind, und die Daten innerhalb des FAB-Systems in einem konsistenten Zustand unterhalten. Die Speicher umfassen normalerweise sowohl flüchtige als auch nicht-flüchtige Speicher. In der folgen den Erörterung kann auf die ein oder mehr Allgemeinprozessoren, die ein oder mehr Speicher und andere Komponenten, von denen eine oder mehr anfangs als enthalten erwähnt sind, im Singular Bezug genommen werden, um ein Wiederholen des Ausdrucks „ein oder mehr" zu vermeiden.
  • Bei bestimmten Ausführungsbeispielen der vorliegenden Erfindung sind alle Bausteine in einem FAB im Wesentlichen identisch, wobei die gleichen Steuerprogramme ausgeführt werden, im Wesentlichen die gleichen Datenstrukturen und Steuerinformationen innerhalb ihrer Speicher 226 und Massenspeichervorrichtungen 202213 unterhalten werden und Standardschnittstellen durch die I/O-Prozessoren mit Hostcomputern, mit anderen Bausteinen innerhalb des FAB und mit den internen Plattenlaufwerken geliefert werden. Bei diesen Ausführungsbeispielen der vorliegenden Erfindung können sich Bausteine innerhalb des FAB leicht bezüglich Versionen der Steuerprogramme, spezifischer Modelle und Fähigkeiten von internen Plattenlaufwerken, Versionen der verschiedenen Hardware-Komponenten und anderer derartiger Variationen voneinander unterscheiden. Schnittstellen und Steuerprogramme sind sowohl zur Rückwärts- als auch zur Vorwärtskompatibilität konzipiert, um zu ermöglichen, dass derartige Variationen innerhalb des FAB toleriert werden.
  • Jeder Baustein kann auch zahlreiche andere Komponenten enthalten, die in 2 nicht gezeigt sind, einschließlich ein oder mehr Leistungsversorgungen, Kühlsysteme, Steuerfelder oder anderer externer Steuerschnittstellen, Standarddirektzugriffsspeicher und anderer derartiger Komponenten. Bausteine sind relativ einfache Vorrichtungen, die im Allgemeinen aus Kommoditätskomponenten hergestellt werden, einschließlich Kommoditäts-I/O-Prozessoren und Plattenlaufwerken. Ein Baustein, der 12 100-GB-SATA-Plattenlaufwerke verwendet, liefert 1,2 Terabyte Speicherkapazität, von denen nur ein Bruchteil zur internen Verwendung benötigt wird. Ein FAB kann Hunderte oder Tausende von Bausteinen aufweisen, wobei große FAB-Systeme, bei denen derzeit die Vorstellung vorherrscht, dass dieselben zwischen 5.000 und 10.000 Bausteinen enthalten, Petabyte-(„PB"-)Speicherkapazitäten liefern. Somit liefern FAB-Massenspeichersysteme eine enorme Zunahme an Speicherkapazität und Kosteneffizienz gegenüber aktuellen Plattenarrays und netzangeschlossenen Speichervorrichtungen.
  • Redundanz
  • Große Massenspeichersysteme, wie z. B. FAB-Systeme, liefern nicht nur massive Speicherkapazitäten, sondern liefern und verwalten auch eine redundante Speicherung, so dass, wenn Teile von gespeicherten Daten aufgrund von einem Bausteinfehler, einem Plattenlaufwerksfehler, einem Fehler von bestimmten Zylindern, Spuren, Sektoren oder Blöcken bei Plattenlaufwerken, Fehlern von elektronischen Komponenten oder anderen Fehlern verloren gehen, die verlorenen Daten nahtlos und automatisch aus redundanten Daten wiedergewonnen werden können, die durch die Massenspeichersysteme großen Maßstabs gespeichert und verwaltet werden, ohne ein Eingreifen von Hostcomputern oder ein manuelles Eingreifen von Benutzern. Für wichtige Datenspeicheranwendungen, einschließlich Datenbanksysteme und für ein Unternehmen wichtige Daten, werden oft zwei oder mehr Massenspeichersysteme großen Maßstabs verwendet, um mehrere geographisch gestreute Instanzen der Daten zu speichern und zu unterhalten, was eine Redundanz höherer Ebene liefert, so dass selbst fatale Ereignisse nicht zu einem nicht-wiederherstellbaren Datenverlust führen.
  • Bei bestimmten Ausführungsbeispielen der vorliegenden Erfindung unterstützen FAB-Systeme automatisch zumindest zwei unterschiedliche Klassen von Redundanz niedrigerer Ebene. Die erste Klasse von Redundanz umfasst ein Bausteinebenenspiegeln oder in anderen Worten ein Speichern von mehreren diskreten Kopien von Datenobjekten an zwei oder mehr Bausteinen, so dass ein Versagen eines Bausteins nicht zu einem nicht-wiederherstellbaren Datenverlust führt. Die 34 veranschaulichen das Konzept einer Datenspiegelung. 3 zeigt ein Datenobjekt 302 und eine logische Darstellung der Inhalte von drei Bausteinen 304306 gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Das Datenobjekt 302 weist 15 sequentielle Dateneinheiten auf, wie z. B. eine Dateneinheit 308, die in 3 mit „1" bis „15" nummeriert sind. Ein Datenobjekt kann ein Volumen, eine Datei, eine Datenbank oder ein beliebiger Typ von Datenobjekt sein, und Dateneinheiten können Blöcke, Seiten oder andere derartige Gruppen von aufeinanderfolgend adressierten Speicherorten sein. 4 zeigt eine dreifach spiegelnde redundante Speicherung des Datenobjekts 302 bei den drei Bausteinen 304306 gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Jeder der drei Bausteine enthält Kopien von allen 15 der Dateneinheiten innerhalb des Datenobjekts 302. Bei vielen Darstellungen einer Spiegelung wird die Anordnung der Dateneinheiten so gezeigt, dass dieselbe bei allen Spiegelkopien des Datenobjekts identisch ist. In der Realität kann ein Baustein jedoch entscheiden, Dateneinheiten irgendwo auf seinen internen Plattenlaufwerken zu speichern. In 4 sind die Kopien der Dateneinheiten innerhalb des Datenobjekts 302 in unterschiedlichen Reihenfolgen und Positionen innerhalb der drei unterschiedlichen Bausteine gezeigt. Da jeder der drei Bausteine 304306 eine vollständige Kopie des Datenobjekts speichert, ist das Datenobjekt wiederherstellbar, selbst wenn zwei der drei Bausteine ausfallen. Die Wahrscheinlichkeit eines Versagens eines einzigen Bausteins ist im Allgemeinen relativ gering, und die kombinierte Wahrscheinlichkeit eines Versagens aller drei Bausteine eines Dreibausteinspiegels ist im Allgemeinen extrem gering. Im Allgemeinen kann ein FAB-System Millionen, Milliarden, Billionen oder mehr unterschiedliche Datenobjekte speichern, und jedes unterschiedliche Datenobjekt kann getrennt über eine unterschiedliche Anzahl von Bausteinen innerhalb des FAB-Systems gespiegelt werden. Zum Beispiel kann ein Datenobjekt über Bausteine 1, 7, 8 und 10 gespiegelt wer den, während ein weiteres Datenobjekt über Bausteine 4, 8, 13, 17 und 20 gespiegelt werden kann.
  • Eine zweite Redundanzklasse wird als „Löschcodier"-Redundanz bezeichnet. Eine Löschcodierredundanz ist etwas komplizierter als eine Spiegelredundanz. Eine Löschcodierredundanz verwendet oft Reed-Solomon-Codiertechniken, die zur Fehlersteuercodierung von Kommunikationsnachrichten und anderen digitalen Daten, die durch rauschbehaftete Kanäle übertragen werden, verwendet werden. Diese Fehlersteuercodiertechniken sind spezifische Beispiele für binäre lineare Codes.
  • 5 zeigt ein Diagramm hoher Ebene, das eine Löschcodierredundanz zeigt. In 5 ist ein Datenobjekt 502, das n = 4 Dateneinheiten aufweist, über eine Anzahl von Bausteinen 504509 verteilt, die größer als n ist. Die ersten n Bausteine 504506 speichern jeder eine der n Dateneinheiten. Die letzten m = 2 Bausteine 508509 speichern Prüfsummen- oder Paritätsdaten, die von dem Datenobjekt berechnet werden. Das Löschcodierredundanzschema, das in 5 gezeigt ist, ist ein Beispiel eines m + n-Löschcodierredundanzschemas. Da n = 4 und m = 2, wird das spezifische m + n-Löschcodierredundanzschema, das in 5 dargestellt ist, als ein „4 + 2"-Redundanzschema bezeichnet. Viele andere Löschcodierredundanzschematas sind möglich, einschließlich 8 + 2, 3 + 3 und andere Schemata. Im Allgemeinen ist m kleiner oder gleich n. Solange m oder weniger der m + n Bausteine versagen, unabhängig davon, ob die ausgefallenen Bausteine Daten- oder Paritätswerte enthalten, kann das gesamte Datenobjekt wiederhergestellt werden. Zum Beispiel kann bei dem Löschcodierschema, das in 5 gezeigt ist, das Datenobjekt 502 trotz Fehlern eines beliebigen Paars von Bausteinen, wie z. B. Bausteine 505 und 508, ganz wiederhergestellt werden.
  • 6 zeigt ein exemplarisches 3 + 1-Löschcodierredundanzschema, das die gleichen Darstellungskonventionen verwendet, wie sie in den 3 und 4 verwendet werden. In 6 ist das 15-Dateneinheiten-Datenobjekt 302 über vier Bausteine 604607 verteilt. Die Dateneinheiten sind streifenartig über die vier Platten angeordnet, wobei jede Dreidateneinheit des Datenobjekts sequentiell über Bausteine 604606 verteilt ist und eine Prüfsummen- oder Paritätsdateneinheit für den Streifen an Baustein 607 platziert ist. Der erste Streifen, der aus den drei Dateneinheiten 608 besteht, ist in 6 durch Pfeile 610612 angezeigt. Obwohl in 6 Prüfsummendateneinheiten alle an einem einzigen Baustein 607 angeordnet sind, können die Streifen unterschiedlich bezüglich der Bausteine ausgerichtet sein, wobei jeder Baustein irgendeinen Teil der Prüfsummen- oder Paritätsdateneinheiten enthält.
  • Eine Löschcodierredundanz wird im Allgemeinen durch ein mathematisches Berechnen von Prüfsummen- oder Paritätsbits für jedes Byte, Wort oder Langwort einer Dateneinheit ausgeführt. Somit werden m Paritätsbits aus n Datenbits berechnet, wobei n = 8, 16 oder 32 oder eine höhere Potenz von Zwei. Zum Beispiel werden bei einem 8 + 2-Löschcodierredundanzschema zwei Paritätsprüfbits für jedes Byte von Daten erzeugt. Somit erzeugen bei einem 8 + 2-Löschcodierredundanzschema acht Dateneinheiten von Daten zwei Dateneinheiten von Prüfsummen- oder Paritätsbits, die alle in einem Zehn-Dateneinheiten-Streifen enthalten sein können. In der folgenden Erörterung bezieht sich der Begriff „Wort" auf eine Dateneinheitsgranularität, mit der ein Codieren erfolgt, und kann von Bits zu Langwörtern oder Dateneinheiten größerer Länge variieren. Bei Datenspeicheranwendungen kann die Dateneinheitsgranularität normalerweise 512 Bytes oder mehr betragen.
  • Das i-te Prüfsummenwort ci kann in Abhängigkeit von allen n Datenwörtern durch eine Funktion Fi(d1, d2, ..., dn) berechnet werden, bei der es sich um eine lineare Kombination jedes der Datenwörter dj multipliziert mit einem Koeffizienten fi,j handelt, und zwar folgendermaßen:
    Figure 00140001
  • In Matrixschreibweise wird aus der Gleichung:
    Figure 00140002
    oder: C = FD
  • Bei der Reed-Solomon-Technik wird die Funktion F ausgewählt, um eine m × n-Vandermonde-Matrix zu sein, mit Elementen fi,j gleich ji-l, oder:
    Figure 00140003
  • Falls ein bestimmtes Wort dj modifiziert wird, um einen neuen Wert d'j aufzuweisen, dann kann ein neues i-tes Prüfsummenwort c'i berechnet werden als: c'i = ci + fi,j(d'j-dj)oder: c' = C + FD' – FD = C + F(D' – D)
  • Somit werden neue Prüfsummenwörter ohne weiteres aus den vorangegangenen Prüfsummenwörtern und einer einzigen Spalte der Matrix F berechnet.
  • Verlorengegangene Wörter aus einem Streifen werden durch eine Matrixinversion wiedergewonnen. Eine Matrix A und ein Spaltenvektor E sind folgendermaßen aufgebaut:
    Figure 00150001
  • Es ist ohne weiteres ersichtlich, dass: AD = Eoder:
    Figure 00160001
  • Beliebige m Zeilen der Matrix A und entsprechende Zeilen des Vektors E können entfernt werden, um modifizierte Matrizen A' und E' zu erzeugen, wobei A' eine Quadratmatrix ist. Dann kann der Vektor D, der die Originaldatenwörter darstellt, durch eine Matrixinversion folgendermaßen wiederhergestellt werden: A'D = E' D = A'-1E'
  • Somit können, wenn m oder weniger Daten- oder Prüfsummenwörter gelöscht werden oder verloren gehen, m Daten- oder Prüfsummenwörter einschließlich der m oder weniger verlorengegangenen Daten- oder Prüfsummenwörter aus dem Vektor E entfernt werden, und entsprechende Zeilen können aus der Matrix A entfernt werden, und die ursprünglichen Daten- oder Prüfsummenwörter können durch eine Matrixinversion wiederhergestellt werden, wie es im Vorhergehenden gezeigt ist.
  • Während eine Matrixinversion ohne weiteres für reelle Zahlen durchgeführt wird, wobei bekannte arithmetische Reellzahlenoperationen einer Addition, Subtraktion, Multiplikation und Division verwendet werden, sind diskretwertige Matrix- und Spaltenelemente, die zur Digitalfehlersteuercodierung verwendet werden, zur Matrixmultiplikation nur geeignet, wenn die diskreten Werte ein arithmetisches Feld bilden, das unter den entsprechenden diskreten arithmetischen Operationen geschlossen ist. Im Allgemeinen werden Prüfsummenbits für Wörter der Länge w berechnet:
    Figure 00170001
  • Ein w-Bit-Wort kann Beliebige von 2w unterschiedlichen Werten aufweisen. Ein mathematisches Feld, das als ein Galois-Feld bekannt ist, kann hergestellt werden, um 2w Elemente aufzuweisen. Die arithmetischen Operationen für Elemente des Galois-Feldes sind zweckmäßigerweise: a ± b = a ⊕ b a·b = antilog[log(a) + log(b)] a ÷ b = antilog[log(a) – log(b)]wobei Tabellen von Logs und Antilogs für die Galois-Feld-Elemente unter Verwendung eines Fortpflanzungsverfahrens berechnet werden können, das ein primitives Polynom des Grades w umfasst.
  • Spiegelredundanzschemata sind vom Konzept her einfacher und eignen sich ohne weiteres für verschiedene Neukonfigurationsoperationen. Falls z. B. ein Baustein eines Drei-Baustein-Dreifachspiegelredundanzschemas ausfällt, können die verbleibenden beiden Bausteine als ein Zwei-Baustein-Spiegelpaar unter einem Doppelspiegelredundanzschema neu konfiguriert werden. Alternativ dazu kann ein neuer Baustein zum Ersetzen des ausgefallenen Bausteins ausgewählt werden, und Daten können von einem der überlebenden Bausteine zu dem neuen Baustein kopiert werden, um das Drei-Baustein-Dreifachspiegelredundanzschema wiederherzustellen. Im Gegensatz dazu ist eine Neukonfiguration von Löschcodierredundanzschemata nicht ganz so einfach. Zum Beispiel hängt jedes Prüfsummenwort innerhalb eines Streifens von allen Datenwörtern des Streifens ab. Falls es erwünscht ist, ein 4 + 2-Löschcodierredundanzschema zu einem 8 + 2- Löschcodierredundanzschema umzuwandeln, können alle Prüfsummenbits neu berechnet werden, und die Daten können neu über die zehn Bausteine verteilt werden, die für das neue 8 + 2-Schema verwendet werden, anstatt die relevanten Inhalte der sechs Bausteine des 4 + 2-Schemas zu neuen Orten zu kopieren. Außerdem kann sogar eine Veränderung der Streifengröße für das gleiche Löschcodierschema ein Neuberechnen aller Prüfsummendateneinheiten und ein Neuverteilen der Daten über neue Bausteinorte umfassen. In den meisten Fällen umfasst ein Wechsel zu einem Löschcodierschema eine komplette Herstellung einer neuen Konfiguration basierend auf Daten, die von der alten Konfiguration wiedergewonnen werden, anstatt in dem Fall von Spiegelredundanzschemata ein Löschen von einem von mehreren Bausteinen oder ein Hinzufügen eines Bausteins, wobei Daten von einem ursprünglichen Baustein zu dem neuen Baustein kopiert werden. Spiegeln ist im Allgemeinen hinsichtlich des Platzes weniger effizient als Löschcodieren, dasselbe ist jedoch hinsichtlich Zeit und Aufwand von Verarbeitungszyklen effizienter.
  • FAB-Speichereinheiten
  • Wie im Vorhergehenden erörtert, kann ein FAB-System eine enorme Menge an Datenspeicherplatz liefern. Der gesamte Speicherplatz kann logisch in hierarchische Dateneinheiten partitioniert sein, wobei eine Dateneinheit auf jeder hierarchischen Ebene, die nicht die niedrigste ist, logisch aus Dateneinheiten einer nächst-niedrigeren hierarchischen Ebene zusammengesetzt ist. Die logischen Dateneinheiten können auf einen physischen Speicherplatz innerhalb von ein oder mehr Bausteinen abgebildet werden.
  • 7 veranschaulicht die hierarchischen Dateneinheiten, die bei einer aktuellen FAB-Implementierung verwendet werden, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen. Die Dateneinheit höchster Ebene wird als eine „virtuelle Platte" bezeichnet, und der gesamte verfügbare Speicherplatz innerhalb eines FAB-Systems kann so betrachtet werden, dass derselbe in ein oder mehr virtuelle Platten partitioniert ist. In 7 ist der gesamte Speicherplatz 702 so gezeigt, dass derselbe in fünf virtuelle Platten partitioniert ist, einschließlich einer ersten virtuellen Platte 704. Eine virtuelle Platte kann konfiguriert sein, um eine beliebige Größe aufzuweisen, die größer oder gleich der Größe der nächst-niedrigeren hierarchischen Dateneinheit ist, die als ein „Segment" bezeichnet wird. In 7 ist die dritte virtuelle Platte 706 so gezeigt, dass dieselbe logisch in eine Anzahl von Segmenten 708 partitioniert ist. Die Segmente können aufeinanderfolgend geordnet sein und zusammen einen linearen, logischen Speicherplatz bilden, der einer virtuellen Platte entspricht. Wie es in 7 gezeigt ist, kann jedes Segment, wie z. B. Segment 4 (710 in 7), gemäß einem bestimmten Redundanzschema über eine Anzahl von Bausteinen 712 verteilt sein. Das Segment stellt die Granularität einer Datenverteilung über Bausteine dar. Zum Beispiel kann in 7 das Segment 4 (710 in 7) gemäß einem 8 + 2-Löschcodierredundanzschema über Bausteine 1–9 und 13 verteilt sein. Somit kann Baustein 3 ein Achtel der Segmentdaten speichern, und Baustein 2 kann die Hälfte der Paritätsdaten für das Segment unter dem 8 + 2-Löschcodierredundanzschema speichern, falls Paritätsdaten getrennt von den Segmentdaten gespeichert werden. Jeder Baustein, wie z. B. Baustein 7 (714 in 7) kann sich entscheiden, ein Segment oder einen Segmentabschnitt über Beliebige der internen Platten des Bausteins 716 oder in einem Cache-Speicher zu verteilen. Wenn ein Segment oder ein Segmentabschnitt auf einer internen Platte oder in einem Cache-Speicher gespeichert ist, wird das- bzw. derselbe logisch so betrachtet, dass das- bzw. derselbe eine Anzahl von Seiten, wie z. B. Seite 718, die in 7 gezeigt ist, aufweist, wobei jede Seite wiederum eine aufeinanderfolgende Sequenz von Blöcken aufweist, wie z. B. Block 720, der in 7 gezeigt ist. Der Block (z. B. 720 in 7) ist die Dateneinheitsebene, der Zeitstempel zugeordnet sind, die gemäß einem Speicherregisterdatenkonsistenzsystem verwaltet werden, das im Folgenden erörtert ist. Bei einem FAB-System, das sich in Entwicklung befindet, weisen Segmente 256 aufeinanderfolgende Megabyte auf, Seiten weisen acht Megabyte auf, und Blöcke weisen 512 Byte auf.
  • Die 8A8D veranschaulichen eine hypothetische Abbildung von logischen Dateneinheiten auf Bausteine und interne Platten eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Die 8A8D verwenden alle die gleichen Darstellungskonventionen, die anschließend unter Bezugnahme auf 8A erörtert sind. Das FAB-System ist als 16 Bausteine 802817 dargestellt. Jeder Baustein ist so gezeigt, dass derselbe vier interne Plattenlaufwerke enthält, wie z. B. die internen Plattenlaufwerke 820823 innerhalb des Bausteins 802. In den 8A8D ist die logische Dateneinheit, die dargestellt ist, auf der linken Seite der Figur gezeigt. Bei der logischen Dateneinheit, die in 8A dargestellt ist, handelt es sich um den gesamten verfügbaren Speicherplatz 826. Eine Schattierung innerhalb der Quadratdarstellungen von internen Plattenlaufwerken zeigt Regionen der internen Plattenlaufwerke an, auf die die logische Dateneinheit, die in der Figur dargestellt ist, abgebildet wird. Zum Beispiel ist in 8A der gesamte Speicherplatz 826 so gezeigt, dass derselbe über den gesamten Platz abgebildet wird, der auf allen internen Plattenlaufwerken aller Bausteine verfügbar ist. Es sei darauf hingewiesen, dass eine bestimmte, geringe Menge an internem Speicherplatz zu Steuer- und Verwaltungszwecken durch die Steuerlogik jedes Bausteins reserviert sein kann, aber dieser interne Platz ist in 8A nicht gezeigt. Auch können sich Daten in einem Cache-Speicher in einem Direktzugriffsspeicher befinden, bevor dieselben auf eine Platte geschrieben werden, aber der Speicherplatz wird für die Zwecke der 8A8D so betrachtet, dass derselbe nur vier interne Platten für jeden Baustein aufweist, um die Darstellung zu vereinfachen.
  • 8B zeigt eine exemplarische Abbildung einer Virtuellplattenlogikdateneinheit 828 auf den Speicherplatz des FAB-Systems 800. 8B veranschaulicht, dass eine virtuelle Platte auf Abschnitte von vielen oder sogar allen internen Platten innerhalb von Bausteinen des FAB-Systems 800 abgebildet werden kann. 8C veranschaulicht eine exemplarische Abbildung einer Virtuellplattenbildlogikdateneinheit 830 auf den internen Speicherplatz des FAB-Systems 800. Eine Virtuellplattenbildlogikdateneinheit kann auf einen großen Teil des internen Speicherplatzes einer erheblichen Anzahl von Bausteinen innerhalb eines FAB-Systems abgebildet werden. Die Virtuellplattenbildlogikdateneinheit stellt eine Kopie oder ein Bild einer virtuellen Platte dar. Virtuelle Platten können als zwei oder mehr Virtuellplattenbilder reproduziert werden, jedes Virtuellplattenbild in einer diskreten Partition von Bausteinen innerhalb eines FAB-Systems, um einen hohen Pegel an Redundanz zu liefern. Eine Virtuellplattenreproduktion ermöglicht z. B., dass virtuelle Platten über geographisch getrennte, diskrete Partitionen der Bausteine innerhalb eines FAB-Systems reproduziert werden, so dass eine Katastrophe großen Maßstabs an einem geographischen Ort nicht zu einem nicht-wiederherstellbaren Verlust von Virtuellplattendaten führt.
  • 8D veranschaulicht eine exemplarische Abbildung eines Segments 832 auf den internen Speicherplatz innerhalb von Bausteinen eines FAB-Systems 800. Wie es in 8D ersichtlich ist, kann ein Segment auf viele kleine Abschnitte der internen Platten eines relativ kleinen Teilsatzes der Bausteine innerhalb eines FAB-Systems abgebildet werden. Wie es im Vorhergehenden erörtert ist, handelt es sich bei einem Segment bei vielen Ausführungsbeispielen der vorliegenden Erfindung um die Logikdateneinheitsebene zur Verteilung von Daten gemäß Redundanzschemata niedrigerer Ebene, einschließlich Löschcodierschemata und Spiegelschemata.
  • Falls somit keine Datenredundanz erwünscht ist, kann ein Segment auf ein einziges Plattenlaufwerk eines einzigen Bausteins abgebildet werden. Zu den meisten Zwecken werden Segmente jedoch zumindest auf zwei Bausteine gespiegelt. Wie es im Vorhergehenden erörtert ist, verteilt ein Baustein die Seiten eines Segments oder eines Abschnitts eines Segments unter seinen internen Platten gemäß verschiedener Überlegungen, einschließlich verfügbarem Platz, und einschließlich optimaler Verteilungen, um verschiedene Charakteristika von internen Plattenlaufwerken auszunutzen, einschließlich Kopfbewegungsverzögerungen, Drehverzögerungen, Zugriffshäufigkeit und andere Überlegungen.
  • 9 veranschaulicht die Logikdateneinheiten, die innerhalb eines FAB-Systems verwendet werden, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen. Der gesamte verfügbare Datenspeicherplatz 902 kann in virtuelle Platten 904907 partitioniert werden. Die virtuellen Platten werden wiederum, wenn dies erwünscht ist, zu mehreren Virtuellplattenbildern reproduziert. Zum Beispiel wird eine virtuelle Platte 904 zu den Virtuellplattenbildern 908910 reproduziert. Falls die virtuelle Platte nicht reproduziert wird, kann die virtuelle Platte so betrachtet werden, dass dieselbe ein einziges Virtuellplattenbild aufweist. Zum Beispiel entspricht die virtuelle Platte 905 dem einzigen Virtuellplattenbild 912. Jedes Virtuellplattenbild weist eine geordnete Sequenz von Segmenten auf. Zum Beispiel weist das Virtuellplattenbild 908 eine geordnete Liste von Segmenten 914 auf. Jedes Segment wird gemäß einem Redundanzschema über ein oder mehr Bausteine verteilt. Zum Beispiel wird in 9 ein Segment 916 gemäß einem 8 + 2-Löschcodierredundanzschema. über zehn Bausteine 918 verteilt. Als ein weiteres Beispiel ist das Segment 920 in 9 so gezeigt, dass dasselbe gemäß einem Dreifachspiegelredundanzschema über drei Bausteine 922 verteilt ist.
  • FAB-Datenzustandsbeschreibungsdatenstruktur
  • Wie es im Vorhergehenden erörtert wurde, kann jeder Baustein innerhalb eines FAB-Systems im Wesentlichen das gleiche Steuerprogramm ausführen, und jeder Baustein kann Anforderungen von entfernten Hostcomputern empfangen und auf dieselben antworten. Deshalb enthält jeder Baustein Datenstrukturen, die den Gesamtdatenzustand des FAB-Systems darstellen, bis hinunter zu, jedoch im Allgemeinen nicht einschließlich bausteinspezifischen Zustandsinformationen, die durch einzelne Bausteine geeignet verwaltet werden, in einem internen, flüchtigen Direktzugriffsspeicher, einem nicht-flüchtigen Speicher und/oder internem Plattenplatz, so ähnlich wie jede Zelle des menschlichen Körpers die gesamte DNA-codierte Architektur für den gesamten Organismus enthält. Der Gesamtdatenzustand umfasst die Größen und Orte der hierarchischen Dateneinheiten, die in 9 gezeigt sind, zusammen mit Informationen, die die Betriebszustände oder die Gesundheit von Bausteinen und die Redundanzschemata betreffen, unter denen Segmente gespeichert sind. Im Allgemeinen werden bausteinspezifische Datenzustandsinformationen, die die internen Seiten- und Blockadressen von Daten umfassen, die in einem Baustein gespeichert sind, nicht als ein Teil des Gesamtdatenzustands des FAB-Systems betrachtet.
  • 10A veranschaulicht die Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt und die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Die Datenstruktur ist im Allgemeinen hierarchisch, um die hierarchischen logischen Dateneinheiten zu spiegeln, die in dem vorangegangenen Teilabschnitt beschrieben sind. Auf der höchsten Ebene kann die Datenstruktur eine Virtuellplattentabelle 1002 umfassen, wobei jeder Eintrag derselben eine virtuelle Platte beschreibt. Jeder Virtuellplattentabelleneintrag („VDTE") kann auf eine oder mehr Virtuellplattenbild-(„VDI"-) Tabellen verweisen. Zum Beispiel verweist VDTE 1004 auf die VDI-Tabelle 1006 in 10A. Eine VDI-Tabelle kann einen Verweis auf einen Segmentkonfigurationsknoten („SCN") für jedes Segment des Virtuellplattenbildes umfassen. Mehrere VDI-Tabelleneinträge können auf einen einzigen SCN verweisen, um Speicher und Speicherplatz zu sparen, die der Datenstruktur zugeordnet sind. In 10A verweist der VDI-Tabelleneintrag 1008 auf den SCN 1010. Jeder SCN kann eine oder zwei Konfigurationsgruppen („cgrp") darstellen. Zum Beispiel verweist in 10A SCN 1010 auf cgrp 1012. Jede cgrp kann auf eine oder mehr Konfigurationen („cfg") verweisen. Zum Beispiel verweist in 10A cgrp 1014 auf cfg 1016. Schließlich kann jede cfg einem einzigen Anordnungsdatenstrukturelement zugeordnet sein. Zum Beispiel ist in 10A cfg 1016 dem Anordnungsdatenstrukturelement 1018 zugeordnet. Das Anordnungsdatenstrukturelement kann in der cfg enthalten sein, der dasselbe zugeordnet ist, oder dasselbe kann von der cfg getrennt sein und kann Anzeigen der Bausteine innerhalb der zugeordneten cfg enthalten. Die VDI-Tabelle kann ziemlich groß sein, und wirksame Speicherschemata können verwendet werden, um die VDI-Tabelle oder Teile der VDI-Tabelle in einem Speicher oder in einem nicht-flüchtigen Speichermedium effizient zu speichern. Zum Beispiel eine UNIX-artige i-Knotenstruktur mit einem Wurzelknoten, der direkt Verweise auf Segmente enthält, und mit zusätzlichen Knoten mit indirekten Verweisen oder doppelt indirekten Verweisen durch Knoten, die i-Knotenverweise auf zusätzliche Segmentverweise enthaltende Knoten enthalten. Andere wirksame Speicherschemata sind möglich.
  • Für sowohl die VDI-Tabelle als auch alle anderen Datenstrukturelemente der Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt, kann eine große Vielzahl von physischen Darstellungen und Speichertechniken verwendet werden. Als ein Beispiel können Datenstrukturelemente variabler Länge als Datenstrukturelemente fester Länge und ausreichender Größe, um eine maximal mögliche oder maximal erwartete Anzahl von Dateneinträgen zu enthalten, zugeteilt werden, oder dieselben können als verknüpfte Listen, Bäume oder andere derartige dynamische Datenstrukturelemente dargestellt werden, die in Echtzeit nach Bedarf neu dimensioniert werden können, um neue Daten aufzunehmen oder zur Entfernung von nicht mehr benötigten Daten. Knoten, die so dargestellt sind, dass dieselben in den baumartigen Darstellungen, die in den 10A und 11A11H gezeigt sind, getrennt und gesondert sind, können bei praktischen Implementierungen zusammen in Tabellen gespeichert werden, während Datenstrukturelemente, die so gezeigt sind, dass dieselben in Knoten oder Tabellen gespeichert sind, alternativ dazu in verknüpften Listen, Bäumen oder anderen komplexeren Datenstrukturimplementierungen gespeichert werden können.
  • Wie im Vorhergehenden erörtert, können VDIs verwendet werden, um eine Reproduktion von virtuellen Platten darzustellen. Deshalb kann die hierarchische Auffächerung von VDTEs zu VDIs so betrachtet werden, dass dieselbe eine Reproduktion von virtuellen Platten darstellt. SCNs können verwendet werden, um eine Migration eines Segments von einem Redundanzschema zu einem anderen zu ermöglichen. Es kann erwünscht oder notwendig sein, ein Segment, das gemäß einem 4 + 2-Löschcodierredundanzschema verteilt ist, zu einem 8 + 2-Löschcodierredundanzschema zu übertragen. Eine Migration des Segments umfasst ein Erzeugen eines Platzes für das neue Redundanzschema, der über eine potentiell neue Gruppe von Bausteinen verteilt ist, ein Synchronisieren der neuen Konfiguration mit der bestehenden Konfiguration und, wenn die neue Konfiguration mit der bestehenden Konfiguration synchronisiert ist, ein Entfernen der bestehenden Konfiguration. Somit kann eine Zeitperiode lang, während derer eine Migration erfolgt, ein SCN gleichzeitig auf zwei unterschiedliche cgrps verweisen, was einen Übergangszustand darstellt, der eine bestehende Konfiguration unter einem Redundanzschema und eine neue Konfiguration unter einem anderen Redundanzschema aufweist. Datenänderungs- und Datenzustandsänderungsoperationen, die bezüglich eines Segments in Migration ausgeführt werden, werden bezüglich beider Konfigurationen des Übergangszustands ausgeführt, bis eine volle Synchronisation erreicht ist, und die alte Konfiguration kann entfernt werden. Eine Synchronisation umfasst ein Einrichten von Quoren, was im Folgenden erörtert ist, für alle Blöcke in der neuen Konfiguration, ein Kopieren von Daten von der alten Konfiguration zu der neuen Konfiguration nach Bedarf und ein Ausführen aller Datenaktualisierungen, die benötigt werden, um Operationen auszuführen, die das Segment während einer Migration betreffen. In bestimmten Fällen wird der Übergangszustand aufrechterhalten, bis die neue Konfiguration vollständig hergestellt ist, da ein Versagen während der Herstellung der neuen Konfiguration die Konfiguration nicht-wiederherstellbar beschädigt zurücklassen würde. In anderen Fällen, einschließlich Fällen, die im Folgenden erörtert sind, wird nur eine minimale Synchronisation benötigt, da alle bestehenden Quoren in der alten Konfiguration in der neuen Konfiguration gültig bleiben.
  • Der Satz von Bausteinen, über den das Segment gemäß dem bestehenden Redundanzschema verteilt ist, kann den Satz von Bausteinen schneiden, über den das Segment gemäß dem neuen Redundanzschema verteilt ist. Deshalb können Blockadressen innerhalb des FAB-Systems ein zusätzliches Feld oder Objekt umfassen, das das bestimmte Redundanzschema oder die Rolle des Blocks beschreibt, falls das Segment gerade in Migration ist. Die Blockadressen unterscheiden deshalb zwischen zwei Blöcken des gleichen Segments, die unter zwei unterschiedlichen Redundanzschemata in einem einzigen Baustein gespeichert sind. 10B veranschaulicht eine Bausteinsegmentadresse, die eine Bausteinrolle umfasst, gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Die Blockadresse, die in 10B gezeigt ist, umfasst die folgenden Felder: (1) ein Bausteinfeld 1020, das die Identität des Bausteins enthält, der den Block enthält, auf den durch die Blockadresse verwiesen wird; (2) ein Segmentfeld 1022, das die Identität des Segments enthält, das den Block enthält, auf den durch die Blockadresse verwiesen wird; (3) ein Blockfeld 1024, das die Identität des Blocks innerhalb des Segments enthält, das in dem Segmentfeld identifiziert ist; (4) ein Feld 1026, das eine Anzeige des Redundanzschemas enthält, unter dem das Segment gespeichert ist; (5) ein Feld 1028, das eine Anzeige der Bausteinposition des Bausteins, der durch das Bausteinfeld identifiziert ist, innerhalb eines Löschcodierredundanzschemas enthält, falls das Segment unter einem Löschcodierredundanzschema gespeichert ist; und (6) ein Feld 1030, das eine Anzeige der Streifengröße des Löschcodierredundanzschemas enthält, falls das Segment unter einem Löschcodierredundanzschema gespeichert ist. Die Blockadresse kann zusätzliche Felder enthalten, je nach Bedarf, um die Position eines Blocks bei einer gegebenen FAB-Implementierung vollständig zu beschreiben. Im Allgemeinen bilden die Felder 1026, 1028 und 1030 zusammen eine Bausteinrolle, die die Rolle definiert, die von dem Baustein gespielt wird, der den Block speichert, auf den verwiesen wird. Eine Beliebige von verschiedenen numerischen Codierungen des Redundanzschemas, der Bausteinposition und der Streifengröße kann verwendet werden, um die Anzahl von Bits zu minimieren, die der Bausteinrollencodierung zugeordnet sind. Zum Beispiel können, falls die FAB-Implementierung nur eine Handvoll unterschiedlicher Streifengrößen für verschiedene Löschcodierredundanzschemata verwendet, Streifengrößen durch verschiedene Werte einer Aufzählung oder in anderen Worten durch ein relativ kleines Bitfeld dargestellt werden, das angemessen ist, um numerische Darstellungen der Handvoll von unterschiedlichen Streifengrößen zu enthalten.
  • Eine cgrp kann auf mehrere cfg-Datenstrukturelemente verweisen, wenn die cgrp gerade einer Neukonfiguration unterzogen wird. Eine Neukonfiguration kann eine Veränderung bei den Bausteinen umfassen, über die ein Segment verteilt ist, jedoch keinen Wechsel von einem Spiegelredundanzschema zu einem Löschcodierredundanzschema, von einem Löschcodierredundanzschema, wie z. B. 4 + 3, zu einem anderen Löschcodierredundanzschema, wie z. B. 8 + 2, oder andere derartige Veränderungen, die ein erneutes Herstellen oder ein Verändern der Inhalte von mehreren Bausteinen umfassen. Zum Beispiel kann eine Neukonfiguration ein Neukonfigurieren eines Dreifachspiegels, der auf den Bausteinen 1, 2 und 3 gespeichert ist, zu einem Doppelspiegel umfassen, der auf den Bausteinen 2 und 3 gespeichert ist.
  • Ein cfg-Datenstrukturelement beschreibt im Allgemeinen einen Satz von ein oder mehr Bausteinen, die zusammen ein bestimmtes Segment unter einem bestimmten Redundanzschema speichern. Ein cfg-Datenstrukturelement enthält im Allgemeinen Informationen über die Gesundheit oder den Betriebszustand der Bausteine innerhalb der Konfiguration, die durch das cfg-Datenstrukturelement dargestellt wird.
  • Ein Anordnungsdatenstrukturelement, wie z. B. die Anordnung bzw. das Layout 1018 in 10A, umfasst Identifizierer aller Bausteine, zu denen ein bestimmtes Segment unter einem bestimmten Redundanzschema verteilt ist. Ein Anordnungsdatenstrukturelement kann ein oder mehr Felder umfassen, die das bestimmte Redundanzschema beschreiben, unter dem das dargestellte Segment gespeichert ist, und kann zusätzliche Felder umfassen. Alle anderen Elemente der Datenstruktur, die in 10A gezeigt ist, können je nach Bedarf zusätzliche Felder und beschreibende Unterelemente umfassen, um eine Datenspeicherung und -unterhaltung gemäß dem Datenverteilungsschema, das durch die Datenstruktur dargestellt wird, zu erleichtern. Im unteren Teil von 10A werden Anzeigen geliefert zur Abbildungsbeziehung zwischen Datenstrukturelementen auf aufeinanderfolgenden Ebenen. Es sei darauf hingewiesen, dass mehrere unterschiedliche Segmenteinträge innerhalb von einer oder mehr VDI-Tabellen auf einen einzigen SCN-Knoten verweisen können, was eine Verteilung der unterschiedlichen Segmente über einen identischen Satz von Bausteinen gemäß dem gleichen Redundanzschema darstellt.
  • Die Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt und die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, ist eine dynamische Darstellung, die sich ständig ändert und die bewirkt, dass verschiedene Steuerroutinen zusätzliche Zustandsänderungen vornehmen, wenn Blöcke gespeichert werden, auf dieselben zugegriffen wird, und dieselben entfernt werden, Bausteine hinzugefügt und entfernt werden, Bausteine und Verbindungen ausfallen, Redundanzschemata und andere Parameter und Charakteristika des FAB-Systems durch Verwaltungsschnittstellen verändert werden und andere Ereignisse auftreten. Um einen großen Mehraufwand für Verriegelungsschemata zu vermeiden, um Operationen, die Teile der Datenstruktur betreffen, zu steuern und zu serialisieren, können alle Datenstrukturelemente von der cgrp-Ebene bis hinunter zu der Anordnungsebene als unveränderlich betrachtet werden. Wenn ihre Inhalte oder Verbindungen geändert werden müssen, werden neue Datenstrukturelemente mit den neuen Inhalten und/oder Verbindungen hinzugefügt, und Verweise auf die vorangegangenen Versionen werden schließlich gelöscht, anstatt die Datenstrukturelemente auf der cgrp-Ebene bis hinunter zu der Anordnungsebene zu verriegeln, zu ändern und zu entriegeln. Datenstrukturelemente, die auf diese Weise ersetzt werden, werden schließlich verwaist, nachdem die Daten, die durch die alten und die neuen Datenstrukturelemente dargestellt werden, durch ein Einrichten neuer Quoren und ein Ausführen jeglicher benötigter Aktualisierungen synchronisiert worden sind, und die verwaisten Datenstrukturelemente werden dann als Abfall gesammelt. Dieser Lösungsansatz kann dadurch zusammengefasst werden, dass auf die Datenstrukturelemente von der cgrp-Ebene bis hinunter zu der Anordnungsebene als „unveränderlich" Bezug genommen wird.
  • Ein weiterer Aspekt der Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt und die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, besteht darin, dass jeder Baustein sowohl eine speicherinterne oder teilweise speicherinterne Version der Datenstruktur zum raschen Zugriff auf die Ebenen und Datenstrukturelemente, auf die am häufigsten zugegriffen wird und am aktuellsten zugegriffen wurde, als auch eine permanente Version unterhalten kann, die auf einem nicht-flüchtigen Datenspeichermedium gespeichert ist. Die Datenelemente der speicherinternen Version der Datenstruktur können zusätzliche Felder umfassen, die in der permanenten Version der Datenstruktur nicht enthalten sind und im Allgemeinen nicht in den 10A, 11A11H und den nachfolgenden Figuren gezeigt sind. Zum Beispiel kann die speicherinterne Version Rückwärtsabbildungselemente, wie z. B. Zeigevorrichtungen, enthalten, die ein effizientes Durchlaufen der Datenstruktur in einer Richtung von unten nach oben, lateralen und komplexeren Richtungen zusätzlich zu dem Durchlaufen von oben nach unten ermöglichen, das durch die Abwärtsrichtungen der Zeigevorrichtungen angezeigt ist, die in den Figuren gezeigt sind. Bestimmte der Datenstrukturelemente der speicherinternen Version der Datenstruktur können auch Verweiszählfelder umfassen, um eine Abfallsammlung und eine Koordination von von einer Steuerroutine ausgeführten Operationen zu ermöglichen, die den Zustand des Bausteins verändern, der die Datenstruktur enthält.
  • Die 11A11H veranschaulichen verschiedene unterschiedliche Typen von Konfigurationsveränderungen, die sich in der Datenbeschreibungsdatenstruktur wiederspiegeln, die in 10A gezeigt ist, innerhalb eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Die 11A11D veranschaulichen einen einfachen Konfigurationswechsel, der eine Veränderung des Gesundheitsstatus eines Bausteins umfasst. In diesem Fall wird ein Segment, das gemäß einem Dreifachspiegelredundanzschema über die Bausteine 1, 2 und 3 verteilt ist (1102 in 11A), entweder neukonfiguriert, um über Folgendes verteilt zu sein: (1) Bausteine 1, 2 und 3 gemäß einem Dreifachspiegelschema (1104 in 11B) aufgrund einer Reparatur von Baustein 3; (2) Bausteine 1, 2 und 4 gemäß einem Dreifachspiegelschema (1106 in 11C) aufgrund eines Ausfalls von Baustein 3 und einer Ersetzung von Baustein 3 durch Reservespeicherplatz innerhalb von Baustein 4; oder (3) Bausteine 1 und 2 gemäß einem Doppelspiegelschema (1108 in 11D) aufgrund eines Ausfalls von Baustein 3. Wenn der Ausfall von Baustein 3 zunächst erfasst wird, wird eine neue cgrp 1112, die eine neue cfg 1110 mit der Bausteingesundheitsanzeige für den Baustein 3 1114 umfasst, die anzeigt, dass der Baustein 3 tot ist, sowie eine Kopie der anfänglichen cfg 1011 zu der Datenstruktur hinzugefügt, wobei die anfängliche cgrp, cfg und Anordnungsdarstellung des verteilten Segments ersetzt wird (1102 in 11). Die Anzeige des „toten Bausteins", die für den Gesundheitsstatus von Baustein 3 gespeichert ist, ist ein wichtiges Merkmal der Gesamtdatenstruktur, die in 10A gezeigt ist. Der Status eines „toten Bausteins" ermöglicht, dass eine Aufzeichnung einer vorangegangenen Teilnahme eines nachfolgend ausgefallenen Bausteins in der Datenstruktur bewahrt wird, um eine nachfolgende Synchronisation und andere Operationen zu ermöglichen, die eventuell von der früheren Teilnahme des ausgefallenen Bausteins Kenntnis haben müssen. Wenn jegliche Synchronisation zwischen der Anfangskonfiguration und der neuen Konfiguration abgeschlossen ist, einschließlich einem Einrichten neuer Quoren für Blöcke ohne aktuelle Quoren aufgrund des Ausfalls von Baustein 3, und eine neue Darstellung des verteilten Segments 1116 zu der Datenstruktur hinzugefügt ist, kann die vorübergehende 2-cfg-Darstellung des verteilten Segments, die die Datenstrukturelemente 11101112 aufweist, gelöscht und als Abfall gesammelt werden, was für die Endbeschreibung des verteilten Segments 1116 eine einzige cfg-Datenstruktur übrig lässt, die anzeigt, dass der Baustein 3 ausgefallen ist. In den 11A11D und in nachfolgenden Figuren ist nur der relevante Abschnitt der Datenstruktur gezeigt, wobei ein Verständnis angenommen wird, dass z. B. auf die cgrps, die in 11A gezeigt sind, durch einen oder mehr SCN-Knoten verwiesen wird.
  • Die 11B11D beschreiben drei unterschiedliche Ergebnisse für das Versagen von Baustein 3, wobei jede mit der Darstellung des verteilten Segments 1116 beginnt, das im unteren Teil von 11A gezeigt ist. Alle drei Ergebnisse umfassen einen vorübergehenden 2-cfg-Zustand, der als der mittlere Zustand der Datenstruktur gezeigt ist, der aus noch einer weiteren neuen cgrp gebildet ist, die auf zwei neue cfg-Datenstrukturelemente verweist, wobei eines eine Kopie der cfg von der Darstellung des verteilten Segments 1116 enthält, das im unteren Teil von 11A gezeigt ist, und das andere neue Bausteingesundheitsinformationen enthält. In 11B wird der Baustein 3 repariert, wobei der vorübergehende 2-cfg-Zustand 1118 sowohl Beschreibungen des ausgefallenen Zustands von Baustein 3 als auch eines reparierten Zustands von Baustein 3 umfasst. In 11C wird Baustein 3 durch Reservespeicherplatz auf Baustein 4 ersetzt, wobei der vorübergehende 2-cfg-Zustand 1120 sowohl Beschreibungen des ausgefallenen Zustands von Baustein 3 als auch einer neuen Konfiguration umfasst, bei der Baustein 3 durch Baustein 4 ersetzt ist. In 11D ist Baustein 3 komplett ausgefallen, und das Segment wird zu einer Verteilung über zwei Bausteine anstatt drei neu konfiguriert, wobei der vorübergehende 2-cfg-Zustand 1122 sowohl Beschreibungen des ausgefallenen Zustands von Baustein 3 als auch einer Doppelspiegelkonfiguration umfasst, bei der die Daten über die Bausteine 1 und 2 verteilt sind.
  • Die 11E11F veranschaulichen einen Verlust eines Bausteins, über den ein Segment gemäß einem 4 + 2-Löschcodierredundanzschema verteilt ist, und eine Verwendung eines neuen Bausteins anstatt des verlorenen Bausteins. Anfangs ist das Segment über die Bausteine 1, 4, 6, 9, 10 und 11 verteilt (1124 in 11E). Wenn ein Fehler bei Baustein 4 erfasst wird, erhält ein vorübergehender 2-cfg-Zustand 1126, einschließlich einer neuen cgrp, die auf zwei neue cfg-Datenstrukturelemente verweist, die neue cfg 1128, die anzeigt, dass der Baustein 4 ausgefallen ist. Die anfängliche Darstellung des verteilten Segments 1124 kann dann als Abfall gesammelt werden. Wenn eine Synchronisation der neuen Konfiguration mit einem ausgefallenen Baustein 4 bezüglich der alten Konfiguration ausgeführt wird, und eine Beschreibung des verteilten Segments 1132 hinzugefügt worden ist, wobei eine neue cgrp auf ein einziges cfg-Datenstrukturelement verweist, das anzeigt, dass der Baustein 4 ausgefallen ist, kann die vorübergehende 2-cfg-Darstellung 1126 als Abfall gesammelt werden. Dann wird eine neue Konfiguration hinzugefügt, wobei Reservespeicherplatz an Baustein 5 den Speicherplatz ersetzt, der vorhergehend durch Baustein 4 geliefert wurde, um einen vorübergehenden 2-cfg-Zustand 1133 zu erzeugen, wobei die vorangegangene Darstellung 1132 dann als Abfall gesammelt wird. Wenn eine Synchronisation der neuen Konfiguration abgeschlossen ist, wobei Baustein 5 Baustein 4 ersetzt, und eine endgültige neue Darstellung 1136 des verteilten Segments hinzugefügt ist, kann die vorübergehende 2-cfg-Darstellung 1134 als Abfall gesammelt werden.
  • Die beiden alternativen Konfigurationen bei vorübergehenden 2-cfg-Zuständen, wie z. B. die cfgs 1134 und 1135 in 11F, werden gleichzeitig in den vorübergehenden 2-cfg-Darstellungen, die in 11A11F gezeigt sind, während der Zeit unterhalten, in der die neue Konfiguration, z. B. cfg 1135 in 11F, mit der alten Konfiguration, z. B. cfg 1134 in 11F, synchronisiert wird. Während z. B. die Inhalte von Baustein 5 gemäß dem Matrixinversionsverfahren wiederhergestellt werden, das in einem vorangegangenen Unterabschnitt erörtert ist, werden neue SCHREIB-Operationen, die an das Segment ausgegeben werden, an beide Konfigurationen ausgegeben, um sicher zu sein, dass die SCHREIB-Operationen bei einem Quorum von Bausteinen in jeder Konfiguration erfolgreich abgeschlossen werden.
  • Quoren und andere Konsistenzmechanismen sind im Folgenden erörtert. Schließlich kann, wenn die neue Konfiguration 1135 vollständig rekonstruiert ist und der Datenzustand der neuen Konfiguration voll mit dem Datenzustand der alten Konfiguration 1114 synchronisiert ist, die alte Konfiguration durch ein Ersetzen der gesamten Darstellung 1133 mit einer neuen Darstellung 1136 entfernt werden, die nur die Endkonfiguration umfasst, wobei die vorübergehende 2-cfg-Darstellung dann als Abfall gesammelt wird. Indem bestehende Datenstrukturelemente auf der cgrp-Ebene und niedrigeren Ebenen nicht verändert werden, sondern indem stattdessen neue Datenstrukturelemente durch die 2-cfg-Übergangszustände hinzugefügt werden, kann die geeignete Synchronisation erledigt werden, und keine Verriegelungs- oder andere Serialisierungstechniken müssen verwendet werden, um einen Zugriff auf die Datenstruktur zu steuern. SCHREIB-Operationen veranschaulichen Operationen bei Daten, die den Datenzustand innerhalb von ein oder mehr Bausteinen verändern, und werden bei dieser Erörterung deshalb verwendet, um die Klasse von Operationen oder Aufgaben darzustellen, während deren Ausführung sich Datenkonsistenzprobleme aufgrund von Veränderungen des Datenzustands des FAB-Systems ergeben. Andere Operationen und Aufgaben können jedoch auch den Datenzustand verändern, und die im Vorhergehenden beschriebenen Techniken ermöglichen einen ordnungsgemäßen Übergang zwischen Konfigurationen, wenn derartige andere Operationen und Aufgaben bei einer FAB-Implementierung ausgeführt werden. In noch anderen Fällen kann es sein, dass die 2-cfg-Übergangsdarstellungen nicht benötigt werden, oder es kann sein, dass dieselben nicht erhebliche Perioden lang aufrechterhalten werden müssen, wenn alle Quoren für Blöcke unter einer Anfangskonfiguration im Wesentlichen unverändert und in der neuen Konfiguration gültig bleiben. Wenn z. B. ein doppelt gespiegeltes Segment aufgrund eines Versagens von einem von zwei Bausteinen zu einer nicht-redundanten Konfiguration neukonfiguriert wird, bleiben alle Quoren gültig, da eine Mehrheit von Bausteinen in der doppelt gespiegelten Konfiguration bezüglich des Werts jedes Blocks übereinstimmen musste, was bedeutet, dass alle Bausteine deshalb in der vorangegangenen Konfiguration übereinstimmten und keine Zweideutigkeiten oder gebrochene Quoren sich aus einem Verlust von einem der beiden Bausteine ergeben.
  • 11G veranschaulicht eine noch komplexere Konfigurationsveränderung, die eine Veränderung des Redundanzschemas umfasst, durch das ein Segment über Bausteine eines FAB-Systems verteilt ist. In dem Fall, der in 11G gezeigt ist, migriert ein Segment, das anfangs gemäß einer 4 + 2-Löschcodierredundanz über die Bausteine 1, 4, 6, 9, 10 und 11 verteilt ist (1140 in 11G), zu einem Dreifachspiegelredundanzschema über den Bausteinen 4, 13 und 18 (1142 in 11G). Ein Verändern des Redundanzschemas umfasst ein Unterhalten von zwei unterschiedlichen cgrp-Datenstrukturelementen 11441145, auf die von einem SCN-Knoten 1146 verwiesen wird, während die neue Konfiguration 1128 mit der vorangegangenen Konfiguration 1140 synchronisiert wird. Eine Steuerlogik auf der SCN-Ebene koordiniert ein Richten von SCHREIB-Operationen auf die beiden unterschiedlichen Konfigurationen, während die neue Konfiguration mit der alten Konfiguration synchronisiert wird, da die Techniken zum Sicherstellen einer übereinstimmenden Ausführung von SCHREIB-Operationen sich bei den beiden unterschiedlichen Redundanzschemata unterscheiden. Da SCN-Knoten verriegelt werden können oder ein Zugriff auf SCN-Knoten anderweitig wirksam gesteuert werden kann, kann der Zustand eines SCN-Knotens während einer Migration verändert werden. Da auf SCN-Knoten jedoch durch mehrere VDI-Tabelleneinträge verwiesen werden kann, wird im Allgemeinen ein neuer SCN-Knoten 1146 für die Migrationoperation zugeteilt.
  • Schließlich veranschaulicht 11H eine exemplarische Reproduktion einer virtuellen Platte innerhalb eines FAB-Systems. Die virtuelle Platte wird durch einen VDTE-Eintrag 1148 dargestellt, der auf eine einzige VDI-Tabelle 1150 verweist. Eine Reproduktion der virtuellen Platte umfasst ein Erzeugen einer neuen VDI-Tabelle 1152, auf die gleichzeitig von der VDTE 1132 zusammen mit der ursprünglichen VDI-Tabelle 1150 verwiesen wird. Eine Steuerlogik auf der Virtuellplattenebene innerhalb der Hierarchie der Steuerlogik koordiniert eine Synchronisation des neuen VDI mit dem vorangegangenen VDI, wobei während des Synchronisationsprozesses mit Feld-SCHREIB-Operationen fortgefahren wird, die die virtuelle Platte betreffen.
  • Die hierarchischen Ebenen innerhalb der Datenbeschreibungsdatenstruktur, die in 10A gezeigt ist, spiegeln Steuerlogikebenen innerhalb der Steuerlogik wider, die durch jeden Baustein in dem FAB-System ausgeführt wird. Die Steuerlogikebenen manipulieren die Datenstrukturelemente auf entsprechenden Ebenen in der Datenzustandsbeschreibungsdatenstruktur und Datenstrukturelemente unter dieser Ebene. Eine Anforderung, die von einem Hostcomputer empfangen wird, wird anfangs auf einer obersten Verarbeitungsebene empfangen und als eine oder mehr Operationen zur Ausführung durch die oberste Verarbeitungsebene zu einer geeigneten virtuellen Platte geleitet. Eine Steuerlogik auf der Virtuellplattenebene leitet dann die Operation an eine oder mehr VDIs, die eine oder mehr Reproduktionen der virtuellen Platte darstellen. Die Steuerlogik auf der VDI-Ebene bestimmt die Segmente in den ein oder mehr VDIs, zu denen die Operation geleitet wird, und leitet die Operation zu den geeigneten Segmenten. Die Steuerlogik auf der SCN-Ebene leitet die Operation zu geeigneten Konfigurationsgruppen, und die Steuerlogik auf der Konfigurationsgruppenebene leitet die Operationen zu geeigneten Konfigurationen. Die Steuerlogik auf der Konfigurationsebene leitet die Anforderungen an Bausteine der Konfiguration, und eine Internbausteinebenensteuerlogik innerhalb von Bausteinen bildet die Anforderungen auf bestimmte Seiten und Blöcke innerhalb der internen Plattenlaufwerke ab und koordiniert lokale, physische Zugriffsoperationen.
  • Speicherregistermodell
  • Das FAB-System kann ein Speicherregistermodell für quorumbasierte, verteilte LESE- und SCHREIB-Operationen verwenden. Ein Speicherregister ist eine verteilte Dateneinheit. Bei aktuellen FAB-Systemen werden Blöcke als Speicherregister behandelt.
  • Die 1218 veranschaulichen die Grundoperation eines verteilten Speicherregisters. Wie es in 12 gezeigt ist, handelt es sich bei dem verteilten Speicherregister 1202 bevorzugt um ein abstraktes oder virtuelles Register anstatt einem physischen Register, das in der Hardware einer bestimmten elektronischen Vorrichtung implementiert ist. Jeder Prozess, der auf einem Prozessor oder einem Computersystem 12041208 läuft, verwendet eine kleine Anzahl von Werten, die in einem dynamischen Speicher gespeichert sind und optional in einem nicht-flüchtigen Speicher gesichert sind, zusammen mit einer kleinen Anzahl von Routinen, die mit einem verteilten Speicherregister in Beziehung stehen, um das verteilte Speicherregister 1202 gemeinsam zu implementieren. Mindestens ein Satz von gespeicherten Werten und Routinen ist jeder Verarbeitungsentität zugeordnet, die auf das verteilte Speicherregister zugreift. Bei einigen Implementierungen kann jeder Prozess, der auf einem physischen Prozessor oder einem Mehrprozessorsystem läuft, seine eigenen gespeicherten Werte und Routinen verwalten, und bei anderen Implementierungen können Prozesse, die auf einem bestimmten Prozessor oder Mehrprozessorsystem laufen, die gespeicherten Werte und Routinen gemeinschaftlich verwenden, was vorsieht, dass das gemeinschaftliche Verwenden lokal koordiniert wird, um Probleme eines gleichzeitigen Zugriffs durch mehrere Prozesse, die auf dem Prozessor laufen, zu verhindern.
  • In 12 unterhält jedes Computersystem einen lokalen Wert 12101214 für das verteilte Speicherregister. Im Allgemeinen sind die lokalen Werte, die durch die unter schiedlichen Computersysteme gespeichert werden, normalerweise identisch und gleich dem Wert des verteilten Speicherregisters 1202. Gelegentlich kann es jedoch sein, dass die lokalen Werte nicht alle identisch sind, wie bei dem Beispiel, das in 12 gezeigt ist, wobei in diesem Fall, wenn eine Mehrheit der Computersysteme aktuell einen einzigen lokal gespeicherten Wert unterhält, dann der Wert des verteilten Speicherregisters der von der Mehrheit gehaltene Wert ist.
  • Ein verteiltes Speicherregister liefert zwei grundlegende Funktionen hoher Ebene für eine Anzahl von Kommunikationsprozessen, die gemeinsam das verteilte Speicherregister implementieren. Wie es in 13 gezeigt ist, kann ein Prozess eine LESE-Anforderung 1302 zu dem verteilten Speicherregister 1202 leiten. Falls das verteilte Speicherregister aktuell einen gültigen Wert hält, wie es durch den Wert „B" innerhalb des verteilten Speicherregisters 1202 in 14 gezeigt ist, wird der aktuelle, gültige Wert an den anfordernden Prozess zurückgesendet 1402. Wie es in 15 gezeigt ist, wird jedoch, wenn das verteilte Speicherregister 1202 derzeit keinen gültigen Wert enthält, der Wert NULL 1502 zu dem anfordernden Prozess zurückgesendet. Der Wert NULL ist ein Wert, bei dem es sich nicht um einen gültigen Wert handeln kann, der innerhalb des verteilten Speicherregisters gespeichert ist.
  • Ein Prozess kann auch einen Wert in das verteilte Speicherregister schreiben. In 16 leitet ein Prozess eine SCHREIBEN-Nachricht 1602 zu dem verteilten Speicherregister 1202, wobei die SCHREIBEN-Nachricht 1602 einen neuen Wert „X" umfasst, der in das verteilte Speicherregister 1202 geschrieben werden soll. Falls der Wert, der an das verteilte Speicherregister gesendet wird, erfolgreich den Wert überschreibt, der aktuell in dem verteilten Speicherregister gespeichert ist, wie es in 17 gezeigt ist, wird ein Boolescher Wert „WAHR" an den Prozess zurückgesendet 1702, der die SCHREIB-Anforderung an das verteilte Spei cherregister geleitet hat. Ansonsten schlägt, wie es in 18 gezeigt ist, die SCHREIB-Anforderung fehl, und ein Boolescher Wert „FALSCH" wird an den Prozess zurückgesendet 1802, der die SCHREIB-Anforderung an das verteilte Speicherregister geleitet hat, wobei der Wert, der in dem verteilten Speicherregister gespeichert ist, von der SCHREIB-Anforderung nicht verändert wird. Bei bestimmten Implementierungen sendet das verteilte Speicherregister Binärwerte „OK" und „NOK" zurück, wobei OK eine erfolgreiche Ausführung der SCHREIB-Anforderung anzeigt, und NOK anzeigt, dass die Inhalte des verteilten Speicherregisters unklar sind oder in anderen Worten, dass das SCHREIBEN erfolgreich gewesen sein kann oder nicht.
  • 19 zeigt die Komponenten, die durch einen Prozess oder eine Verarbeitungsentität Pi verwendet werden, die zusammen mit einer Anzahl von anderen Prozessen und/oder Verarbeitungsentitäten Pj≠i ein verteiltes Speicherregister implementiert. Ein Prozessor oder eine Verarbeitungsentität verwendet drei Grundelemente niedriger Ebene: einen Zeitnehmermechanismus 1902, eine eindeutige ID 1904 und einen Takt 1906. Der Prozessor oder die Verarbeitungsentität Pi verwendet einen lokalen Zeitnehmermechanismus 1902, der es ermöglicht, dass Pi einen Zeitnehmer für eine spezifizierte Zeitperiode setzt und dann darauf wartet, dass dieser Zeitnehmer abläuft, wobei Pi bei Ablauf des Zeitnehmers benachrichtigt wird, um mit irgendeiner Operation fortzufahren. Ein Prozess kann einen Zeitnehmer setzen und eine Ausführung fortsetzen, wobei der Zeitnehmer bezüglich des Ablaufs geprüft oder abgefragt wird, oder ein Prozess kann einen Zeitnehmer setzen, eine Ausführung aussetzen und wieder geweckt werden, wenn der Zeitnehmer abläuft. In jedem Fall ermöglicht der Zeitnehmer, dass der Prozess eine Operation logisch aussetzt und nachfolgend die Operation nach einer spezifizierten Zeitperiode wieder aufnimmt, oder irgendeine Operation eine spezifizierte Zeitperiode lang durchführt, bis der Zeitnehmer abläuft. Der Prozess oder die Verarbeitungsentität Pi weist auch eine zuverlässig gespeicherte und zuverlässig wiedergewinnbare lokale Prozess-ID („PID") 1904 auf. Jeder Prozessor oder jede Verarbeitungsentität weist eine lokale PID auf, die bezüglich aller anderen Prozesse und/oder Verarbeitungsentitäten, die zusammen das verteilte Speicherregister implementieren, eindeutig ist. Schließlich weist die Prozessorverarbeitungsentität Pi einen Echtzeittakt 1906 auf, der grob mit irgendeiner absoluten Zeit koordiniert ist. Die Echtzeittakte aller Prozesse und/oder Verarbeitungsentitäten, die zusammen gemeinsam ein verteiltes Speicherregister implementieren, müssen nicht genau synchronisiert sein, sollten jedoch angemessen irgendein gemeinschaftlich verwendetes Konzept einer absoluten Zeit widerspiegeln. Die meisten Computer, einschließlich Personalcomputer, umfassen einen batteriebetriebenen Systemtakt, der einen aktuellen universellen Zeitwert widerspiegelt. Zu den meisten Zwecken, einschließlich einer Implementierung eines verteilten Speicherregisters, müssen diese Systemtakte nicht genau synchronisiert sein, sondern nur näherungsweise eine aktuelle universelle Zeit widerspiegeln.
  • Jeder Prozessor oder jede Verarbeitungsentität Pi umfasst einen flüchtigen Speicher 1908 und bei einigen Ausführungsbeispielen einen nicht-flüchtigen Speicher 1910. Der flüchtige Speicher 1908 wird zum Speichern von Anweisungen zur Ausführung und lokalen Werten einer Anzahl von Variablen, die für das Verteiltes-Speicherregister-Protokoll verwendet werden, verwendet. Der nicht-flüchtige Speicher 1910 wird für ein permanentes Speichern der Variablen verwendet, die bei einigen Ausführungsbeispielen für das Verteiltes-Speicherregister-Protokoll verwendet werden. Eine permanente Speicherung von variablen Werten liefert eine relativ einfache Wiederaufnahme der Teilnahme eines Prozesses an der gemeinsamen Implementierung eines verteilten Speicherregisters nach einem Absturz oder einer Kommunikationsunterbrechung. Eine permanente Speicherung ist jedoch für eine Wiederaufnahme einer Teilnahme eines abgestürzten oder zeitlich getrennten Prozessors an der gemeinsamen Implemen tierung des verteilten Speicherregisters nicht erforderlich. Stattdessen, vorausgesetzt, dass die variablen Werte, die in einem dynamischen Speicher gespeichert sind, bei Ausführungsbeispielen einer nicht-permanenten Speicherung im Falle eines Verlustes alle zusammen verloren gehen, vorausgesetzt, dass verlorene Variablen ordnungsgemäß neu initialisiert werden, und vorausgesetzt, dass ein Quorum von Prozessoren zu jeder Zeit wirksam und verbunden bleibt, ist das Verteiltes-Speicherregister-Protokoll korrekt wirksam und ein Fortschritt von Prozessen und Verarbeitungsentitäten, die das verteilte Speicherregister verwenden, wird aufrechterhalten. Jeder Prozess Pi speichert drei Variablen: (1) val 1934, die den aktuellen, lokalen Wert für das verteilte Speicherregister hält; (2) val-ts 1936, die den Zeitstempelwert anzeigt, der dem aktuellen lokalen Wert für das verteilte Speicherregister zugeordnet ist; und (3) ord-ts 1938, die den aktuellsten Zeitstempel anzeigt, der einer SCHREIB-Operation zugeordnet ist. Die Variable val wird insbesondere bei Ausführungsbeispielen einer nicht-permanenten Speicherung auf einen Wert NULL initialisiert, der sich von jedem beliebigen Wert unterscheidet, der durch Prozesse oder Verarbeitungsentitäten in das verteilte Speicherregister geschrieben wird, und der deshalb von allen anderen Werten des verteilten Speicherregisters unterscheidbar ist. Auf ähnliche Weise werden die Werte der Variablen val-ts und ord-ts auf den Wert „AnfangsZS" initialisiert, ein Wert, der geringer als irgendein Zeitstempelwert ist, der durch eine Routine „neuZS" zurückgesendet wird, die verwendet wird, um Zeitstempelwerte zu erzeugen. Wird vorgesehen, dass val, val-ts und ord-ts zusammen auf diese Werte neu initialisiert werden, toleriert das gemeinsam implementierte verteilte Speicherregister Kommunikationsunterbrechungen und Prozess- und Verarbeitungsentitätsabstürze, vorausgesetzt, dass zumindest eine Mehrheit von Prozessen und Verarbeitungsentitäten sich erholen und eine Korrekturoperation wieder aufnehmen.
  • Jeder Prozessor oder jede Verarbeitungsentität Pi kann mit den anderen Prozessen und Verarbeitungsentitäten Pj≠i über ein nachrichtenbasiertes Netz verbunden sein, um Nachrichten zu empfangen 1912 und Nachrichten an die anderen Prozesse und Verarbeitungsentitäten Pj≠i zu senden 1914. Jeder Prozessor oder jede Verarbeitungsentität Pi umfasst eine Routine „neuZS" 1916, die einen Zeitstempel ZSi zurücksendet, wenn dieselbe aufgerufen wird, wobei der Zeitstempel ZSi größer ist als irgendein Anfangswert „AnfangsZS". Jedes Mal, wenn die Routine „neuZS" aufgerufen wird, sendet dieselbe einen Zeitstempel ZSi zurück, der größer als irgendein Zeitstempel ist, der vorhergehend zurückgesendet wurde. Auch sollte jeder beliebige Zeitstempelwert ZSi, der durch die neuZS zurückgesendet wird, die durch einen Prozessor oder eine Verarbeitungsentität Pi aufgerufen wird, sich von jedem beliebigen Zeitstempel ZSj unterscheiden, der durch neuZS zurückgesendet wird, die durch irgendeinen anderen Prozessor oder irgendeine andere Verarbeitungsentität Pj aufgerufen wird. Ein praktisches Verfahren zum Implementieren von neuZS besteht darin, dass neuZS einen Zeitstempel ZS zurücksendet, der die Verkettung der lokalen PID 1904 mit der aktuellen Zeit aufweist, die durch den Systemtakt 1906 berichtet wird. Jeder Prozessor oder jede Verarbeitungsentität Pi, der bzw. die das verteilte Speicherregister implementiert, umfasst vier unterschiedliche Handhabungsroutinen: (1) eine LESEN-Handhabungseinrichtung 1918; (2) eine REIHENFOLGE-Handhabungseinrichtung 1920; (3) eine SCHREIBEN-Handhabungseinrichtung 1922; und (4) eine REIHENFOLGE&LESEN-Handhabungseinrichtung 1924. Es ist wichtig, darauf hinzuweisen, dass Handhabungsroutinen eventuell kritische Abschnitte oder Code-Abschnitte verwenden müssen, die durch Verriegelungen eingängig sind, um Wettlaufbedingungen beim Testen und Setzen von verschiedenen lokalen Datenwerten zu verhindern. Jeder Prozessor oder jede Verarbeitungsentität Pi weist auch vier Operationsroutinen auf: (1) LESEN 1926; (2) SCHREIBEN 1928; (3) WIEDER-HERSTELLEN 1930; und (4) MEHRHEIT 1932. Sowohl die vier Handhabungsroutinen als auch die vier Operationsroutinen sind im Folgenden genauer erörtert.
  • Eine korrekte Operation eines verteilten Speicherregisters und eine Lebendigkeit oder ein Fortschritt von Prozessen und Verarbeitungsentitäten, die ein verteiltes Speicherregister verwenden, hängt von einer Anzahl von Annahmen ab. Es wird angenommen, dass jeder Prozess oder jede Verarbeitungsentität Pi sich nicht bösartig verhält. In anderen Worten, jeder Prozessor oder jede Verarbeitungsentität Pi hält sich treu an das Verteiltes-Speicherregister-Protokoll. Eine weitere Annahme besteht darin, dass eine Mehrheit der Prozesse und/oder Verarbeitungsentitäten Pi, die gemeinsam ein verteiltes Speicherregister implementieren, entweder niemals abstürzt oder schließlich aufhört abzustürzen und zuverlässig läuft. Wie es im Vorhergehenden erörtert ist, ist eine Implementierung eines verteilten Speicherregisters tolerant gegenüber verlorengegangenen Nachrichten, Kommunikationsunterbrechungen und Prozess- und Verarbeitungsentitätsabstürzen. Wenn eine Anzahl von Prozessen oder Verarbeitungsentitäten abgestürzt oder getrennt ist, die geringer ist als eine ausreichende Anzahl, um das Quorum von Prozessen oder Verarbeitungsentitäten zu brechen, bleibt das verteilte Speicherregister korrekt und live. Wenn eine ausreichende Anzahl von Prozessen oder Verarbeitungsentitäten abgestürzt oder getrennt ist, um das Quorum von Prozessen oder Verarbeitungsentitäten zu brechen, bleibt das System korrekt, jedoch nicht live. Wie es im Vorhergehenden erwähnt ist, sind alle Prozesse und/oder Verarbeitungsentitäten durch ein nachrichtenbasiertes Netz voll verbunden. Das nachrichtenbasierte Netz kann asynchron sein ohne Grenzen bei Nachrichtenübertragungszeiten. Es wird jedoch eine Fairverlusteigenschaft für das Netz angenommen, die im Wesentlichen garantiert, dass, falls Pi eine Nachricht m von Pj empfängt, Pj die Nachricht m gesendet hat, und auch im Wesentlichen garantiert, dass, wenn Pi wiederholt die Nachricht m an Pj sendet, Pj schließlich die Nachricht m empfangen wird, falls Pj ein korrekter Prozess oder eine korrekte Verarbeitungsentität ist. Erneut wird, wie es im Vorhergehenden erörtert ist, angenommen, dass die Systemtakte für alle Prozesse oder Verarbeitungsentitäten alle angemessen irgendeinen gemeinschaftlich verwendeten Zeitstandard widerspiegeln, dieselben müssen jedoch nicht genau synchronisiert sein.
  • Diese Annahmen sind nützlich, um eine Korrektheit des Verteiltes-Speicherregister-Protokolls nachzuweisen und einen Fortschritt sicherzustellen. Bei bestimmten praktischen Implementierungen kann es jedoch sein, dass gegen eine oder mehr der Annahmen verstoßen wird und ein angemessen wirksames verteiltes Speicherregister erhalten wird. Zusätzlich können zusätzliche Schutzmaßnahmen in die Handhabungsroutinen und Operationsroutinen eingebaut werden, um bestimmte Mängel bei den Hardware-Plattformen und Verarbeitungsentitäten zu überwinden.
  • Eine Operation des verteilten Speicherregisters basiert auf dem Konzept eines Quorums. 20 veranschaulicht eine Bestimmung des aktuellen Werts eines verteilten Speicherregisters mittels eines Quorums. 20 verwendet ähnliche Darstellungskonventionen, wie dieselben in den 1218 verwendet werden. In 20 unterhält jeder bzw. jede der Prozesse oder Verarbeitungsentitäten 20022006 die lokale Variable val-ts, wie z. B. die lokale Variable 2007, die durch den Prozess oder die Verarbeitungsentität 2002 unterhalten wird, die einen lokalen Zeitstempelwert für das verteilte Speicherregister enthält. Falls wie in 16 eine Mehrheit der lokalen Werte, die durch die verschiedenen Prozesse und/oder Verarbeitungsentitäten unterhalten werden, die gemeinsam das verteilte Speicherregister implementieren, aktuell bezüglich eines Zeitstempelwerts val-ts übereinstimmt, der dem verteilten Speicherregister zugeordnet ist, wird der aktuelle Wert des verteilten Speicherregisters 2008 so betrachtet, dass derselbe der Wert der Variablen val ist, der durch die Mehrheit der Prozesse oder Verarbeitungsentitäten gehalten wird. Falls eine Mehrheit der Prozesse und Verarbeitungsentitäten nicht bezüglich eines Zeitstempelwerts val-ts übereinstimmen kann oder kein einzelner von der Mehrheit gehaltener Wert vorhanden ist, dann sind die Inhalte des verteilten Speicherregisters unbestimmt. Ein von der Minderheit gehaltener Wert kann jedoch dann von einer Mehrheit von Prozessen und/oder Verarbeitungsentitäten ausgewählt und angenommen werden, um das verteilte Speicherregister wiederherzustellen.
  • 21 zeigt Pseudocodeimplementierungen für die Routinehandhabungseinrichtungen und Operationsroutinen, die in 19 in Form eines Diagramms gezeigt sind. Es sei darauf hingewiesen, dass diese Pseudocodeimplementierungen auf eine detaillierte Fehlerhandhabung und spezifische Details von Kommunikationsgrundelementen niedriger Ebene, lokalem Verriegeln und anderen Details verzichten, die für Fachleute auf dem Gebiet der Computerprogrammierung bekannt sind und von denselben einfach implementiert werden können. Die Routine „Mehrheit" 2102 sendet eine Nachricht in Zeile 2 von einem Prozess oder einer Verarbeitungsentität Pi zu sich selbst und zu allen anderen Prozessen oder Verarbeitungsentitäten Pj≠i, die zusammen mit Pi gemeinsam ein verteiltes Speicherregister implementieren. Die Nachricht wird periodisch erneut gesendet, bis eine ausreichende Anzahl von Antworten empfangen worden ist, und bei vielen Implementierungen wird ein Zeitnehmer gesetzt, um ein endliches Zeit- und Ausführungslimit bei diesem Schritt festzulegen. Dann wartet in den Zeilen 3–4 die Routine „Mehrheit" darauf, Antworten auf die Nachricht zu empfangen, und sendet dann die empfangenen Antworten in Zeile 5 zurück. Die Annahme, dass eine Mehrheit von Prozessen korrekt ist, die im Vorhergehenden erörtert wurde, stellt im Wesentlichen sicher, dass die Routine „Mehrheit" schließlich zurückkehrt, egal ob ein Zeitnehmer verwendet wird oder nicht. Bei praktischen Implementierungen erleichtert ein Zeitnehmer ein Handhaben von Fehlerauftretensfällen auf eine rechtzeitige Art und Weise. Es sei darauf hingewiesen, dass jede Nachricht eindeutig identifiziert ist, im Allgemeinen mit einem Zeitstempel oder einer anderen eindeutigen Zahl, so dass Antworten, die durch den Prozess Pi empfangen werden, mit einer vorhergehend gesendeten Nachricht korreliert werden können.
  • Die Routine „Lesen" 2104 liest einen Wert aus dem verteilten Speicherregister. In Zeile 2 ruft die Routine „Lesen" die Routine „Mehrheit" auf, um eine LESEN-Nachricht an sich selbst und an jeden bzw. jede der anderen Prozesse oder Verarbeitungsentitäten Pj≠i zu senden. Die LESEN-Nachricht umfasst eine Anzeige, dass die Nachricht eine LESEN-Nachricht ist, sowie den Zeitstempelwert, der dem lokalen, aktuellen Verteiltes-Speicherregister-Wert zugeordnet ist, der durch den Prozess Pi gehalten wird, val-ts. Falls die Routine „Mehrheit" einen Satz von Antworten zurücksendet, wobei alle den Booleschen Wert „WAHR" enthalten, wie es in Zeile 3 bestimmt wird, dann sendet die Routine „Lesen" den lokalen aktuellen Verteiltes-Speicherregister-Wert val zurück. Ansonsten ruft in Zeile 4 die Routine „Lesen" die Routine „Wiederherstellen" auf.
  • Die Routine „Wiederherstellen" 2106 versucht, einen aktuellen Wert des verteilten Speicherregisters durch eine Quorumtechnik zu bestimmen. Zuerst wird in Zeile 2 ein neuer Zeitstempel ts durch ein Aufrufen der Routine „neuZS" erhalten. Dann wird in Zeile 3 die Routine „Mehrheit" aufgerufen, um REIHENFOLGE&LESEN-Nachrichten an alle Prozesse und/oder Verarbeitungsentitäten zu senden. Falls irgendein Status in den Antworten, die durch die Routine „Mehrheit" zurückgesendet werden, „FALSCH" ist, dann sendet „Wiederherstellen" in Zeile 4 den Wert NULL zurück. Ansonsten wird in Zeile 5 der lokale aktuelle Wert des verteilten Speicherregisters val auf den Wert gesetzt, der dem Zeitstempel des höchsten Werts in dem Satz von Antworten zugeordnet ist, die durch die Routine „Mehrheit" zurückgesendet werden. Dann wird in Zeile 6 die Routine „Mehrheit" erneut aufgerufen, um eine SCHREIBEN-Nachricht zu senden, die den neuen Zeitstempel ts, der in Zeile 2 erhalten wird, und den neuen lokalen aktuellen Wert des verteilten Speicherregisters val umfasst. Falls der Status in allen Antworten den Booleschen Wert „WAHR" aufweist, dann war die SCHREIB-Operation erfolgreich, und eine Mehrheit der Prozesse und/oder Verarbeitungsentitäten stimmen nun mit diesem neuen Wert überein, der in der lokalen Kopie val in Zeile 5 gespeichert ist. Ansonsten sendet die Routine „Wiederherstellen" den Wert NULL zurück.
  • Die Routine „Schreiben" 2108 schreibt einen neuen Wert in das verteilte Speicherregister. Ein neuer Zeitstempel ts wird in Zeile 2 erhalten. Die Routine „Mehrheit" wird in Zeile 3 aufgerufen, um eine REIHENFOLGE-Nachricht, einschließlich des neuen Zeitstempels, an alle Prozesse und/oder Verarbeitungsentitäten zu senden. Falls irgendwelche der Statuswerte, die in Antwortnachrichten zurückgesendet werden, die durch die Routine „Mehrheit" zurückgesendet werden, „FALSCH" sind, dann wird der Wert „NOK" in Zeile 4 durch die Routine „Schreiben" zurückgesendet. Ansonsten wird der Wert val in Zeile 5 in die anderen Prozesse und/oder Verarbeitungsentitäten geschrieben, indem eine SCHREIBEN-Nachricht über die Routine „Mehrheit" gesendet wird. Falls alle Statuswerte in Antworten, die durch die Routine „Mehrheit" zurückgesendet werden, „WAHR" sind, wie es in Zeile 6 bestimmt wird, dann sendet die Routine „Schreiben" den Wert „OK" zurück. Ansonsten sendet die Routine „Schreiben" in Zeile 7 den Wert „NOK" zurück. Es sei darauf hingewiesen, dass sowohl in dem Fall der Routine „Wiederherstellen" 2106 als auch der Routine „Schreiben" die lokale Kopie des Verteiltes-Speicherregister-Werts val und die lokale Kopie des Zeitstempelwerts val-ts beide durch lokale Handhabungsroutinen aktualisiert werden, die im Folgenden erörtert werden.
  • Als Nächstes werden die Handhabungsroutinen erörtert. Zu Beginn sei darauf hingewiesen, dass die Handhabungsroutinen empfangene Werte mit lokalen variablen Werten vergleichen und dann lokale variable Werte gemäß dem Ergebnis der Vergleiche setzen. Es kann sein, dass diese Typen von Operationen streng serialisiert sein müssen und vor Wettlaufbedingungen innerhalb jedes Prozesses und/oder jeder Verarbeitungsentität für Datenstrukturen, die mehrere Werte speichern, geschützt sein müssen. Eine lokale Serialisierung wird ohne weiteres unter Verwendung kritischer Abschnitte oder lokaler Verriegelungen basierend auf atomaren Testen-und-Setzen-Anweisungen erreicht. Die LESEN-Handhabungsroutine 2110 empfängt eine LESEN-Nachricht und antwortet auf die LESEN-Nachricht mit einem Statuswert, der anzeigt, ob die lokale Kopie des Zeitstempels val-ts in dem empfangenden Prozess oder der empfangenden Entität gleich dem Zeitstempel, der in der LESEN-Nachricht empfangen wird, ist oder nicht und ob der Zeitstempel ts, der in der LESEN-Nachricht empfangen wird, größer oder gleich dem aktuellen Wert einer lokalen Variable ord-ts ist oder nicht. Die SCHREIBEN-Handhabungsroutine 2112 empfängt eine SCHREIBEN-Nachricht, die einen Wert für eine Lokalvariable Status in Zeile 2 bestimmt, der anzeigt, ob die lokale Kopie des Zeitstempels val-ts bei dem empfangenden Prozess oder der empfangenden Entität größer als der Zeitstempel, der in der SCHREIBEN-Nachricht empfangen wird, ist oder nicht und ob der Zeitstempel ts, der in der SCHREIBEN-Nachricht empfangen wird, größer oder gleich dem aktuellen Wert einer Lokalvariablen ord-ts ist oder nicht. Falls der Wert der Status-Lokalvariablen „WAHR" ist, was in Zeile 3 bestimmt wird, dann aktualisiert die SCHREIBEN-Handhabungsroutine den lokal gespeicherten Wert und Zeitstempel val und val-ts in den Zeilen 4–5 sowohl in dem dynamischen Speicher als auch in dem permanenten Speicher mit dem Wert und dem Zeitstempel, die in der SCHREIBEN-Nachricht empfangen werden. Schließlich wird in Zeile 6 der Wert, der in der Lokalvariablen Status gehalten wird, zu dem Prozess oder der Verarbeitungsentität zurückgesendet, die die SCHREIBEN-Nachricht gesendet hat, die durch die SCHREIBEN-Handhabungsroutine 2112 gehandhabt wird.
  • Die REIHENFOLGE&LESEN-Handhabungseinrichtung 2114 berechnet einen Wert für die Lokalvariable Status in Zeile 2 und sendet diesen Wert zu dem Prozess oder der Verarbeitungsentität zurück, von dem bzw. der eine REIHENFOLGE&LESEN-Nachricht empfangen wurde. Der berechnete Wert von Status ist ein Boolescher Wert, der anzeigt, ob der Zeitstempel, der in der REIHENFOLGE&LESEN-Nachricht empfangen wird, größer als die beiden Werte, die in den Lokalvariablen val-ts und ord-ts gespeichert sind, ist oder nicht. Falls der berechnete Wert von Status „WAHR" ist, dann wird der empfangene Zeitstempel ts in sowohl den dynamischen Speicher als auch den permanenten Speicher in der Variable ord-ts gespeichert.
  • Auf ähnliche Weise berechnet die REIHENFOLGE-Handhabungseinrichtung 2116 einen Wert für eine Lokalvariable Status in Zeile 2 und sendet diesen Status an den Prozess oder die Verarbeitungsentität zurück, von der eine REIHENFOLGE-Nachricht empfangen wurde. Der Status spiegelt wider, ob der empfangene Zeitstempel größer als die Werte, die in den Lokalvariablen val-ts und ord-ts gehalten werden, ist oder nicht. Falls der berechnete Wert von Status „WAHR" ist, dann wird der empfangene Zeitstempel ts in sowohl den dynamischen Speicher als auch den permanenten Speicher in der Variablen ord-ts gespeichert.
  • Unter Verwendung des Verfahrens und des Protokolls des verteilten Speicherregisters, die im Vorhergehenden erörtert sind, können gemeinschaftlich verwendete Zustandsinformationen, die kontinuierlich konsistent in einem verteilten Datenspeichersystem unterhalten werden, in einem Satz von verteilten Speicherregistern gespeichert werden, eine Einheit von gemeinschaftlich verwendeten Zustandsinformationen pro Register. Die Größe eines Registers kann variieren, um unterschiedliche natürliche Größen von Einheiten von gemeinschaftlich verwendeten Zustandsinformationen aufzunehmen. Die Granularität von Zustandsinformationseinheiten kann durch eine Leistungsüberwachung oder durch eine Analyse von erwarteten Austauschraten von Zustandsinformationseinheiten innerhalb eines bestimmten verteilten Systems bestimmt werden. Größere Einheiten verursachen einen geringeren Mehraufwand für Protokollvariablen und andere Daten, die für ein verteiltes Speicherregister unterhalten werden, können jedoch zu einem erhöhten Kommunikationsmehraufwand führen, wenn auf unterschiedliche Teile der Einheiten zu unterschiedlichen Zeiten zugegriffen wird. Es sei auch darauf hingewiesen, dass, obwohl der oben genannte Pseudocode und die Darstellungen eine Implementierung eines einzigen verteilten Speicherregisters betreffen, diese Pseudocoderoutinen verallgemeinert werden können, indem Parameter, die ein bestimmtes verteiltes Speicherregister identifizieren, von einer Zustandsinformationseinheit, die Operationen betreffen, hinzugefügt werden und Arrays von Variablen, wie z. B. val-ts, val und ord-ts, die durch die Identifizierungsparameter indexiert sind, unterhalten werden.
  • Verallgemeinertes Speicherregistermodell
  • Das Speicherregistermodell wird im Allgemeinen durch ein FAB-System auf der Blockebene angewendet, um eine Konsistenz über Segmente aufrechtzuerhalten, die gemäß Spiegelredundanzschemata verteilt sind. In anderen Worten kann jeder Block eines Segments als ein Speicherregister betrachtet werden, das über mehrere Bausteine verteilt ist, und die im Vorhergehenden beschriebenen Techniken, die Quoren und ein Nachrichtenleiten umfassen, werden verwendet, um eine Datenkonsistenz über die Spiegelkopien aufrechtzuerhalten. Das Speicherregisterschema kann jedoch erweitert werden, um Löschcodierredundanzschemata zu handhaben. Erstens verwenden Löschcodierredundanzschemata, anstatt eines Quorums, das aus einer Mehrheit der Bausteine besteht, über die ein Block verteilt ist, wie es im vorhergehenden Abschnitt beschrieben ist und wie es für Spiegelredundanzschemata verwendet wird, Quoren von m + [(n – m)/2] Bausteinen, so dass die Schnittmenge beliebiger zwei Quoren zumindest m Bausteine enthält. Dieser Typ von Quorum wird als ein „m-Quorum" bezeichnet. Zweitens können, anstatt neu empfangene Werte in der zweiten Phase einer SCHREIB-Operation in Blöcke in einer internen Speicherung zu schreiben, Bausteine stattdessen die neuen Werte zusammen mit einem Zeitstempel, der den Werten zugeordnet ist, protokollieren. Die Protokolle können dann asynchron verarbeitet werden, um die protokollierten SCHREIB-Operationen auszuführen, wenn ein m-Quorum von protokollierten Einträgen empfangen und protokolliert worden ist. Ein Protokollieren wird verwendet, da anders als bei Spiegelredundanzschemata Daten aufgrund von Bausteinabstürzen nicht wiederhergestellt werden können, außer ein m-Quorum von Bausteinen hat eine bestimmte SCHREIB-Operation empfangen und korrekt ausgeführt. 22 zeigt einen modifizierten Pseudocode, ähnlich dem Pseudocode, der in 17 bereitgestellt ist, der Erweiterungen zu dem Speicherregistermodell umfasst, die eine Verteilung von Segmenten über Bausteine gemäß Fehlercodierredundanzschemata innerhalb eines FAB-Systems handhaben, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen. In dem Fall, dass m Bausteine z. B. einen am aktuellsten geschriebenen Wert nicht protokolliert haben, wird der am aktuellsten geschriebene Wert zu einem vorangegangenen Wert zurückgesetzt, der sich in zumindest m Kopien innerhalb der Protokolle befindet oder innerhalb zumindest m Bausteinen gespeichert ist.
  • 23 veranschaulicht die große Abhängigkeit von Zeitstempeln seitens der Datenkonsistenztechniken, die auf dem Speicherregistermodell basieren, innerhalb eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. In 23 ist ein Block 2302 so gezeigt, dass derselbe gemäß einem Dreifachspiegelredundanzschema über drei Bausteine 23042306 verteilt ist und gemäß einem 3 + 2-Löschcodierschema über fünf Bausteine 23082312 verteilt ist. Bei dem Dreifachspiegelredundanzschema ist jede Kopie des Blocks, wie z. B. Block 2314, zwei Zeitstempeln 23162317 zugeordnet, wie es im vorangegangenen Unterabschnitt erörtert ist. Bei dem Löschcodierredundanzschema ist jeder Block, wie z. B. der erste Block 2318, zumindest zwei Zeitstempeln zugeordnet. Die Prüfsummenbits, die aus dem Block 23202321 und aus anderen Blöcken in dem Streifen des Blocks berechnet werden, sind zwei Zeitstempeln zugeordnet, aber ein Block, wie z. B. Block 2324, kann zusätzlich Protokolleinträgen (darunter gezeigt, mit dem Block darüber), wie z. B. Protokolleintrag 2326, zugeordnet sein, von denen jeder ebenfalls einem Zeitstempel zugeordnet ist, wie z. B. Zeitstempel 2328. Es ist klar, dass die Datenkonsistenztechniken, die auf dem Speicherregistermodell basieren, potentiell eine Speicherung und Unterhaltung einer sehr großen Anzahl von Zeitstempeln umfassen, und dass der Gesamtspeicherplatz, der Zeitstempeln zugeordnet ist, ein wesentlicher Teil des gesamten verfügbaren Speicherplatzes innerhalb eines FAB-Systems sein kann. Außerdem kann ein Nachrichtenverkehrmehraufwand sich aus einem Leiten von Zeitstempeln zwischen Bausteinen während der im Vorhergehenden beschriebenen LESE- und SCHREIB-Operationen ergeben, die Speicherregister betreffen.
  • Wegen des enormen potentiellen Mehraufwands bezüglich Zeitstempeln kann ein FAB-System eine Anzahl von Techniken verwenden, um den Speicher- und Nachrichtenübermittlungsmehraufwand bezüglich Zeitstempeln zu verbessern. Erstens können Zeitstempel hierarchisch durch Bausteine in einem nicht-flüchtigen Direktzugriffsspeicher gespeichert werden, so dass ein einziger Zeitstempel einer großen, zusammenhängenden Anzahl von Blöcken zugeordnet sein kann, die bei einer einzigen SCHREIB-Operation geschrieben werden. 24 veranschaulicht eine hierarchische Zeitstempelverwaltung, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. In 24 sind Zeitstempel Blattknoten in einem Typ von großem azyklischem Graphen zugeordnet, der als ein „Intervallbaum" bekannt ist, von dem nur ein kleiner Abschnitt in 24 gezeigt ist. In dem gezeigten Abschnitt des Graphen stellen die beiden Blattknoten 2402 und 2404 Zeitstempel dar, die Blöcken 10001050 bzw. 10512000 zugeordnet sind. Falls bei einer nachfolgenden SCHREIB-Operation eine SCHREIB-Operation die Blöcke 10511099 betrifft, dann wird der Blattknoten 2404 in dem ursprünglichen azyklischen Graphen in zwei Blöcke niedrigerer Ebene 2406 und 2408 in einem modifizierten azyklischen Graphen geteilt. Getrennte Zeitstempel können jedem der neuen Blattknotenblöcke zugeordnet werden. Umgekehrt können, wenn die Blöcke 10512000 nachfolgend in einer einzigen SCHREIB-Operation geschrieben werden, die beiden Blöcke 2406 und 2408 nachfolgend vereinigt werden, was den azyklischen Graphen zu dem ursprünglichen azyklischen Graphen 2400 zurückbringt. Ein Zuordnen von Zeitstempeln zu Gruppen von Blöcken, die bei einzelnen SCHREIB-Operationen geschrieben werden, kann die Anzahl von Zeitstempeln, die durch einen Baustein unterhalten werden, erheblich verringern.
  • Eine andere Möglichkeit, die Anzahl von Zeitstempeln zu verringern, die durch einen Baustein unterhalten werden, besteht darin, Zeitstempel aggressiv als Abfall zu sammeln. Wie es in dem vorangegangenen Unterabschnitt erörtert ist, können Zeitstempel Blöcken zugeordnet werden, um die quorum-basierten Konsistenzverfahren des Speicherregistermodells zu ermöglichen. Wenn jedoch alle Bausteine, über die ein Block verteilt ist, erfolgreich aktualisiert worden sind, werden die Zeitstempel, die den Blöcken zugeordnet sind, nicht mehr benötigt, da die Blöcke sich in einem komplett übereinstimmenden und vollständig redundant gespeicherten Zustand befinden. Somit kann ein FAB-System ferner das Speicherregistermodell erweitern, um eine aggressive Abfallsammlung von Zeitstempeln nach einem vollständigen Abschluss von SCHREIB-Operationen zu umfassen. Weitere Verfahren, die durch das FAB-System zum Verringern eines zeitstempel-bezogenen Mehraufwands verwendet werden, können ein Aufladen von zeitstempel-bezogenen Nachrichten im Huckepack-Verfahren innerhalb anderer Nachrichten und ein Verarbeiten von damit in Beziehung stehenden Zeitstempeln zusammen in kombinierten Verarbeitungsaufgaben, einschließlich hierarchischer Degradierung, die im Folgenden erörtert ist, umfassen.
  • Das quorum-basierte Speicherregistermodell kann ferner erweitert werden, um eine Neukonfiguration und Migration zu handhaben, die im Vorhergehenden in einem vorangegangenen Unterabschnitt erörtert sind, wobei Anordnungen und Redundanzschemata verändert werden. Wie es in diesem Unterabschnitt erörtert ist, können während Neukonfigurationsoperationen zwei oder mehr unterschiedliche Konfigurationen gleichzeitig unterhalten werden, während neue Konfigurationen mit vorhergehend bestehenden Konfigurationen vor einer Entfernung und Abfallsammlung der vorhergehenden Konfigurationen synchronisiert werden. SCHREIB-Operationen betreffen beide Konfigurationen während des Synchronisationsprozesses. Somit muss ein Quorum höherer Ebene von Konfigurationen eine SCHREIB-Operation erfolgreich abschließen, bevor die cfg-Gruppe oder die SCN-Ebenensteuerlogik davon ausgeht, dass eine empfangene SCHREIB-Operation erfolgreich abgeschlossen worden ist. Die 2526 liefern Pseudocode für ein weiteres erweitertes Speicherregistermodell, das das Konzept von quorum-basierten Schreiboperationen in mehrere aktive Konfigurationen umfasst, die aufgrund einer Neukonfiguration eines verteilten Segments innerhalb eines FAB-Systems vorhanden sein können, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen.
  • Leider ist eine Migration noch eine andere Ebene von Neukonfiguration, die noch eine weitere Erweiterung des Speicherregistermodells erfordern kann. Wie bei dem im Vorhergehenden erörterten Neukonfigurationsszenario umfasst eine Migration mehrere aktive Konfigurationen, auf die eine SCN-Ebenensteuerlogik SCHREIB-Operationen während einer Synchronisation einer neuen Konfiguration mit einer alten Konfiguration richtet. Anders als bei der Neukonfigurationsebene erfordert die Migrationebene jedoch, dass eine SCHREIB-Operation, die aktive Konfigurationen betrifft, bei allen Konfigurationen erfolgreich abgeschlossen wird, anstatt bei einem Quorum von aktiven Konfigurationen, da die Redundanzschemata für die aktiven Konfigurationen unterschiedlich sind und es sein kann, dass eine fehlgeschlagene SCHREIB-Operation bei einem Redundanzschema nicht von einer anderen aktiven Konfiguration, die ein anderes Redundanzschema verwendet, wiedergewinnbar ist. Deshalb besteht auf der Migrationebene ein Quorum von aktiven Konfigurationen aus allen aktiven Konfigurationen. Eine Erweiterung des Speicherregistermodells auf die Migrationsebene führt deshalb zu einem allgemeineren speicherregisterartigen Modell. 27 zeigt Pseudocode hoher Ebene zur Erweiterung des Speicherregistermodells auf die Migrationsebene innerhalb eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Noch andere Überlegungen können auf der Reproduktionsebene gelten, bei der SCHREIB-Operationen mehrere Reproduktionen einer virtuellen Platte betreffen. Die allgemeinste Speicherregistermodellerweiterung, die im Vorhergehenden unter Bezugnahme auf 27 erörtert ist, ist jedoch ausreichend allgemein zur Anwendung auf der VDI- und Virtuellplattenebene, wenn VDI-Ebenen-Überlegungen in das allgemeine Speicherregistermodell aufgenommen werden.
  • Infolge der Speicherregistermodellerweiterungen und -überlegungen, die im Vorhergehenden erörtert sind, wird eine endgültige Beschreibung hoher Ebene der hierarchischen Steuerlogik und der hierarchischen Datenspeicherung innerhalb eines FAB-Systems erhalten. 28 veranschaulicht die hierarchische Gesamtstruktur sowohl der Steuerverarbeitung als auch der Datenspeicherung innerhalb eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Eine Koordinatorlogik oberster Ebene, die als der „Koordinator oberster Ebene" 2802 bezeichnet wird, kann der Virtuellplattenebene 2804 des hierarchischen Datenspeichermodells zugeordnet werden. Eine VDI-Ebenensteuerlogik, die als der „VDI-Ebenenkoordinator" 2806 bezeichnet wird, kann der VDI-Ebene 2808 des Datenspeichermodells zugeordnet werden. Eine SCN-Ebenensteuerlogik, die als der „SCN-Koordinator" 2810 bezeichnet wird, kann der SCN-Ebene 2812 des Datenspeichermodells zugeordnet werden. Eine Konfigurationsgruppenebenensteuerlogik, die als der „Konfigurationsgruppenkoordinator" 2814 bezeichnet wird, kann der Konfigurationsgruppenebene 2816 des Datenspeichermodells zugeordnet werden. Schließlich kann eine Konfigurationsebenensteuerlogik, die als der „Konfigurationskoordinator" 2818 bezeichnet wird, der Konfigurationsebene des Datenspeichermodells 2820 zugeordnet werden. Es sei darauf hingewiesen, dass in 28 und nachfolgenden Figuren, die die Darstellungskonventionen verwenden, die in 28 verwendet werden, die cfg- und Anordnungsdatenstrukturelemente zusammen in einem Datenspeichermodellknoten kombiniert sind. Jeder der Koordinatoren in der hierarchischen Organisation von Koordinatoren führt ein erweitertes Speicherregistermodell-Konsistenzverfahren aus, das für die hierarchische Ebene des Koordinators geeignet ist. Zum Beispiel verwendet der cfg-Gruppenkoordinator quorumbasierte Techniken für Spiegelredundanzschemata und m-quorum-basierte Techniken für Löschcodierredundanzschemata. Im Gegensatz dazu verwendet der SCN-Koordinator ein erweitertes Speicherregistermodell, das einen Abschluss einer SCHREIB-Operation durch alle Konfigurationsgruppen, auf die verwiesen wird, erfordert, damit die SCHREIB-Operation als erfolgreich betrachtet wird.
  • Das Zeitstempelproblem
  • Obwohl die hierarchische Steuerverarbeitung in einem Datenspeichermodell, die in einem vorangegangenen Unterabschnitt erörtert ist, ein logisches und erweiterbares Modell zum Unterstützen von derzeit in Betracht gezogenen Datenspeichermodellen und Operationen und zusätzlichen Datenspeichermodellen und Operationen, die zu zukünftigen FAB-Systemarchitekturen hinzugefügt werden können, liefert, bleibt ein erhebliches Problem bezüglich der Zeitstempel. Das Zeitstempelproblem wird am besten unter Bezugnahme auf ein konkretes Beispiel erörtert. Die 29A29C veranschaulichen ein Zeitstempelproblem im Zusammenhang mit einer Migration von einem 4 + 2-Löschcodierredundanzschema zu einem 8 + 2-Löschcodierredundanzschema zur Verteilung eines bestimmten Segments. 29A veranschaulicht die Anordnungen für das vorangegangene 4 + 2-Redundanzschema und das neue 8 + 2-Löschcodierredundanzschema für ein Segment. In 29A ist das Segment 2902 als eine zusammenhängende Sequenz von acht Blöcken 29042911 gezeigt. Die 4 + 2-Redundanzschemaanordnung 2912 verteilt die acht Blöcke in zwei Streifen über die Bausteine 2, 3, 6, 9, 10 und 11. Die 8 + 2-Redundanzschemaanordnung 2914 verteilt die acht Blöcke in einem einzigen Streifen über die Bausteine 1, 4, 6, 8, 9, 15, 16, 17, 18 und 20. Da beide Anordnungen die Bausteine 6 und 9 verwenden, enthalten die Bausteine 6 und 9 Blöcke sowohl der alten als auch der neuen Konfiguration. Bei der 4 + 2-Konfiguration sind Prüfsummenblöcke über die Bausteine 10 und 11 2916 verteilt, und bei der 8 + 2-Konfiguration sind Prüfsummenblöcke über die Bausteine 18 und 20 2918 verteilt. In 29A sind die Abbildung zwischen Blöcken des Segments 29042911 und Streifen innerhalb von Bausteinen durch doppelköpfige Pfeile angezeigt, wie z. B. den doppelköpfigen Pfeil 2920.
  • Es sei eine SCHREIB-Operation des Endblocks 2911 des Segments betrachtet, was in 29A durch Pfeil 2922 angezeigt ist. Bei einer Löschcodierredundanzschemaanordnung werden alle Blöcke in einem Streifen, in dem ein Block geschrieben ist, einem neuen Zeitstempel für die SCHREIB-Operation zugeordnet, da eine Schreiboperation in einen beliebigen Block die Paritätsbits für alle Blöcke in dem Streifen beeinflusst. Somit führt, wie es in 29B gezeigt ist, ein Schreiben in den letzten Block des Segments 2911 dazu, dass alle Blöcke in dem zweiten Streifen 29242927 der 4 + 2-Anordnung einem neuen Zeitstempel zugeordnet werden, der der SCHREIB-Operation entspricht.
  • Bei der 8 + 2-Anordnung werden jedoch alle Blöcke innerhalb des einzigen Streifens dem neuen Zeitstempel 29282935 zugeordnet. In 29B sind Blöcke, die dem neuen Zeitstempel zugeordnet sind, dunkel gestaltet. Als Nächstes sei eine LESE-Operation des ersten Blocks des Segments 2904 betrachtet, wie es in 29C dargestellt ist. Wenn derselbe aus der 4 + 2-Anordnung 2912 gelesen wird, wird der erste Block einem alten Zeitstempel zugeordnet, wie es durch das Fehlen einer Schattierung in Block 2936 angezeigt ist. Wenn derselbe jedoch aus der 8 + 2-Anordnung 2914 gelesen wird, wird der erste Block dem neuen Zeitstempel 2938 zugeordnet, wie es durch eine Schattierung bei dem ersten Block angezeigt ist. Deshalb kann eine Steuerlogik, die die gelesenen Blöcke und Zeitstempel empfängt, den Schluss ziehen, dass eine fehlende Zeitstempelübereinstimmung bezüglich des ersten Blocks des Segments vorliegt, und dass deshalb Kopien des Blocks nicht übereinstimmend sind. Zum Beispiel kann es sein, dass der SCN-Koordinator bei der LESE-Operation versagt und dass derselbe Wiederherstellungsschritte unternimmt wegen der Zeitstempeldisparität, die durch die beiden unterschiedlichen cgrps an den SCN-Koordinator berichtet wird, die die beiden unterschiedlichen, gleichzeitig bestehenden Redundanzschemata für das Segment verwalten. Tatsächlich besteht keine fehlende Datenübereinstimmung, und die Zeitstempeldisparität ergibt sich nur aus dem unterschiedlichen Zeitstempelzuweisungsverhalten der beiden unterschiedlichen Redundanzschemata, die auf der Konfigurationskoordinatorebene unter dem SCN-Koordinator verwaltet werden. Das Zeitstempelproblem, das in den 29A29C veranschaulicht ist, ist nur ein Beispiel für viele unterschiedliche zeitstempel-bezogene Probleme, die in dem hierarchischen Koordinator- und Datenspeicherungsmodell auftreten können, das in 28 veranschaulicht ist.
  • Hierarchische Zeitstempellösung für das Zeitstempelproblem
  • Obwohl verschiedene unterschiedliche Lösungen vorgeschlagen werden können, um das Zeitstempelproblem zu lösen, auf das im vorhergehenden Unterabschnitt eingegangen wurde, würden viele der vorgeschlagenen Lösungen weiteren Mehraufwand und Ineffizienz einführen und viele spezifische und nicht-erweiterbare Modifizierungen des Speicherregistermodells erfordern. Ein Ausführungsbeispiel der vorliegenden Erfindung ist ein relativ einfaches und erweiterbares Verfahren, das einen neuen Typ von Zeitstempel verwendet und das eine Trennung von unterschiedlichen hierarchischen Verarbeitungsebenen voneinander durch eine gestufte Einschränkung des Umfangs von Zeitstempeln, wenn hierarchische Verarbeitungsebenen zeitstempelzugeordnete Operationen abschließen, liefert. Im Grunde betrifft dieses Ausführungsbeispiel der vorliegenden Erfindung einen neuen Typ von Zeitstempel, der direkt in das hierarchische Verarbeitungs- und Datenspeichermodell abbildet, das in 28 gezeigt ist.
  • 30 veranschaulicht einen von einem neuen Typ von Zeitstempeln, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen. Der Zeitstempel 3000 ist eine Datenstruktur, die allgemein in einem nicht-flüchtigen Direktzugriffsspeicher innerhalb von Bausteinen in Zuordnung zu Datenstrukturen, Datenstrukturknoten und Datenentitäten gespeichert wird und zwischen Bausteinen und Prozessen in Nachrichten übermittelt wird. Ein Beispiel für den neuen Typ von Zeitstempel 3000, der in 30 gezeigt ist, kann ein Feld 3002, das die Entität beschreibt oder auf dieselbe verweist, der der Zeitstempel zugeordnet ist, wie z. B. einen Datenblock oder einen Protokolleintrag, ein Feld 3004, das den Echtzeitzeitwert, den Logikzeitwert oder den Sequenzwert umfasst, den der Zeitstempel der Entität zuordnet, die in dem ersten Feld 3002 beschrieben ist oder auf die darin verwiesen wird, ein Ebenenfeld 3006, das die höchste Ebene innerhalb der Verarbeitungs- und Datenspei cherhierarchie anzeigt, die in 28 gezeigt ist, auf der der Zeitstempel als live betrachtet wird, und optional zusätzliche Felder 3008 umfassen, die für verschiedene Zwecke verwendet werden, einschließlich einer schnellen Abfallsammlung und anderer Zwecke.
  • Die Semantik des Ebenenfelds und die Verwendung des neuen Typs von Zeitstempel werden am besten unter Bezugnahme auf ein konkretes Beispiel beschrieben. Die 31A31F veranschaulichen eine Verwendung des neuen Typs von Zeitstempel, der ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, um eine Datenkonsistenz während einer SCHREIB-Operation in ein FAB-Segment zu ermöglichen, das unter mehreren Redundanzschemata über mehrere Bausteine verteilt ist. Die 31A31F verwenden alle die gleichen Darstellungskonventionen, die in 28 verwendet sind, die im Vorhergehenden unter Bezugnahme auf 28 beschrieben sind. Es sei eine SCHREIB-Operation 3102 betrachtet, die eine bestimmte virtuelle Platte 3104 innerhalb eines FAB-Systems betrifft. Der Koordinator oberster Ebene leitet die SCHREIB-Anforderung an zwei VDI-Reproduktionen 31063107 der virtuellen Platte, und der VDI-Koordinator leitet wiederum die SCHREIB-Anforderung an zwei unterschiedliche SCN-Knoten 31083109, die dem Segment entsprechen, zu dem die SCHREIB-Anforderung geleitet wird. Eine Migration erfolgt bezüglich des ersten SCN-Knotens 3108, und der SCN-Koordinator leitet deshalb die SCHREIB-Anforderung zu zwei unterschiedlichen cfg-Gruppen 3110 und 3112, wobei die erste cfg-Gruppe eine Dreifachspiegelredundanz darstellt und die zweite cfg-Gruppe 3112 ein RAID-6-Löschcodierredundanzschema darstellt. Die zwei cfg-Gruppen 3110 und 3112 leiten wiederum die SCHREIB-Anforderung an entsprechende Konfigurationen 3114 bzw. 3116. Der zweite SCN-Knoten 3109 leitet die SCHREIB-Anforderung an eine einzige Konfigurationsgruppe 3118, die wiederum die SCHREIB-Anforderung zu der zugeordneten Konfiguration 3120 leitet. Es sei angenommen, dass die SCHREIB-Operation bezüglich Bausein „c" 3122 in der Konfiguration 3114, die der Dreifachspiegel-cfg-Gruppe 3110 des ersten SCN-Knotens 3108 zugeordnet ist, fehlschlägt. Alle anderen SCHREIB-Operationen in Bausteine innerhalb der relevanten Konfigurationsgruppen sind erfolgreich. Deshalb werden, wie es in 31B gezeigt ist, alle Blöcke, die durch die SCHREIB-Anforderung beeinflusst werden, an allen Bausteinen innerhalb der relevanten Konfigurationen 3114, 3116 und 3120 einem neuen Zeitstempel zugeordnet, während die Blöcke in Baustein „c" einem alten Zeitstempel zugeordnet werden. Der neue Zeitstempel weist einen Ebenenfeldwert auf, der die oberste Ebene der Hierarchie anzeigt, wie es auch in 31B gezeigt ist. Dies bedeutet, dass der Zeitstempel bezüglich aller hierarchischer Ebenen in dem Steuerverarbeitungs- und Datenspeichermodell live ist.
  • Dann antworten, wie es in 31C gezeigt ist, die verschiedenen hierarchischen Ebenen in dem hierarchischen Modell bezüglich der SCHREIB-Operation nach oben. Zum Beispiel sendet auf der Konfigurationskoordinatorebene eine Konfiguration 3114 eine Anzeige der fehlerhaften SCHREIB-Operation in den Baustein „c" an den Konfigurationsgruppenknoten 3110 zurück, sowie Anzeigen des Erfolgs der SCHREIB-Operation in die Bausteine „a" und „b". Eine Konfiguration 3116 sendet eine Anzeige eines Erfolges für die SCHREIB-Operation für alle fünf Bausteine in der Konfiguration zurück. Auf ähnliche Weise sendet eine Konfiguration 3120 Anzeigen eines Erfolges für alle SCHREIB-Operationen in alle fünf Bausteine in der Konfiguration 3120 zurück. Erfolgsanzeigen werden Ebene für Ebene die Verarbeitungshierarchie ganz hinauf zu dem Koordinator oberster Ebene zurückgesendet. Es sei darauf hingewiesen, dass der Konfigurationsgruppenknoten 3110 eine Anzeige eines Erfolges trotz des Fehlschlagens der SCHREIB-Operation in Baustein „c" zurücksendet, da unter dem Dreifachspiegelredundanzschema erfolgreiche SCHREIB-Operationen in die Bausteine „a" und „b" eine erfolgreiche SCHREIB-Operation in ein Quorum der Bausteine darstellen.
  • Nach dem Zurücksenden von Anzeigen eines Erfolges degradieren die hierarchischen Koordinatorebenen von dem Koordinator oberster Ebene nach unten das Ebenenfeld der Zeitstempel, die der SCHREIB-Operation zugeordnet sind, zu einem Ebenenfeldwert, der der Ebene unter denselben entspricht. In anderen Worten degradiert der Koordinator oberster Ebene das Ebenenfeld der Zeitstempel, die den Bausteinen zugeordnet sind, die durch die SCHREIB-Operation beeinflusst werden, zu einer Anzeige der VDI-Koordinatorebene, die VDI-Koordinatorebene degradiert den Wert in dem Ebenenfeld der Zeitstempel zu einer Anzeige der SCN-Koordinatorebene usw. Folglich werden die Ebenenfelder aller Zeitstempel, die der SCHREIB-Operation zugeordnet sind, zu einer Anzeige der Konfigurationskoordinatorebene degradiert, wie es in 31D gezeigt ist. Aufgrund des Fehlschlagens der SCHREIB-Operation in Baustein „c" werden die Zeitstempel auf der Konfigurationskoordinatenebene in einem Live-Zustand aufrechterhalten. Die Zeitstempel werden in dem Live-Zustand aufrechterhalten, bis die fehlgeschlagene SCHREIB-Operation aufgelöst ist und ein kompletter Erfolg für die SCHREIB-Operation erhalten wird. Alle Koordinatorebenen über der Konfigurationskoordinatorebene betrachten die Zeitstempel jedoch so, dass dieselben bereits als Abfall gesammelt worden sind.
  • Wie es in 31E gezeigt ist, löst der Konfigurationsgruppenkoordinator die fehlgeschlagene SCHREIB-Operation durch ein Neukonfigurieren der Konfiguration 3114 auf, die den ausgefallenen Baustein enthält. Somit verweist die Konfigurationsgruppe 3110 sowohl auf die alte Konfiguration 3114 als auch auf eine neue Konfiguration 3124, bei der ein neuer Baustein „p" anstatt eines ausgefallenen Bausteins „c" in der alten Konfiguration verwendet wird. Im Rahmen der Neukonfiguration werden Blöcke von der alten Konfiguration 3114 in die neue Konfiguration 3124 kopiert. Bei dem Beispiel, das in den 31A31F gezeigt ist, empfangen die kopierten Blöcke in der neuen Konfiguration neue Zeitstempel mit neuen Zeitstempelwerten. In bestimmten Fällen können Resync-Routinen Daten rekonstruieren und bestehende Zeitstempel bewahren, während in anderen Fällen, wie z. B. bei dem aktuellen Beispiel, neue Zeitstempel erzeugt werden. Somit wird der Block, der bei der im Vorhergehenden beschriebenen SCHREIB-Operation geschrieben wird, einem Zeitstempelwert in der alten Konfiguration und einem neueren Zeitstempelwert in der neuen Konfiguration zugeordnet. Somit besteht eine Zeitstempeldisparität bezüglich des Blocks in der neuen Konfiguration und allen anderen Blöcken in den verbleibenden Konfigurationen.
  • Aber aufgrund der hierarchischen Beschaffenheit der Zeitstempel, und weil die Zeitstempel in der alten Konfiguration 3114 zu der Konfigurationskoordinatorebene degradiert worden sind und die neuen Zeitstempel in der neuen Konfiguration 3124 ursprünglich auf die Konfigurationskoordinatorebene gesetzt wurden, da dieselben durch den Konfigurationskoordinator erzeugt wurden, ist die Zeitstempeldisparität innerhalb der Steuerverarbeitungshierarchie über der Konfigurationskoordinatorebene nicht sichtbar. Deshalb beobachten weder der Konfigurationsgruppenkoordinator noch irgendwelche Koordinatoren über dem Konfigurationsgruppenkoordinator eine Zeitstempeldisparität. Zeitstempel mit Ebenen unter einer aktuellen Steuerverarbeitungshierarchie werden so betrachtet, dass dieselben durch diese Verarbeitungsebene als Abfall gesammelt werden. Somit wurden aus der Sicht des Konfigurationsgruppenkoordinators und aller höheren Koordinatoren die Zeitstempel, die dem Block zugeordnet sind, infolge dessen, dass die SCHREIB-Operation aus der Sicht des Konfigurationsgruppenkoordinators und aller Koordinatoren höherer Ebene erfolgreich war, bereits als Abfall gesammelt. Wenn die Neukonfiguration des Konfigurationsgruppenknotens 3110 abgeschlossen ist, wie es in 31F gezeigt ist, wird die alte Konfiguration (3114 in 31E) gelöscht und als Abfall gesammelt, was nur eine einzige neue Konfiguration 3124 übrig lässt. An diesem Punkt wurde der SCHREIB-Fehler in Baustein „c" aufgelöst, und der Konfigurationskoordinator degradiert deshalb die Ebenenan zeige in den Ebenenfeldern aller Zeitstempel, die Blöcken zugeordnet sind, die durch die SCHREIB-Operation beeinflusst wurden. Eine Degradierung auf der Konfigurationskoordinatorebene bedeutet, dass die Zeitstempel auf jeder beliebigen Verarbeitungsebene nicht mehr live sind und physisch durch einen Abfallsammelmechanismus als Abfall gesammelt werden können.
  • Zusammenfassend kann der neue hierarchische Zeitstempel, der ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, ein Ebenenfeld umfassen, das die höchste Ebene innerhalb einer Verarbeitungshierarchie anzeigt, auf der der Zeitstempel als live betrachtet wird. Koordinatoren über dieser Ebene betrachten den Zeitstempel so, dass derselbe bereits als Abfall gesammelt wurde, und deshalb wird der Zeitstempel durch die Koordinatoren über dieser Ebene bezüglich einer zeitstempeldisparitätsbezogenen Fehlererfassung nicht berücksichtigt. Somit sind Zeitstempeldisparitäten, die keine fehlende Datenübereinstimmung darstellen, wie z. B. die Zeitstempeldisparität, die unter Bezugnahme auf die 29A29C beschrieben ist, automatisch auf diejenigen Verarbeitungsebenen mit ausreichendem Wissen isoliert, um zu erkennen, dass die Zeitstempeldisparität keine fehlende Datenübereinstimmung darstellt, so dass eine Steuerlogik höherer Ebene nicht versehentlich Fehler feststellt und Wiederherstellungsoperationen in Fällen aufruft, in denen keine fehlende Datenübereinstimmung oder andere Fehler vorliegen. Durch ein Aufnehmen des Verarbeitungsebenenfeldes innerhalb eines hierarchischen Zeitstempels können unerwünschte Abhängigkeiten zwischen Verarbeitungsebenen, auf denen Verarbeitungsaufgaben bezüglich der Daten oder einer anderen Rechenentität, die dem Zeitstempel zugeordnet ist, und Verarbeitungsebenen, auf denen eine Verarbeitung abgeschlossen ist, verhindert werden. Hierarchische Zeitstempel ermöglichen auch eine gestufte Abfallsammlung von Zeitstempeln durch hierarchische Verarbeitungsstufen.
  • Eine Zeitstempelabfallsammlung kann asynchron auf der obersten Verarbeitungsebene einer Hierarchie ausgeführt werden. 32 zeigt Pseudocode für einen asynchronen Zeitstempelsammelprozess, der ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Die Pseudocode-Routine verwendet drei lokal angegebene Variablen Ebene, i und ts, die in den Zeilen 3–5 angegeben sind. Der Zeitstempelabfallsammelroutine wird eine Instanz einer Zeitstempelklasse Zeitstempel zugeführt. Die Zeitstempelabfallsammelroutine führt kontinuierlich die do-while-Schleife der Zeilen 6–20 aus, um Zeitstempel zu degradieren und schließlich als Abfall zu sammeln, wenn hierarchische Verarbeitungsebenen zeitstempelzugeordnete Operationen und Aufgaben abschließen. In der for-Schleife der Zeilen 7–18 berücksichtigt die Zeitstempelabfallsammelroutine jede Verarbeitungsebene von der obersten Ebene nach unten. In der for-Schleife der Zeilen 9–17 berücksichtigt die Zeitstempelabfallsammelroutine jeden ausstehenden Zeitstempel auf der derzeit betrachteten Ebene. Falls die SCHREIB-Operation, die dem Zeitstempel zugeordnet ist, abgeschlossen wurde, wie es in Zeile 13 erfasst wird, dann wird, wenn die aktuelle Ebene die Konfigurationsebene oder die niedrigste Steuerverarbeitungsebene ist, der Zeitstempel für eine Zuordnungsaufhebung in Zeile 15 markiert. Ansonsten wird der Zeitstempel in Zeile 16 zu der nächstniedrigeren Ebene degradiert. Nach einer Betrachtung aller Zeitstempel, die allen Ebenen zugeordnet sind, wird eine Abfallsammelroutine in Zeile 20 aufgerufen, um alle Zeitstempel zu entfernen, die zur Zuordnungsaufhebung markiert sind.
  • Hierarchische Zeitstempel können in einer großen Vielzahl von unterschiedlichen hierarchisch strukturierten Verarbeitungssystemen neben FAB-Systemen Anwendung finden. Hierarchische Verarbeitungssysteme können Netzkommunikationssysteme, Datenbankverwaltungssysteme, Betriebssysteme, verschiedene Echtzeitsysteme, einschließlich Steuersysteme für komplexe Prozesse, und andere hierarchische Verarbeitungssysteme umfassen. Die 33A33F fassen ein allgemeines Verfahren, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, für eine gestufte Einschränkung des Umfangs von Zeitstempeln innerhalb eines hierarchisch organisierten Verarbeitungssystems zusammen. Wie es in 33A gezeigt ist, wird eine Anfangsanforderung 3302, die einem Zeitstempel 3304 zugeordnet ist, in einen Verarbeitungsknoten höchster Ebene 3306 eingegeben. Der Zeitstempel 3304 kann der Anforderung an einer Schnittstelle höherer Ebene zugeordnet worden sein oder kann der Anforderung durch einen Verarbeitungsknoten 3306 zugeordnet werden. Der Verarbeitungsknoten 3306 leitet dann die Anforderung abwärts durch eine Verarbeitungshierarchie weiter. Die Anforderung wird zuerst zu einem Verarbeitungsknoten 3308 zweiter Ebene weitergeleitet, der wiederum die Anforderung an zwei Verarbeitungsknoten dritter Ebene 3310 und 3312 weiterleitet, die wiederum die Anforderung an Verarbeitungsknoten vierter Ebene 3314 und 3316 weiterleiten. Die Anforderung kann an Verarbeitungsknoten auf nachfolgenden Ebenen weitergeleitet und/oder kopiert und an dieselben weitergeleitet werden.
  • Die Ebenenfelder der Zeitstempel, die den weitergeleiteten Anforderungen zugeordnet sind, wie z. B. Ebenenfeld 3318 bei Anforderung 3320, die durch den Verarbeitungsknoten 3306 an den Verarbeitungsknoten 3308 weitergeleitet wird, werden alle auf 0 gesetzt, was numerisch die oberste Ebene der Verarbeitung innerhalb der Verarbeitungshierarchie darstellt. Dann werden, wie es in 33B gezeigt ist, Antworten auf die Anforderung die Verarbeitungshierarchie hinauf zu dem Verarbeitungsknoten oberster Ebene 3306 zurückgesendet. Kopien der Anforderung bleiben jedem der Verarbeitungsknoten zugeordnet, die dieselben empfangen. Das Ebenenfeld bei den Zeitstempeln, die der Verarbeitungsanforderung zugeordnet sind, weist weiterhin den Wert 0 auf, was anzeigt, dass die Zeitstempel in der gesamten Verarbeitungshierarchie live sind. Dann bestimmt, wie es in 33C gezeigt ist, der Verarbeitungsknoten oberster Ebene 3306, der eine erfolgreiche Antwort von dem Verarbei tungsknoten der nächstniedrigeren Ebene 3308 empfangen hat, dass die Anforderung erfolgreich ausgeführt worden ist, und degradiert den Ebenenwert in dem Ebenenfeld aller Zeitstempel, die der Anforderung zugeordnet sind. Somit wurden in 33C alle Ebenenfelder aller Zeitstempel, die in der gesamten Verarbeitungshierarchie unterhalten werden oder sichtbar sind, auf den Wert „1" degradiert. Aus der Sicht des Verarbeitungsknotens oberster Ebene wurden die Zeitstempel jetzt als Abfall gesammelt und sind nicht länger live. Deshalb kann der Verarbeitungsknoten oberster Ebene nachfolgend keine Zeitstempeldisparitäten bezüglich der abgeschlossenen Operation erfassen.
  • Wie es in 33D gezeigt ist, bestimmt der Verarbeitungsknoten zweiter Ebene 3308, der erfolgreiche Antworten von Verarbeitungsknoten niedrigerer Ebene empfangen hat, dass die Anforderung erfolgreich abgeschlossen worden ist, und degradiert die Ebenenfelder aller Zeitstempel, die der Anforderung zugeordnet sind, die in der gesamten Verarbeitungshierarchie unterhalten wird, auf den Wert „2". An diesem Punkt können weder der Verarbeitungsknoten oberster Ebene 3306 noch der Verarbeitungsknoten zweiter Ebene 3308 nachfolgend Zeitstempeldisparitäten bezüglich der abgeschlossenen Operation erfassen. Wie es in den 33E und 33F gezeigt ist, wird, wenn alle ein oder mehr nachfolgenden Verarbeitungsknoten der nächstniedrigeren Ebene schlussfolgern, dass die Anforderung erfolgreich abgeschlossen worden ist, der Ebenenwert in dem Ebenenfeld aller Zeitstempel, die der Anforderung zugeordnet sind, nachfolgend degradiert, wobei nacheinander der Umfang der Zeitstempel auf immer tiefere Teile der Verarbeitungshierarchie verengt wird. Schließlich werden infolge einer Enddegradierung die Zeitstempel physisch als Abfall gesammelt.
  • Obwohl die vorliegende Erfindung hinsichtlich bestimmter Ausführungsbeispiele beschrieben wurde, soll die Erfindung nicht auf diese Ausführungsbeispiele beschränkt sein.
  • Modifizierungen innerhalb der Wesensart der Erfindung sind für Fachleute ersichtlich. Zum Beispiel enthalten hierarchische Zeitstempel zumindest ein Ebenenfeld und einen Zeitstempel oder Sequenzwert und können eine beliebige Anzahl von zusätzlichen Feldern enthalten, die für spezifische Anwendungen nützlich sind. Obwohl bei den beschriebenen Ausführungsbeispielen der Umfang von Zeitstempeln nacheinander auf tiefere Ebenen einer Verarbeitungshierarchie eingeschränkt wird, kann ein Zeitstempelumfang durch ein Verändern des Werts in dem Ebenenfeld des hierarchischen Zeitstempels gemäß vielen anderen Mustern verändert werden. Zum Beispiel kann bei alternativen Ausführungsbeispielen der Umfang des hierarchischen Zeitstempels nacheinander auf immer höhere Ebenen der Verarbeitungshierarchie eingeschränkt werden. Hierarchische Zeitstempel können auch bei nicht-hierarchischen Netzen und Graphen verwendet werden, bei denen Operationen auf hierarchische Weise ausgeführt werden. Hierarchische Zeitstempel können bei einer großen Vielzahl von unterschiedlichen Rechensystemen und Netzen verwendet werden, und Verfahren, die hierarchische Zeitstempel verwenden, können in einer im Wesentlichen unbegrenzten Anzahl von unterschiedlichen Formen codiert werden, einschließlich unterschiedlicher Routinen und Programme, die unter Verwendung von unterschiedlichen Datenstrukturen, unterschiedlichen Steuerstrukturen und unterschiedlichen modularen Organisationen mit unterschiedlichen Programmiersprachen entwickelt werden, sowie in Firmware und Hardware-Logikschaltungen. Hierarchische Zeitstempel können in einer großen Vielzahl von unterschiedlichen Speichermedien, einschließlich elektronischem Speicher, Massenspeichervorrichtungen, erzeugt und gespeichert werden und können über viele verschiedene Kommunikationsmedien übertragen werden.
  • Die vorangegangene Beschreibung verwendete zu Erläuterungszwecken eine spezifische Nomenklatur, um ein gründliches Verständnis der Erfindung zu liefern. Es ist jedoch für einen Fachmann ersichtlich, dass die spezifischen Details nicht erforderlich sind, um die Erfindung zu praktizieren. Die vorangegangenen Beschreibungen spezifischer Ausführungsbeispiele der vorliegenden Erfindung sind zu Zwecken der Veranschaulichung und Beschreibung präsentiert. Dieselben sollen nicht erschöpfend sein oder die Erfindung auf die genauen offenbarten Formen beschränken. Es ist offensichtlich, dass viele Modifizierungen und Variationen hinsichtlich der oben genannten Lehren möglich sind. Die Ausführungsbeispiele sind gezeigt und beschrieben, um die Prinzipien der Erfindung und ihre praktischen Anwendungen am besten zu erläutern, um es dadurch anderen Fachleuten zu ermöglichen, die Erfindung und verschiedene Ausführungsbeispiele mit verschiedenen Modifizierungen, wie dieselben für die bestimmte in Betracht gezogene Verwendung geeignet sind, am besten zu verwenden. Es ist beabsichtigt, dass der Schutzbereich der Erfindung durch die folgenden Ansprüche und ihre Äquivalente definiert ist.

Claims (10)

  1. Verfahren zum Verhindern einer unerwünschten Erfassung von Zeitstempeldisparitäten während einer Verarbeitung von zeitstempelzugeordneten Entitäten bei einem hierarchischen Verarbeitungssystem (9), wobei das Verfahren folgende Schritte aufweist: Verwenden von Zeitstempeln (3000), die eine Verarbeitungsebenenanzeige (3006) umfassen, wobei die Verarbeitungsebenenanzeige bei jedem Zeitstempel einen aktuellen Umfang des Zeitstempels innerhalb des hierarchischen Verarbeitungssystems widerspiegelt; und wenn eine Verarbeitung einer zeitstempelzugeordneten Entität bezüglich des Zeitstempels auf einer Verarbeitungsebene abgeschlossen ist, Verändern der Verarbeitungsebenenanzeige bei dem Zeitstempel, der der Entität zugeordnet ist.
  2. Verfahren gemäß Anspruch 1, bei dem das Verändern der Verarbeitungsebenenanzeige (3006) bei dem Zeitstempel, der der Entität zugeordnet ist, ferner einen der folgenden Schritte umfasst: Setzen der Verarbeitungsebenenanzeige auf einen niedrigeren Wert; und Setzen der Verarbeitungsebenenanzeige auf einen höheren Wert.
  3. Verfahren gemäß Anspruch 1 oder 2, das ferner folgenden Schritt aufweist: auf einer gegebenen Verarbeitungsebene, wenn auf Probleme geprüft wird, die sich auf Entitäten beziehen, die basierend auf Zeitstempeln identifiziert werden können, die den Entitäten zugeordnet sind, Betrachten nur von Zeitstempeln innerhalb eines Verarbeitungsumfangs, der durch die Verarbeitungsebenenanzeigen (3006) innerhalb der Zeitstempel (3000) angezeigt wird, der die gegebene Verarbeitungsebene umfasst.
  4. Verfahren gemäß einem der Ansprüche 1 bis 3, das bei einem verteilten Speichersystem (102109) verwendet wird, bei dem Zeitstempel Datenblöcken zugeordnet sind.
  5. Verfahren gemäß Anspruch 4, wobei das verteilte Speichersystem verbundene Speichersystemkomponenten aufweist; wobei das verteilte Speichersystem gemäß ein oder mehr Redundanzschemata Daten über Speichersystemkomponenten verteilt; und wobei die hierarchischen Verarbeitungsebenen (2802, 2806, 2810, 2814, 2818) innerhalb jedes verteilten Speichersystems eine Ausführung von Datenzugriffsoperationen bezüglich hierarchischer Ebenen von logischen Datenentitäten koordinieren.
  6. Verteiltes Speichersystem (102109), das folgende Merkmale aufweist: eine Anzahl von Speichersystemkomponenten, die durch ein oder mehr Kommunikationsmedien verbunden sind; eine hierarchische Verarbeitungslogik (2802, 2806, 2810, 2814, 2818), die durch jede der Anzahl von Speichersystemkomponenten ausgeführt wird, wobei höhere Ebenen der hierarchischen Verarbeitungslogik eine verteilte Ausführung von Datenzugriffsoperationen koordinieren und niedrigere Ebenen der hierarchischen Verar beitungslogik einen Datenzugriff innerhalb der Speichersystemkomponenten ausführen; und hierarchische Zeitstempel (3000), die Dateneinheiten zugeordnet sind, die innerhalb der Speichersystemkomponenten gespeichert sind, wobei jeder hierarchische Zeitstempel eine Verarbeitungsebenenanzeige (3006) umfasst, die den Umfang des hierarchischen Zeitstempels innerhalb der hierarchischen Verarbeitungsebenen anzeigt.
  7. Verteiltes Speichersystem gemäß Anspruch 6, bei dem, wenn eine Verarbeitung einer zeitstempelzugeordneten Dateneinheit, die sich auf den zugeordneten Zeitstempel bezieht, auf einer gegebenen Verarbeitungsebene (3006) abgeschlossen ist, die Verarbeitungsebenenanzeige bei dem Zeitstempel durch die hierarchische Verarbeitungslogik verändert wird.
  8. Verteiltes Speichersystem gemäß Anspruch 7, bei dem, wenn eine Verarbeitungsebene der hierarchischen Verarbeitungslogik auf Probleme prüft, die sich auf Dateneinheiten beziehen, die basierend auf Zeitstempeln identifiziert werden können, die den Dateneinheiten zugeordnet sind, die hierarchische Verarbeitungslogik nur auf Probleme prüft, die durch Zeitstempel innerhalb eines Verarbeitungsumfangs identifiziert werden, der durch die Verarbeitungsebenenanzeigen (3006) innerhalb der Zeitstempel angezeigt wird, der die Verarbeitungsebene umfasst.
  9. Verteiltes Speichersystem gemäß Anspruch 7 oder 8, bei dem die hierarchische Verarbeitungslogik Daten gemäß ein oder mehr Redundanzschemata über Speichersystemkomponenten verteilt; und bei dem die hierarchischen Verarbeitungsebenen (2802, 2806, 2810, 2814, 2818) der hierarchischen Verarbeitungslogik innerhalb jedes verteilten Speichersystems eine Ausführung von Datenzugriffsoperationen bezüglich hierarchischer Ebenen logischer Datenentitäten koordinieren.
  10. Verteiltes Speichersystem gemäß einem der Ansprüche 7 bis 9, bei dem Zeitstempel (3000) Datenblöcken zugeordnet sind, die in internen Speicherkomponenten der Speichersystemkomponenten des verteilten Speichersystems gespeichert sind; und bei dem eine hierarchische Verarbeitungsebene der hierarchischen Verarbeitungslogik (2802, 2806, 2810, 2814, 2818) innerhalb jedes verteilten Speichersystems Zeitstempel von redundanten Kopien eines Datenblocks, die innerhalb unterschiedlicher Speichersystemkomponenten gespeichert sind, vergleicht, um fehlende Datenübereinstimmungen zu erfassen.
DE102007010250A 2006-03-06 2007-03-02 Hierarchische Zeitstempel Withdrawn DE102007010250A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/369,681 US7644308B2 (en) 2006-03-06 2006-03-06 Hierarchical timestamps
US11/369,681 2006-03-06

Publications (1)

Publication Number Publication Date
DE102007010250A1 true DE102007010250A1 (de) 2007-09-13

Family

ID=38336259

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102007010250A Withdrawn DE102007010250A1 (de) 2006-03-06 2007-03-02 Hierarchische Zeitstempel

Country Status (4)

Country Link
US (1) US7644308B2 (de)
JP (1) JP2007242016A (de)
CN (1) CN101034339B (de)
DE (1) DE102007010250A1 (de)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8290899B2 (en) * 2007-03-28 2012-10-16 Netapp, Inc. Group stamping style asynchronous replication utilizing a loosely-accurate global clock
JP4804408B2 (ja) * 2007-04-17 2011-11-02 株式会社日立製作所 ログ解析方法及び装置
JP5064134B2 (ja) * 2007-08-03 2012-10-31 株式会社日立製作所 メモリ管理方法およびその方法を用いるコンピュータ
US8949614B1 (en) * 2008-04-18 2015-02-03 Netapp, Inc. Highly efficient guarantee of data consistency
US8655848B1 (en) 2009-04-30 2014-02-18 Netapp, Inc. Unordered idempotent logical replication operations
US8321380B1 (en) 2009-04-30 2012-11-27 Netapp, Inc. Unordered idempotent replication operations
US8671072B1 (en) 2009-09-14 2014-03-11 Netapp, Inc. System and method for hijacking inodes based on replication operations received in an arbitrary order
US8473690B1 (en) 2009-10-30 2013-06-25 Netapp, Inc. Using logical block addresses with generation numbers as data fingerprints to provide cache coherency
US8799367B1 (en) 2009-10-30 2014-08-05 Netapp, Inc. Using logical block addresses with generation numbers as data fingerprints for network deduplication
US8495107B2 (en) * 2011-06-23 2013-07-23 Oracle International Corporation System and method for use with garbage collected languages for enabling the allocated heap memory to be updated at runtime
EP2863566B1 (de) 2013-10-18 2020-09-02 Université de Nantes Verfahren zur Rekonstruktion eines Datenblocks und Vorrichtung zur Verwendung davon
US10505818B1 (en) 2015-05-05 2019-12-10 F5 Networks. Inc. Methods for analyzing and load balancing based on server health and devices thereof
EP3226184A1 (de) * 2016-03-30 2017-10-04 Tata Consultancy Services Limited Systeme und verfahren zur bestimmung und gleichrichtung von ereignissen in verfahren
US10469394B1 (en) 2016-08-01 2019-11-05 F5 Networks, Inc. Methods for configuring adaptive rate limit based on server data and devices thereof
US11334277B2 (en) * 2020-04-07 2022-05-17 Vmware Inc. Issuing efficient writes to erasure coded objects in a distributed storage system with two tiers of storage
US11625370B2 (en) 2020-04-07 2023-04-11 Vmware, Inc. Techniques for reducing data log recovery time and metadata write amplification
US11467746B2 (en) 2020-04-07 2022-10-11 Vmware, Inc. Issuing efficient writes to erasure coded objects in a distributed storage system via adaptive logging
US11334276B2 (en) * 2020-04-07 2022-05-17 Vmware Inc. Using segment pre-allocation to support large segments
US11474719B1 (en) 2021-05-13 2022-10-18 Vmware, Inc. Combining the metadata and data address spaces of a distributed storage object via a composite object configuration tree

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4714992A (en) * 1985-11-26 1987-12-22 International Business Machines Corporation Communication for version management in a distributed information service
JPH03130842A (ja) * 1989-10-17 1991-06-04 Toshiba Corp データベースシステムの同時実行制御装置
US5175856A (en) * 1990-06-11 1992-12-29 Supercomputer Systems Limited Partnership Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution
US5684807A (en) * 1991-04-02 1997-11-04 Carnegie Mellon University Adaptive distributed system and method for fault tolerance
US5701480A (en) * 1991-10-17 1997-12-23 Digital Equipment Corporation Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing
EP0548381B1 (de) * 1991-12-18 1997-11-26 Siemens Aktiengesellschaft Verfahren zur Uhrzeitführung in Computernetzen
US5471631A (en) * 1992-10-19 1995-11-28 International Business Machines Corporation Using time stamps to correlate data processing event times in connected data processing units
WO1994025913A2 (en) * 1993-04-30 1994-11-10 Novadigm, Inc. Method and apparatus for enterprise desktop management
US5832487A (en) * 1994-12-15 1998-11-03 Novell, Inc. Replicated object identification in a partitioned hierarchy
US5924094A (en) * 1996-11-01 1999-07-13 Current Network Technologies Corporation Independent distributed database system
US6125368A (en) * 1997-02-28 2000-09-26 Oracle Corporation Fault-tolerant timestamp generation for multi-node parallel databases
US6065018A (en) * 1998-03-04 2000-05-16 International Business Machines Corporation Synchronizing recovery log having time stamp to a remote site for disaster recovery of a primary database having related hierarchial and relational databases
EP0982970B1 (de) * 1998-08-21 2006-10-04 Nippon Telegraph and Telephone Corporation ATM-Vermittlungsstelle
US6301643B1 (en) * 1998-09-03 2001-10-09 International Business Machines Corporation Multi-environment data consistency
US6516327B1 (en) * 1998-12-24 2003-02-04 International Business Machines Corporation System and method for synchronizing data in multiple databases
US6393419B1 (en) * 1999-02-08 2002-05-21 Telefonaktiebolaget Lm Ericsson (Publ) Multipoint database synchronization protocol to avoid data corruption
US7206805B1 (en) * 1999-09-09 2007-04-17 Oracle International Corporation Asynchronous transcription object management system
US6748555B1 (en) * 1999-09-09 2004-06-08 Microsoft Corporation Object-based software management
US6574749B1 (en) * 1999-10-29 2003-06-03 Nortel Networks Limited Reliable distributed shared memory
AU2001286145A1 (en) * 2000-07-10 2002-01-21 It Masters Technologies S.A. System and method of enterprise systems and business impact management
US6883170B1 (en) * 2000-08-30 2005-04-19 Aspect Communication Corporation Method and system to maintain a hierarchy of instantiated application objects and to enable recovery from an applications failure
US7272720B2 (en) * 2000-09-27 2007-09-18 Fujitsu Limited Date-and-time management device and signature generation apparatus with date-and-time management function
US6721856B1 (en) * 2000-10-26 2004-04-13 International Business Machines Corporation Enhanced cache management mechanism via an intelligent system bus monitor
EP1239369A1 (de) * 2001-03-07 2002-09-11 Siemens Aktiengesellschaft Fehlertolerante Rechneranordnung und Verfahren zum Betrieb einer derartigen Anordnung
US7293028B2 (en) * 2001-06-08 2007-11-06 Sap Ag Cache-conscious concurrency control scheme for database systems
US6754657B2 (en) * 2001-08-24 2004-06-22 Microsoft Corporation Time stamping of database records
US7180915B2 (en) * 2001-12-21 2007-02-20 Nokia Corporation Apparatus, and an associated method, for facilitating synchronization in a wireless mesh network
EP1489508B1 (de) * 2002-03-22 2008-01-09 Toyota Jidosha Kabushiki Kaisha Taskverwaltungseinrichtung und -verfahren , betriebsbeurteilungseinrichtung und verfahren und zu beurteilendes programm
US7926066B2 (en) * 2002-07-09 2011-04-12 Openpages, Inc. Adaptive content platform and application integration with the platform
US6842825B2 (en) * 2002-08-07 2005-01-11 International Business Machines Corporation Adjusting timestamps to preserve update timing information for cached data objects
GB2392588A (en) * 2002-08-24 2004-03-03 Zarlink Semiconductor Ltd Adaptive TDM clock recovery using timestamps
US7372857B1 (en) * 2003-05-28 2008-05-13 Cisco Technology, Inc. Methods and apparatus for scheduling tasks
US20050022213A1 (en) * 2003-07-25 2005-01-27 Hitachi, Ltd. Method and apparatus for synchronizing applications for data recovery using storage based journaling
JP3791921B2 (ja) * 2003-07-04 2006-06-28 インターナショナル・ビジネス・マシーンズ・コーポレーション ネットワーク・トレースを解析する方法、ネットワーク・トレースを解析するための処理装置、および該処理装置としてコンピュータを制御させるためのコンピュータ実行可能なプログラム、並びにネットワークにおけるノード間の時間差補正方法
US7139784B2 (en) 2003-07-29 2006-11-21 Hewlett-Packard Development Company, L.P. Dead timestamp identification and elimination
US7366725B2 (en) * 2003-08-11 2008-04-29 Descisys Limited Method and apparatus for data validation in multidimensional database
US7251748B2 (en) * 2003-09-12 2007-07-31 Sun Microsystems, Inc. System and method for determining a global ordering of events using timestamps
US7281023B2 (en) * 2003-12-15 2007-10-09 At&T Knowledge Ventures, L.P. Architecture of database application with robust online recoverability
US7707588B2 (en) * 2004-03-02 2010-04-27 Avicode, Inc. Software application action monitoring
US7088229B2 (en) * 2004-06-14 2006-08-08 Oracle International Corporation Methods and systems for verifying the position and status of hierarchically arranged objects
US7424499B2 (en) * 2005-01-21 2008-09-09 Microsoft Corporation Lazy timestamping in transaction time database

Also Published As

Publication number Publication date
US7644308B2 (en) 2010-01-05
CN101034339B (zh) 2010-11-03
CN101034339A (zh) 2007-09-12
JP2007242016A (ja) 2007-09-20
US20070208839A1 (en) 2007-09-06

Similar Documents

Publication Publication Date Title
DE102007010250A1 (de) Hierarchische Zeitstempel
DE102007009233A1 (de) Datenzustandsbeschreibungs-Datenstrukturen
JP4541373B2 (ja) 分散データの階層的管理のための方法及びシステム
JP4516087B2 (ja) 一貫性方法及び一貫性システム
US7743276B2 (en) Sufficient free space for redundancy recovery within a distributed data-storage system
DE69724834T2 (de) System für hochverfügbare datenspeicherung mit allgemein-adressiertem speicher
US20070208790A1 (en) Distributed data-storage system
Plank Efficient checkpointing on MIMD architectures
DE69911930T2 (de) Hochverfügbare dateiprozessoren
DE69614383T2 (de) Kontinuierlich verfügbarer datenbankserver mit mehreren knotengruppen mit sich minimal überschneidenden sätzen von datenbankteilkopien
DE202015009267U1 (de) Priorisierung von Datenrekonstruktion in verteilten Speichersystemen
Borthakur et al. Apache hadoop goes realtime at facebook
DE69804099T2 (de) Initialisierung von unterteilten datenobjekten
JP6144819B2 (ja) 不揮発性メモリシステムにおける同期ミラーリング
US10430298B2 (en) Versatile in-memory database recovery using logical log records
Wang et al. xFS: A wide area mass storage file system
DE202015009260U1 (de) Effiziente Datenlesungen von verteilten Speichersystemen
DE69800808T2 (de) Redundantes, verteiltes Netzwerksystem
DE69700637T2 (de) Host-basierendes RAID-5 und nicht flüchtige RAM-Integration und Verfahren hierfür
US5737763A (en) Incremental disk backup
DE102014117465A1 (de) Unterstützter kohärenter gemeinsamer Speicher
DE112019000201T5 (de) Speichersysteme mit peer-datenbereinigung
Hisgen et al. Granularity and semantic level of replication in the Echo distributed file system
DE112018001561B4 (de) Verteiltes speichernetzwerk
CN111552730A (zh) 数据分发方法、装置、电子设备、存储介质

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20131001