-
Die Erfindung betrift Plattenanordnungs-Steuereinrtchtungen
und insbesondere Plattenanordnungs-Steuereinrichtungen, die eine
Online-Rekonfiguration einer Plattenanordnung durchführen.
-
Mit der Verbreitung von preiswerten
Personal Computern sind lokale Netzwerke (LANs) als Kommunikationsnetze,
die relativ große
Zahlen von Personal Computern oder Workstations verbinden, sehr
beliebt geworden. Ein LAN umfasst typischerweise einen oder mehr
Datei-Server, die
als Speichermittelpunkte für
Daten wirken, wobei Kopien der Daten auf Verlangen an die Workstations übermittelt und
aktualisierte Daten zur Speicherung zurückgegeben werden. In vielen
Anwendungen müssen
die Daten auf den Datei-Servern ständig zugänglich sein. Wenn ein Datei-Server
aus irgendeinem Grund "offline" genommen wird, wären die
Daten auf dem Datei-Server vorübergehend
unverfügbar,
was Geschäftsvorgänge stören kann.
-
Um das optimale Preis/Leistungs-Verhältnis zu
erreichen, werden Datei-Server mit einer Sammlung von relativ keinen
und billigen Festplattenlaufwerken implementiert. Mit der erhöhten Zahl
verwendeter Plattenlaufwerke nimmt jedoch die Fehlerrate dramatisch
zu. Verschiedene Lösungen
für das
Datenfehlerproblem sind verfügbar.
Die einfachste Lösung
besteht dann, vollständig
redundante Plattenlaufwerke bereitzustellen, was als Spiegelung
bezeichnet wird. Ein Problem bei dem Spiegeln ist die Speicherungs-Effizienz,
da eine Hälfte
der verfügbaren
Kapazität
für Redundanz
benutzt wird. Andere, effizientere Lösungen sind vorgeschlagen worden, z.B.
die in David E. Peterson et al., "A Case for Redundant Arrays of Inexpensive
Disks (RAID)", Report Nr.
UCB/CSD 87/391 (Dez. 1987). Verschiedene RAID-Schutzschemas werden
beschrieben. Die Architektur von RAID 1 betrifft den traditionellen
Weg der gespiegelten Platten. In der Architektur von RAID 4 werden
Pantätsplatten
verwendet, die Päritätsinformation
speichern, die benutzt wird, um Daten, auf die zugegriffen wird,
auf Fehler zu prüfen.
Die Architektur von RAID 5 ist eine Verbesserung an der
Architektur von RAID 4, wobei die Päritätsinfonnation über alle Platten
verteilt wird, um eine größere Parallelität zu erzielen.
-
Wenn die Datenspeicheranforderungen
eines Benutzers zunehmen, muss die Gesamtspeicherkapazität auf dem
LAN erhöht
werden. Ein Verfahren, die Speicherkapazität auf dem LAN zu erhöhen, besteht
dann, einen neuen Datei-Server an das LAN anzuschließen. Dies
ist jedoch eine relativ teure Lösung,
das ein ganzer Datei-Server gekauft werden muss. Ein alternatives
Verfahren, die Speicherkapazität
zu erhöhen,
besteht dann, einem bestehenden Datei-Serversystem Festplattenlaufwerke
hinzufügen.
Normalerweise werden die Festplattenlaufwerke eines Datei-Serversystems
in logischen Datenträgem
angeordnet. Um zu verhindern, dass ein Datei-Server in einem LAN
offline genommen wird, wird gegenwärtig ein neu hinzugefügtes Festplattenlaufwerk
als ein neuer, getrennter Datenträger konfiguriert, weil er nicht
einfach der Anordnungskonfiguration in einer RAID4- oder RAID5-Konfiguration
hinzugefügt
werden kann, weil das Netzwerkbetriebssystem Änderungen der Größe von logischen
Datenträgern
online nicht handhaben kann. Neue Laufwerke können daher der bestehenden
Anordnung nicht hinzugefügt
werden, und wenn ein Fehlertoleranzschema für das oder die neuen Laufwerke
verwendet werden soll, wird ein neuer logischer Datenträger definiert,
und einige der neuen logischen Laufwerke in dem neuen Datenträger müssten für Redundanzzwecke
benutzt werden. Die neu hinzugefügten
redundanten Laufwerke tragen nicht zu der Gesamtspeicherkapazität des Datei-Servers
bei, was die Effizienz verringert.
-
Ein alternatives Verfahren, ein Laufwerk
einer als eine RAID4- oder RAID5-Anordnung konfigurierten Anordnung
hinzufügen,
besteht darin, einen Sichern-Rekonfigurieren-Wedefierstellen-Prozess
zu verwenden. Dies erlaubt neu hinzugefügten Festplatten, einen größeren logischen
Datenträger
zu bilden. Der Prozess verlangt das Nehmen des Datei-Servers offline,
Sichern der auf den bestehenden Fetsplattenlaufwerken gespeicherten
Daten auf Band, Rekonfigurieren der physikalischen Plattenlaufwerke,
einschließlich
der neuen Plattenlaufwerke, in einen neuen logischen Datenträger, Wiederherstellen
der Daten von der Bandsicherung zurück auf die rekonfigurierten
logischen Datenträger
und Bringen des Datei-Servers zurück online. Ein Hauptnachteil
des Sichern-Rekonfigurieren-Wiedefierstellen-Prozesses ist, dass der Datei-Server
offline genommen werden muss, wodurch die Daten auf dem Datei-Server
unverfügbar
gemacht werden. Ein anderer Nachteil ist, dass der Sichern-Rekonfigurieren-Wederherstellen-Prozess
zu seiner Durchführung
eine große
Menge an Zeit benötigt.
-
Es ist somit erwünscht, dass eine Lösung entwickelt
wird, um die beim Hinzufügen
eines Plattenlaufwerks oder -laufwerken zu einer bestehenden RAID4-
oder RAID5-Anordnung angetroffenen Probleme zu überwinden, sodass die Laufwerke
hinzugefügt
werden konnten, während
der Datei-Server online ist.
-
US
5,615,352 offenbart ein Verfahren zum Vergrößern der
Speicherkapazität
eines hierarchischen Plattenanordnungs-Datenspeichersystems, das
Daten entprechend verschiedener Redundanzstufen oder RAID-Stufen
speichert.
-
In der folgenden Beschreibung der
bevorzugten Ausführung
der vorliegenden Erfindung ist die gebrauchte Terminologie wie folgt
definiert. Wenn eine Plattenanordnung entweder durch Hinzufügen oder
Entfernen eines Plattenlaufwerks rekonfiguriert wird, werden Daten
in der Plattenanordnung umgeordnet. Ein logischer Quellen-Datenträger wird
in einen logischen ZielDatenträger
rekonfiguriert, d. h., Daten in dem logischen Quellen-Datenträger werden in
den logischen Ziel-Datenträger übertragen.
Der logische Quellen-Datenträger
betrifft daher den auf dem ursprünglichen
Satz von Laufwerken definierten logischen Datenträger. Der
logische Ziel-Datenträger betrifft
den auf dem neuen Satz von Plattenlaufwerken definierten logischen
Datenträger.
Plattenanordnungs-Rekonfiguration betrifft den Prozess des Änderns der
Zahl von Laufwerken, die einem bestehenden logischen Datenträger zugewiesen
ist, während die
Größe des logischen
Datenträgers
unverändert bleibt.
Plattenanordnungs-Erweiterung ist eine Untermenge der Platenanordnungs-Rekonfiguration
und betrifft den Prozess des Hinzufügens eines neuen Laufwerks
oder Laufwerken zu einer bestehenden Plattenanordnung. Ein neuer
logischer Datenträger betrifft
den logischen Datenträger,
der in dem überschüssigen Raum
erzeugt wird, der aus dem Hinzufügen
von Laufwerken zu der bestehenden Laufwerksanordnung resultiert.
Es wird auch angemerkt, dass in einer gegebenen Plattenanordnung
mehr als ein logischer Datenträger
vorhanden sein kann.
-
Eine Plattensteuereinheit nach der
vorliegenden Erfindung führt
eine Online-Rekonfiguration von RAID1-, RAID4- oder RAIDS- Plattenanordnungen
in einem Festplattenlaufwerkssystem durch. Die Erweiterung der Plattenanordnung
kann erforderlich sein, wenn dem System ein neues physikalisches Laufwerk
hinzugefügt
wird. In einer Abkehr von Systemen des Stands der Technik führt die
Plattensteuereinheit nach der vorliegenden Erfindung die Plattenanordnungs-Erweiterung
durch, während
das System online ist, d. h., gespeicherte Daten bleiben für Host-Lese-
oder Schreibzyklen von den Festplattenlaufwerken verfügbar. Im
Grunde wird die neue Plattenanordnung neu definiert, um den früheren logischen
Datenträger
und den neuen logischen Datenträger
zu bilden, wobei der neue logische Datenträger in dem überschüssigen Raum gebildet wird, der
aus dem Hinzufügen
der neuen Plattenlaufwerke resultiert. Aber beide dieser logischen
Datenträger werden über die
vergrößerte Plattenanordnung
verstreut. In dem Erweiterungsprozess, bei dem Daten in dem früheren logischen
Datenträger über den
neuen Satz von Plattenlaufwerken verstreut werden, beginnt der frühere logische
Datenträger
als ein logischer Quellen-Datenträger und wird in einen logischen
Ziel-Datenträger
rekonfiguriert, d. h., Daten in dem logischen Quellen-Datenträger werden
zu Daten in dem logischen Ziel-Datenträger bewegt. Die Konfigurationsparameter
des logischen Quellen-Datenträgers
unterscheiden sich auch von den Parametern des logischen Ziel-Datenträgers, einschließlich der
Parameter, die die Zahl von Plattenlaufwerken in dem Datenträger, die
Streifengröße, den
Fehlertoleranzmodus und andere Parameter darstellen.
-
Des Weiteren ist, wenn ein Platenlaufwerk aus
einer Plattenanordnung zu entfernen ist, die Plattenanordnungs-Rekonfiguration
möglich,
wenn freier Platz vorhanden ist, um den logischen Datenträger unter
den übrigen
Plattenlaufwerken einzuordnen. Die Menge an verfügbarem freien Platz muss mindestens
gleich der Menge an Daten in dem logischen Datenträger sein,
die auf dem zu entfernenden Plattenlaufwerk gespeichert sind.
-
Die Plattensteuereinheit der bevorzugten Ausführung enthält einen
Eintragunsspeicher. Ein Bereich des Eintragungsspeichers wird zugeordnet, um
die Rekonfiguration durchzuführen.
Die Rekonfiguration erfolgt vorzugsweise ein Streifen zu einer Zeit,
wobei die Streifengröße diejenige
des Ziel-Datenträgers
ist. Unter Verwendung der Konfigurationsinformation des logischen
Quellen-Datenträgers
wird ein Streifen von Daten in den zugeteilten Bereich in dem Eintragungsspeicher übertragen.
Dann wird unter Verwendung der Konfigurationsinformation des logischen
Ziel-Datenträgers
der Streifen von Daten von dem Eintragungsspeicher in die neue Plattenanordnung übertragen.
Der Prozess wird wiederholt, bis alle vorhandenen Daten in dem logischen
Quellen-Datenträger
in den logischen Ziel-Datenträger übertragen
worden sind. Während
der Rekonfigurationsprozess abläuft,
werden Lese- und Schreib-Anforderungen von dem Host-Computersystem
durch die Plattensteuereinheit gehandhabt, die eine Prüfung durchführt, um
festzustellen, ob die Anforderung Blöcken gilt, die bereits rekonfiguriert
wurden. Wenn ja, wird die Lese- oder Schreib-Anforderung mittels der
Konfigurationsinformation des logischen Ziel-Datenträgers durchgeführt. Wenn
die Blöcke,
auf die zugegriffen wird, noch nicht rekonfiguriert worden sind, wird
die Konfigurationsinformation des logischen Quellen-Datenträgers benutzt,
um die Anforderung auszuführen.
Eine Anforderung kann auch Blöcke überspannen,
die noch nicht rekonfiguriert wurden, und solche, die rekonfiguriert
wurden. In diesen Fällen
wird die Host-Anforderung suspendiert, bis der Plattenanordnungs-Rekonfigurationsprozess
in der Lage ist, nachzukommen.
-
Wenn eine Erweiterung vollendet ist,
wird ein neuer logischer Datenträger
aus dem Endteil jedes Laufwerks in der Laufwerksanordnung erzeugt,
um einen neuen logischen Datenträger
zu bilden, der in dem überschüssigen Raum
definiert wird, der aus dem Hinzufügen des neuen Plattenlaufwerks
entsteht. Dieser neue logische Datenträger wird dem Netzwerkbetriebssystem
mitgeteilt und als neuer Datenträger
montiert.
-
Ein besseres Verständnis der
vorliegenden Erfindung kann erreicht werden, wenn die folgende ausführliche
Beschreibung der bevorzugten Ausführung in Verbindung mit den
folgenden Zeichnungen betrachtet wird. Inhalt der Zeichnungen:
-
1 ist
ein Blockschaltbild einer Plattensteuereinheitsplatine nach der
vorliegenden Erfin dung.
-
2A-2H veranschaulichen
Plattenanordnungs-Rekonfigurationsoperationen, die von der Plattensteuereinheitsplatine
von 1 nach der bevorzugten
Ausführung
der vorliegenden Erfindung durchgeführt werden.
-
3A-3C sind
ein Flussdiagramm einer festgelegten Konfigurationsroutine, die
die Rekonfigurationsoperation nach der vorliegenden Erfindung anfordert.
-
4 ist
ein Flussdiagramm einer Routine zum Einreihen von Plattenrekonfigurationsanforderungen
in eine Queue.
-
5 ist
ein Flussdiagramm einer Hintergrund-Planungstask, die bestimmt,
ob eine Rekonfigurierungstask benötigt wird.
-
6A-6D sind
ein Flussdiagramm der Rekonfigurierungstask nach der vorliegenden
Erfindung.
-
7A-7B sind
ein Flussdiagramm einer Routine zum Behandeln von logischen Anforderungen.
-
8 ist
ein Flussdiagramm einer Routine zum Bestimmen, an welchen logischen
Datenträger ein
logische Anforderung gerichtet ist.
-
9 ist
ein Flussdiagramm einer Routine zum Wiederaufnehmen einer durch
Stromausfall unterbrochenen Rekonfigurierungsoperation.
-
Nun auf 1 verweisend wird ein Blockschaltbild
der endungsgemäßen Plattensteuereinheit 10 gezeigt.
Die Plattensteuerplatine 10 ist entweder mit einem EISA-Bus
oder einem PCI-Bus 100 verbunden, der enthalten ist und
den Übertragungskanal zu
den anderen Komponenten eines Host-Computersystems 101 bereitstellt.
Zu Zwecken der verbleibenden Erörterung
wird ein EISA-Bus 100 benutzt werden. Die Plattensteuerplatine 10 umfasst
einen PCI-Lokalbus 102, der einen Steuerteil und einen
gemultiplexten Adress- und Datenteil enthält. Zu einer Beschreibung des
PCI-Bus-Standards siehe PCI Specification, Revision 2.0,
Intel Corporation (April 1993), die hiermit durch Verweis eingeschlossen wird.
-
Eine PCI-EISA-Brücke
104 ist zwischen
den EISA-Bus
100 und den PCI-Lokalbus
102 geschaltet. Wenn
aber stattdessen ein PCI-Bus
100 benutzt wird, würde eine
PCI-PCI-Brücke
104 verwendet werden.
Die PCI-EISA-Brücke
104 ist
sowohl eine Master- als auch Slave- Einrichtung auf sowohl dem PCI-Bus
102 als
auch dem EISA-Bus
100 und fungiert als ein Puffer, eine Übersetzungseinheit
und ein PCI-Arbiter. Die Brücke
104 enthält eine
Anzahl FIFOs zur Optimierung der Datenübertragungen von EISA-Slaves
an PCI-Busmaster. Auf der EISA-Seite werden Datenübertragungen
von dem Brücken-EISA-Busmaster
gesteuert. Auf der PCI-Seite werden Datenübertragungen durch die PCI-Slave-Logik
gehandhabt. Jedem PCI-Busmaster, der mit der Brücke
104 kommuniziert,
ist ein FIFO zugeordnet. Ein PCI-Master
könnte
daher grade aus einem FIFO lesen, während ein FIFO für einen
anderen PCI-Master grade
von dem Brücken-EISA-Busmaster
beschrieben wird. Während
eines Plattenlesevorgangs wird ein PCI-Master Daten in den Brücken-FIFO
zur nachfolgenden Rückgewinnung
durch den Brücken-EISA-Busmaster
schreiben. Während
eines Plattenschreibvorgangs wird ein PCI-Master Daten vom Hostspeicher
lesen, und die Brücken-EISA-Busmastersteuerung
wird vorauslesen, um die FIFOs gefüllt zu halten, um so lange
Stoß-Lesungen
zu ermöglichen.
Weitere Einzelheiten der Operation der FIFOs werden in US Patentnummer
US 5,809,280 bereitgestellt.
Die Brücke
104 enthält auch
Logik, um Unterbrechungen vom PCI-Bus an den EISA-Bus zu übersetzen
und die Unterbrechungen zu maskieren, bis Daten die FIFOs löschen.
-
Die Plattensteuerplatine 10 umfasst
auch einen lokalen Prozessor 106, bevorzugt einen AMD 29030 Prozessor,
der die Funktionen der Plattensteuerplatine 10 steuert.
Der lokale Prozessor 106 ist mit einem lokalen Speicher 108 verbunden,
und sowohl der lokale Prozessor 106 als auch der lokale Speicher 108 sind über eine
Prozessor-PCI-Brücke 110 mit
dem PCI-Lokalbus 102 verbunden. Der lokale Prozessor 106 führt im lokalen
Speicher 108 gespeicherte Firmware aus, um verschiedene
Plattensteuerfunktionen durchzuführen.
-
Die Prozessor-PCI-Brücke 110 wird
vorzugsweise mit einem ASIC implementiert. Die Prozessor-PCI-Brücke 110 enthält Logik
zum Umwandeln von Prozessorspeicher- oder E/A-Zyklen in PCI-Zyklen sowie Prozessor-an-PCI-Schreib-Eintragungsspeicher.
Die Brücke 110 umfasst
auch eine DRAM-Steuereinheit zum Steuern von Operationen an den
lokalen Speicher 108. Außerdem sind Intervall-Zeitgeber
und eine Unterbrechungs-Steuereinheit in der Brücke 110 enthalten.
-
Ebenfalls mit dem PCI-Lokalbus 102 verbunden
ist eine Mehrzahl von SCSI-Steurunungen 112A-E zum Anschließen eines
Plattenanordnungs-Untersystems 142, das eine Mehrzahl von Festplattenlaufwerken
umfasst. Die bevorzugte Ausführung
kann so konfiguriert werden, dass sie bis zu 5 SCSI-Steuerungen
112A-E umfasst, die vorzugsweise 53C825 PCI-SCSI-E/A-Prozessoren von NCR Corporation
sind. Zu einer vollen Beschreibung des 53C-825-Prozessors siehe NCR 53C825 PCI-SCSI I/O
Processor With Local ROM Interface, Da to Manual, NCR Corp. (1993).
-
Jede der SCSI-Steuerungen 112A-E
ist mit einem von fünf
Sätzen
von Plattenlaufwerken 114A-E über
Stecker 113A-E verbunden. Jede SCSI-Steuerung 112 ist vorzugsweise
in der Lage, mit fünf
internen SCSI-Festplattenlaufwerken oder sieben externen SCSI-Festplattenlaufwerken
verbunden zu werden. Jeder Satz von Laufwerken 114A-E ist mit einem Mikrocontroller 140A,
B, C, D oder E verbunden. Die Mikrocontroller 140A-E werden vorzugsweise
mit dem 8051 Prozessor von Intel Corp. implementiert. Die Mikrocontroller
140A-E stellen bestimmte verschiedene Steuerfunktionen für jeden
Satz von Laufwerken bereit, z.B. Treiben von Status-LEDs und Durchführen einer
Temperaturüberwachung.
Zu einem exemplarischen Mikrocontroller siehe Patentanmeldung Nr.
07/955,669 betitelt "Method
of Communicating with a SCSI Bus Device That Does Not Have an Assigned
SCSI Address", eingereicht
am 2. Oktober 1992 und hiermit durch Verweis eingeschlossen. Übertragungen
zwischen den SCSI-Steuerungen 112A-E und den physikalischen Laufwerken
114A-E werden über
SCSI-Busse bewerkstelligt.
-
Anforderungen, die von dem Host-Computersystem
ausgegeben werden, werden an die Prozessor-PCI-Brücke 110 gesendet.
Zeiger werden in die Prozessor-PCI-Brücke 110 geschrieben,
die durch Rückgewinnen
der Befehle von der durch die Zeiger spezifizierten Stelle im Hostspeicher
antwortet. Die Prozessor-PCI-Brücke 110 unterbricht
dann den lokalen Prozessor, um anzuzeigen, dass Host-Anforderungen
vorhanden sind. Als Reaktion erstellt der lokale Prozessor 106 eine
Befehlsliste, um die verlangten Befehle auszuführen. Abhängig von der Art der Operation
sendet der lokale Prozessor 106 Befehlsbeschreibungsblöcke (CDBs)
an die DRAM-Schnittstelle 118 oder eine der SCSI-Steuerungen
110A-E. Als Reaktion erlangt die DRAM-Schnittstelle 118 oder
die SCSI-Steuerung 110 die Kontrolle des PCI-Busses 102,
um die verlangte Operation auszuführen.
-
Ein Eintragungsspeicher 116,
vorzugsweise mit DRAM-Chips implementiert, wird als Puffer für eingetragene
Schreibungen sowohl für
das Host-Computersyseen als auch einen Vorauslese-Puffer benutzt.
Das DRAM 116 ist über
einen Speicherdatenbus MD, einen Speichersteuerbus MC und einen
Speicheradressbus MA mit einer DRAM-Schnittstelle 118 verbunden,
die wiederum mit dem PCI-Lokalbus 102 verbunden ist. Das
DRAM 116 ist vor ugsweise konfigurierbar, um bis zu 64
MB Daten zu speichern. Durch Eintragen von Schreibungen in dem DRAM 116 werden
mit dem Schreiben von Daten auf das Festplatten-Untersystem 142 verbundene
Wartezeiten vermieden, was den Datenübertragungsdurchsatz verbessert.
Um bei einem Stromausfall den Verlust von Daten zu verhindern, werden
Teile des DRAM
116 batteriegestützt. Die Batteriestützung ist
erforderlich, da das Host-Computersystem bereits davon ausging,
dass die Daten permanent in den Festplattenlaufwerken 114A-E gespeichert
worden sind. Durch Batteriestützen
des DRAM 116 können
Daten aus dem DRAM 116 wiedergewonnen werden, nachdem die
Stromversorgung für das
Computersystem wiederhergestellt ist. Stützstrom wird von einer mit
Lithium-Batterien 144 verbundenen Stromsteuerschaltung 146 bereitgestellt.
-
Wenn der Strom vom Host-Computersystem verlorengeht,
schaltet die Stromsteuerschaltung 146 die Stromversorgungsspannungseingänge des DRAM 116 auf
die Batterien 144. Das Vorauslese-Puffem erlaubt eine verbesserte
Leistung, wenn sequentielle Operationen vorkommen. Weitere Einzelheiten über die
Vorauslesespeicherung werden in US Patentnummer 5,809,560 bereitgestellt.
-
Die DRAM-Schnittstelle 118 unterstützt verschiedene
Konfigurationen des DRAM 116. Vorzugsweise hat das DRAM 116 eine
maximale Kapazität von
64 MB, wobei der DRAM-Schnittstelle
118 128 MB zugeordnet werden, von denen eine Hälfte der normale Adressbereich
ist, und die andere Hälfte
der XOR-Adressbereich ist. Die Breite des Speicherdatenbusses MD
zwischen der DRAM-Schnittstelle 188 und dem DRAM 116 kann
entweder als 32 Bit oder 64 Bit gewählt werden. Zusätzlich können bis
zu vier Speicherbänke
verwendet werden. Bevorzugt werden drei Arten von Speicherchips
benutzt: 256 K × 18 DRAM-Chips
zum Unterstützen
von bis zu 512 KB Speicherkapazität; 512 K × 8 oder × 9 DRAM-Chips zum Unterstützen einer
Gesamt-DRAM-Kapazität von
1, 2, 4, 8, 16 oder 32 MB und 2 M × 8 DRAM-Chips zum Unterstützen einer Gesamt-Speicherkapazität von 16,
32, 48 oder 64 MB. Die DRAM-Schnittstelle 118 ist konfigurierbar,
um entweder eine 8-Bit Fehlererkennung und -Korrektur (ECC) oder
einen Paritätsschutz
von DRAM-Daten durchzuführen.
-
Für
die DRAM-Konfigurationen, die die 256 K × 18 DRAM-Chips oder 512 K × 8 oder × 9 verwenden,
unterscheidet das Adressbit 24 zwischen dem normalen Adressbereich
und dem XOR-Adressbereich.
Der XOR-Adressbereich wird gewählt,
wenn das Adressbit 24 hoch gesetzt ist. Bei den DRAM-Konfigurationen,
die 2 M × 8
DRAM-Chips verwenden, unterscheidet das Adressbit 26 zwischen der
Lesen-Modifizieren-Schreiben-XOR-Operation und der normalen Schreiboperation.
-
Das DRAM 116 kann in eine
Mehrzahl von 10 Abschnitten unterteilt werden, einschließlich eines Schreib-Eintragungs-Puffers 136,
eines Vorauslese-Puffers 135 und eines XOR-Puffers 134 zum Speichern
von Daten zum kumulativen Entwrickeln von Pantätsinformation und für andere
Aufgaben. Der Schreib-Eintragungs-Puffer 136 empfängt Schreib-Eintra gungsdaten,
während
das Host-Computersystem in das Festplatten-Untersystem 142 schreibt.
Der Schreib-Eintragungs-Puffer 136 kann auch zugewiesen
werden, um Daten zu speichern, die mit bestimmten Hintergrundaufgaben
verbunden sind, wie z.B. ein Wiederherstellungsprozess und ein Rekonfigurierungsprozess.
Der Wiederherstellungsprozess wird aufgerufen, um verlorene Daten
auf einem Ersatzlaufwerk wiederherzustellen. Der Wiederherstellungsprozess
wird ausführlicher
in Patenantmeldung Nr. 08/543.011, betitelt "Read Checking for Drive Rebuild", beschrieben.
-
In der bevorzugten Ausführung werden
dem Schreib-Eintragungs-Speicher 136 ein Übertragungspufferbereich
zum Durchführen
des Plattenanordnungs-Rekonfigurationsprozesses sowie ein Konfigurationsbereich
zum Speichern der Fortschrittsinformation des Rekonfigurationsprozesses.
Da der Schreib-Eintragungs-Puffer 136 batteriegestützt ist, erlaubt
das Speichern der Fortschrittsinformation, dass der Rekonfigurationsprozess
nach einem Stromausfall ohne Datenverlust wieder aufgenommen werden
kann.
-
Statusinformation bezüglich der
in dem Schreib-Eintragungs-Puffer 136 gespeicherten Daten
wird im lokalen Speicher 108 gespeichert. Die Statusinformation
umfasst ein Label, das die oberen Adressbits der Daten in jeder
Pufferspeicherzeile sowie Information speichert, die angibt, ob
die gepufferten Daten rein oder schmutzig und gültig oder ungültig sind.
Die Statusinformation umfasst weiter Information dahin gehend, ob
die Zeile gesperrt ist und was der Grund für die Sperrung ist. Eine Zeile
wird gesperrt, wenn sie momentan in die Plattenanordnung 142 gespült wird
oder wartet, um Daten vom Host zu empfangen. Eine Zeile kann auch
von anderen Tasks gesperrt werden.
-
Andere Arten von Statusinformation
im lokalen Speicher 108 umfassen das Ziel der gepufferten Datenzeile,
einschließlich
des logischen Datenträgers,
des Laufwerks und der Stelle in dem betreffenden Laufwerk. Eine
Software-Task niedriger Priorität tastet
fortwährend
die Statusinformation im lokalen Speicher 108 ab, um festzustellen,
ob eine Datenzeile schmutzige Daten enthält, und um Daten in das Plattenlaufwerks-Untersystem 142 zu
spülen.
-
Die DRAM-Schnittstelle 118 umfasst
einen PCI-Busmaster 126 und einen PCI-Busslave 128. Außerdem umfasst
die DRAM-Schnittstelle 118 eine DMA-Steuerung 124 zum Steuern
von Zugriffen auf das DRAM 116, sowie eine Auffrischungssteuenmg 122 zur
Durchführung
von Auffrischungszyklen. In der bevorzugten Ausführung lässt die Auffrischungssteuerung 122 CAS-vor-RAS-
(CBR) Auffrischungszyklen ablaufen. Ein DRAM-Arbiter 120 ist
ebenfalls enthalten, der Anforderungen für das DRAM 116 von den
verschiedenen möglichen
Anforderern in der DRAM-Schnittstelle 118 schlichtet.
-
Der PCI-Busslave 128 erlaubt
jedem PCI-Master, anders als der 20 PCI-Busmaster 126 in der
DRAM-Schnittstelle 118, Daten direkt in das DRAM 116 zu
legen. Um die Leistung zu verbessern, ist ein Satz von 5 internen
Vorauslese-FIFOs 130 mit dem PCI-Busslave 128 verbunden,
wobei jeder FIFO eine Tiefe von 8 Doppelworten hat, was die maximale Länge eines
durch einen PCI-Busmaster auf dem PCI-Lokalbus 102 ausgeführten Stoßzyklusses
ist. Die FIFO-Auswahl wird durch einen "am wenigsten jüngst benutzt"- (LRU) Algorithmus
gesteuert, der den jüngst
am wenigsten benutzten FIFO auswählt. Dieser
Algorihmus wird ausführlicher
in US-Patent Nummer 5,809,280 beschrieben. Logik zur Bewahrung der
Kohärenz
der Daten in den FIFOs 130 ist ebenfalls enthalten. Wenn
es einen Treffer auf in einem einzelnen FIFO gelegene Daten gibt,
wird der FIFO ausgewählt,
der die verlangten Daten enthält. Der
PCI-Busslavekanal 128 ist auch mit einem Schreib-FIFO 132 verbunden,
der das Eintragen von Schreibungen auf den Bus-Slave von bis zu
8 Doppelworten erlaubt. Der Gebrauch des Schreib-FIFO 132 überwindet
die Wartezeiten, die mit dem direkten Schreiben von Daten in das
DRAM 116 verbunden sind.
-
Der DRAM-Arbiter 120 steuert
alle Anforderungen an das DRAM 116. In der bevorzugten
Ausführung
werden Auffrischungsanforderungen in einer Tiefe von zwei gestapelt.
Wenn zwei Anforderungen anhängig
sind, hat die CBR-Auffrischungsanforderung erste Priorität vor jeder
anderen Anforderung nach dem DRAM 116. Eine Anforderung
von dem Busslave-Schreib-FIFO 132 hat
die zweithöchste
Priorität,
gefolgt von einer Anforderung von der Lese-FIFO-Bank 130.
-
Der PCI-Busmaster 126 unterstützt drei
für die
Plattenlaufwerksoperationen wichtige Hardwarebefehle. Der erste
ist eine Speicher-zu-Speicher-Verschiebung, die Daten vom Hauptcomputer-Systemspeicher
(nicht gezeigt) an den Schreib-Eintragungs-Puffer 136 während Schreib-Eintragen-Operationen überträgt. Außerdem ist
bei Pufferspeichertreffem auf vorher eingetragene oder vorausgelesene
Daten, die sich noch im Schreib-Eintragungs-Puffer-136 oder im Vorauslese-Pufferspeicher 135 befinden,
der PCI-Busmaster 126 programmiert, um die Daten im Schreib-Eintragungs-Puffer 136 in
den Systemspeicher zu schieben. Des Werteren ist der PCI-Busmaster 126 auch
in der Lage, Daten, die sich ganz im DRAM 116 befinden,
zu bewegen. Das interne Verschieben kann z.B. eine Übertragung
von Daten zwischen dem Schreib-Eintragungs-Puffer 136 und
dem XOR-Puffer 134 sein:
-
Die zweite durch den PCI-Busmaster 126 unterstützte Operation
ist eine Null-Füllen-Funktion,
die benutzt wird, um spezifizierte Teile des XOR-Puffers 134 mit
nur Nullen zu initialisieren. Die Null-Füllen-Operation wird durch einen
Null-Füllen-Block 136 gesteuert.
Außerdem
unterstützt
der PCI-Busmaster 126 eine Null-Erkennen-Operation, die
benutzt wird, um die Plattendaten-Integrität von redundanten Laufwerken
zu prüfen.
Dazu wird in der DRAM-Schnittstelle 118 ein
Null-Prüfen-Block 138 bereitgestellt.
-
Die Operationen des PCI-Busmasters 126 in der
DRAM-Schnittstelle 118 werden durch Befehlsbeschreibungsblöcke (CDB)
gesteuert. Software, die durch den lokalen Prozessor 106 ausgeführt wird, legt
einen CDB an eine Speicherstelle, die für den PCI-Busmaster 126 zugänglich ist.
Zeiger auf die CDBs werden in einen in der DRAM-Schnittstelle 118 gelegenen
Befehlszeiger-FIFO gelegt, um den Betrieb des Busmasters 126 einzuleiten.
Der Busmaster 126 gewinnt die CDB-Zeiger aus dem Befehlszeiger-FIFO
in ihrer gespeicherten Reihenfolge zurück, holt den CDB aus der spezifizierten
Speicherstelle und führt
den in dem CDB enthaltenen Befehl aus. Nach Vollendung des Befehls übergibt
der Busmaster 126 den CDB-Zeiger für den vollendeten Befehl vom
Befehlszeiger-FIFO an einen Vollendungsstatus-FIFO. Der lokale Prozessor 106 kann
durch Unterbrechung oder durch Abfragen, dass entweder eine Vollendung
anhängig
ist oder dass der Busmaster 126 wertere CDB-Zeiger annehmen
kann, benachrichtigt werden. Um die rückgewonnenen CDBs zu parsen,
wird in der DRAM-Schnittstelle 118 ein Befehls-Parserblock 140 bereitgestellt.
Da die Befehls-Parse-Operation Zugriff auf das DRAM 116 erfordern
kann, ist der Befehls-Parserblock 140 ein möglicher
Anforderer, dem von dem DRAM-Arbiter 120 Zugriff gewährt werden
muss, bevor er zu arbeiten beginnen kann.
-
Wie oben beschrieben, gehören die
drei höchsten
Prioritäten
für Zugriffe
auf das DRAM 116 der CBR-Auffrischungsanforderung, einer
Anforderung von dem Schreib-Eintragen-Busslave-FIFO 132 und
einer Anforderung von der Lese-FIFO-Bank 130. Die Prioritäten der übrigen Anforderungen
sind wie folgt in absteigender Ordnung: die Null-Prüfen-Operation,
eine Extern-nach-Intern-Speicherschreiboperation, eine Intern-nach-Intern-Speicherleseoperation,
eine Intern-nach-Intern-Speicherschreiboperation, eine Null-Füllen-Operation,
eine Befehls-Parse-Operation und eine Intern-nach-Intern-Speicherieseoperation.
-
Die erfindungsgemäße Plattensteuerplatine 10 ist
in der Lage, eine Plattenanordnungs-Rekonfiguration durchzuführen, d.
h., ein auf einer gegebenen Plattenanordnungs-Konfiguration (logischer Quellen-Datenträger) entwickelter
logischer Datenträger
kann in einen logischen Datenträger
auf einer unterschiedlichen Zahl von Plattenlaufwerken, die die
Anordnung (logischer Ziel-Datenträger) bilden, rekonfiguriert
werden, während
Daten für
Host-Anforderungen, z.B. Lese- und Schreib-Anforderungen nach Daten
in dem Plattenuntersystem 142, verfügbar bleiben. Um die von einer
EXPAND-Task zum Erweitern der Plattenanordnung durch Hinzufügen eines
Plattenlaufwerks durchgeführten Übertragungen am
besten zu veranschaulichen, wird nun auf 2A–2E verwiesen, die den Datenfluss
von dem logischen Quellen-Datenträger zu dem logischen Ziel-Datenträger veranschaulichen. 2A veranschaulicht den logischen
Quellen-Datenträger
F. Jede Reihe stellt einen Streifen dar, und jede Spalte stellt
ein physikalisches Laufwerk dar. Jeder Kasten in einer Reihe stellt
eine Streifeneinheit dar, die aus einer vorbestimmten Zahl von Sektoren
besteht. Der Einfachheit halber wird keine Paritätsinformation gezeigt. 2B-2F zeigen die Zwischenschritte
eines Plattenanordnungs-Erweiterungsprozesses, wobei 2F den logischen Ziel-Datenträger F und
einen neuen logischen Datenträger
G veranschaulicht. Für dieses
Beispiel wird angenommen, dass die Streifengröße des logischen Ziel-Datenträgers größer ist
als die Streifengröße des logischen
Quellen-Datenträgers.
Der Einfachheit halber wird auch angenommen, dass die Datenträgergröße des logischen
Datenträgers
F klein ist, und es wird angenommen, dass die Streifeneinheitsgröße des logischen
Ziel-Datenträgers
gleich der Streifeneinheitsgröße des logischen Quellen-Datenträgers ist.
Die EXPAND-Task wird ein voller Streifen (des Ziel-Datenträgers) zu
einer Zeit durchgeführt.
-
2B veranschaulicht
ein neues Plattenlaufwerk, das der Anordnung hinzugefügt wird. 2C zeigt, dass ein ganzer
Streifen, der aus den Streifeneinheiten 0A, 1A, 2A und 3A besteht,
von dem logischen Quellen-Datenträger F zu dem logischen Ziel-Datenträger F übertragen
wird. Der Streifen wird zuerst aus dem logischen Quellen-Datenträger F gelesen
und in den zugeteilten Erweiterungspuffer in dem Schreib-Eintragungs-Speicher 136 gelegt.
Die Daten werden dann aus den Schreib-Eintragungs-Speicher 136 zurück in den
logischen Ziel-Datenträger
F geschrieben. 2D veranschaulicht
die Übertragung
des nächsten
Streifens, der aus den Einheiten 0B, 1B, 2B und 3B besteht, von
dem logischen Quellen-Datenträger
an den logischen Ziel-Datenträger.
Als Nächstes
veranschaulicht 2E die Übertragung
des dritten Streifens, der aus den Streifeneinheiten 0C, 1C, 2C und 3C besteht.
Schließlich
veranschaulicht 2F die Übertragung
der restlichen Streifeneinheiten in dem logischen Quellen-Datenträger, die
aus den Einheiten 0D, 1D und 2D bestehen.
Die letzte Übertragung durch
die EXPAND-Task ist somit eine Teilstreifenverschiebung von dem
logischen Quellen-Datenträger
zu dem Schreib-Eintragungs-Puffer 136 und zurück zu dem
Ziel-Datenträger.
Die Rekonfiguration der Plattenanordnung resultierte auch in von
dem logischen Datenträger
F nicht benutzten überschüssigen Platz,
wie durch die leeren Streifeneinheiten auf der unteren Reihe veranschaulicht.
Der überschüssige Platz
ist als ein neuer logischer Datenträger G konfigurierbar.
-
Es können seltene Fälle vorkommen,
wo die Streifengröße des Ziel-Datenträgers als
kleiner als die Streifengröße des Quellen-Datenträgers spezifiziert
wird. Ein Beispiel davon wird in
-
2G und 2H gezeigt, wobei 2G den logischen Datenträger N und 2H den logischen Ziel-Datenträger H veranschaulichen.
In diesem Szenario hat der Ziel-Datenträger H ein physikalisches Laufwerk
weniger als der logische Quellen-Datenträger N. Eine solche Plattenanordnungs-Rekonfiguration
ist nur möglich,
wenn die Laufwerke 1, 2 und 3 überschüssigen,
unbenutzten Platz haben. Die Menge an benötigtem überschüssigem Platz muss wenigstens
gleich der auf dem Plattenlaufwerk 4 gespeicherten Datenmenge
im logischen Quellen-Datenträger
sein. Die EXPAND-Task beginnt bei dem letzten Streifen und geht
zurück
zu dem ersten Streifen. Die erste Übertragung umfasst nur die
Streifeneinheit OA, da die Zahl von Streifeneinheiten im Ziel-Datenträger sich
von der des Quellen-Datenträgers
unterscheidet. Die Streifeneinheit OA wird in den Eintragungspuffer 136 gelesen
und dann in den ersten Streifen des logischen Ziel-Datenträgers N geschoben.
Die übrigen Übertragungen
umfassen Übertragungen
ganzer Streifen, beginnend mit dem Streifen, der aus den Einheiten
OB, 1 B und 2B besteht, und endend mit dem Streifen, der aus den
Einheiten 0F, 1F und 2F besteht.
-
Die auf der Steuerplatine 10 laufende
Firmware beginnt nicht automatisch immer einen Rekonfigurationsprozess,
wann immer ein neues Laufwerk eingefügt oder ein Laufwerk entfernt
wurde. Es obliegt dem Benutzer, einen Plattenanordnungs-Rekonfigurationsprozess
durch Software, die auf dem Host-Computer läuft, anzufordern. Außerdem kann der
Benutzer wünschen,
eine Plattenanordnung zu rekonfigurieren, selbst wenn das physikalische
Laufwerksystem unverändert
ist, z.B. einem logischen Datenträger ein Laufwerk weniger zuweisen.
In der bevorzugten Ausführung
wird Software mit einer graphischen Benutzerschnittstelle benutzt,
um in einer Windows-Umgebung Information über die Plattensteuerplatine 10 anzuzeigen.
Auf der Basis der angezeigten Information kann der Benutzer die
Software programmieren, um Befehle zum Rekonfigurieren der Plattensteuerplatine
auszugeben. Einige der Befehle, die von der Host-Software ausgegeben
werden können,
werden unten beschrieben.
-
Ein Befehl zum Rückgewinnen von Information über die
Plattensteuerplatine ist der Befehl SENSE BUS PARAMETERS. Der Befehl
SENSE BUS PARAMETERS wird an eine bestimmte SCSI-Steuerung 112 gerichtet,
um Information über
diese SCSI-Steuerung zu erlangen. Ein Parameter, der über den
Befehl SENSE BUS PARAMETERS rückgewonnen
werden kann, ist der Parameter HOT_PLUG_COUNT. Jedes Wort des Parameters HOT_
PLUG_COUNT stellt ein physikalisches Festplattenlaufwerk dar, das
mit einem Fach verbunden ist, das einer SCSI-Steuerung 112 entspricht.
Der Parameter HOT_PLUG_COUNT wird jedes Mal inkrementiert, wenn
dem einzelnen Fach ein physikalisches Laufwerk hinzugefügt (hot-plugged)
wird. Der Parameter HOT_PLUG_COUNT wird inkrementiert, wenn dem
Fach ein neues Laufwerk hinzugefügt
wurde, ein Laufwerk ausgefallen war und ersetzt wurde oder das gleiche
Laufwerk entfernt und wieder installiert wurde. Beim Einschalten wird
der Parameter HOT_PLUG_COUNT auf null gesetzt.
-
Ein anderer Parameter, der durch
den Befehl SENSE BUS PARAMETERS rückgewonnen werden kann, ist
der Parameter CONNECTION_INFO, der Bits enthält, die angeben, ob externe
oder interne Laufwerke an der Plattensteuerplatine 10 angeschlossen
sind.
-
Die Host-Software enthält auch
einen Befehl SET CONTROLLER PARAMETERS zum Modifizieren von mit
der Plattensteuerplatine 10 verbundenen Parametern. Zwei
Steuerungsparameter sind die Parameter REBUILD_PRIORITY und EXPAND_PRIORITY
zum Bestimmen der Hintergrund-Wedefierstellen- und Rekonfigurations-Tasks, die
in der bevorzugten Ausführung
beide zwischen den Werten 0 und 255 wählbar sind.
-
Ein anderer Befehl, der von der Host-Software
ausgegeben werden kann, ist der Befehl SENSE LOGICAL DRIVE STATUS.
Dieser Befehl stellt fest, ob ein logisches Laufwerk, d.h. ein logischer
Datenträger,
in einem der folgenden Zustände
ist: LOG_VOL_OK, anzeigend, dass der Datenträgerin Ordnung ist; LOG_VOL_FAILED,
anzeigend, dass der Datenträger
ausgefallen ist; LOG_VOL_NOT_CONFIGURED, anzeigend, dass der Datenträger noch
nicht konfiguriert wurde; LOG VOL NEEDS REBUILD, anzeigend, dass
ein Fehler aufgetreten ist, der erfordert, dass Daten wiederhergestellt
werden; LOG VOL REBUILDING, anzeigend, dass der Datenträger gegenwärtig wiederhergestellt wird;
LOG_VOL_OVER-HEATING,
anzeigend, dass die Hardware überhitzt
ist; LOG_VOL_EXPANDING, anzeigend, dass eine Rekonfigurierungs-Task
momentan im Gange ist; LOG_VOL_NEEDS_ EXPAND, anzeigend, dass ein
Rekonfigurierungsanforderung anhängig
ist, und LOG_VOL_ NOT_AVAILABLE, anzeigend, dass ein logischer Datenträger nicht
verfügbar
ist, z. B., wenn während
der Datenträger-Konfigurationsoperation überlappende
logische Datenträger entdeckt
werden. Der Befehl SENSE LOGICAL DRIVE STATUS gewinnt auch einen
Plan von ausgefallenen physikalischen Plattenlaufwerken zurück, die
mit einem bestimmten logischen Datenträger verbunden sind.
-
Die Host-Software kann auch Befehle
SET CONFIGURATION und CHANGE CONFIGURA-TION ausgeben. Der Befehl CHANGE CONFIGURATION
wird benutzt, um die Konfiguration einer bestehenden Plattenanordnung
zu ändern.
Um eine Plattenanordnung zu rekonfigurieren, wird daher der Befehl
CHANGE CONFIGURATION ausgegeben, um dem logischen Datenträger die
unterschiedliche Zahl von Plattenlaufwerken zuzuteilen. Der Befehl
SET CONFIGURATION kann auch benutzt wirden, um die Plattenanordnungs-Rekonfiguration
durchzuführen. Der
Unterschied zwischen den Befehlen SET CONFIGURATION und CHANGE CONFIGURATION
ist, dass in dem logischen Datenträger gespeicherte Daten verlorengehen,
wenn der Befehl SET CONFIGURATION ausgegeben wird, während es
der Befehl CHANGE CONFIGURATION erlaubt, dass Daten bewahrt werden.
-
Das Folgende beschreibt einige der
Konfigurationsparameter, die mit den Befehlen SET CONFIGURATION
und CHANGE CONFIGURATION ausgegeben werden. Ein Parameter CONFIGURATION_SIGNATURE
stellt eine Signatur dar, die für
jeden logischen Datenträger
einmalig ist. Ein Parameter DATA_DISTRIBUTION_MODE bestimmt das
Abbildungsschema, das zwischen einer logischen Anforderung und einer
physikalischen Anforderung benutzt wird, wobei der Parameter auf
den Wert 1 gesetzt wird, um direktes Abbilden anzugeben, und auf
den Wert 2, um Mehrfachblock-Verschachtelungsabbildung zu spezzieren,
die mit RAID 0 und 1 Fehlertoleranzschemas benutzt
wird. Das Direktabbildungsschema benutzt nur ein physikalisches
Laufwerk, wenn keine Fehlertoleranz gewählt wird, und zwei physikalische
Laufwerke, wenn Spiegelungs-Fehlertoleranz gewählt wird. Das mit RAID 0 und 1 Konfigurationen
benutzte Mehrtachblock-Verschachtelungsabbildungsschema zerlegt
eine logische Anforderung in physikalische Anforderungen, die an
passende physikalische Laufwerke gerichtet werden. Wenn RAID 4 oder 5 Fehlertoleranz
benutzt wird, wird ein Paritätsabbilder
verwendet, um die Daten und Paritätsinformation an die geeigneten
physikalischen Laufwerke zu leiten. Das gewählte Abbildungsschema wandelt
logische Host-Anforderungen in
physikalische Anforderungen um, die von der geeigneten der SCSI-Steuerungen
112A-E ausgeführt werden.
-
Ein Parameter CONTROLLER_PHYSICAL_DRIVE_COUNT
spezifiziert die Gesamtzahl von physikalischen Laufwerken, die mit
der einzelnen SCSI-Steuerung 122 verbunden ist, einschließlich solcher,
die in einem externen Speicherkasten installiert sind. Ein Parameter LOGICAL_UNIT_PHYSICAL_DRIVE_COUNT
spezifiziert die Gesamtzahl von physikalischen Laufwerken, die dem
logischen Datenträger
zugewiesen ist. Wenn der Parameter auf den Wert null gesetzt wird, wird
der ganze logische Datenträger
gestrichen.
-
Der Fehlertoleranzmodus des spezifizierten logischen
Datenträgers
wird durch einen Parameter FAULT_TOLERANCE_MODE festgelegt, wobei
der Wert 0 anzeigt, dass keine Fehlertoleranz benutzt wird, und
die Werte 1, 2 und 3 anzeigen, dass die RAID 4,
RAID 1 bzw. RAID 5 Schutzschemas benutzt werden.
Ein Parameter DISTRIBUTION_FACTOR stellt die Zahl von physikalischen
Sektoren in einer Streifeneinheit dar. Ein Streifen kann mehrere
physikalische Laufwerke überspannen,
und eine Streifeneinheit ist der Teil des Streifens, der sich auf
einem physikalischen Laufwerk befindet. Ein Parameter SPARE ASSIGN-MENT MAP bezeichnet
physikalische Laufwerke, die als Online-Reserven zu verwenden sind.
Ein Parameter OFFSET_TO_DATA spezifiziert den Versatz in jedes physikalische Laufwerk
in der Laufwerksanordnung, die die Anfangsstelle eines logischen
Datenträgers
ist. Für
die Rekonfigurationsoperation muss der Wert von OFFSET TO DATA für den logischen
Ziel-Datenträger
nicht unbedingt in dem logischen Quellen-Datenträger liegen, solange der Wert
OFFSET_TO_DATA nicht bewirkt, dass der Ziel-Datenträger einen
anderen logischen Datenträger überschneidet.
Ein Parameter BLOCKS_ON_VOLUME spezifiziert die Gesamtzahl verwendbarer
Sektoren in einem bestimmten Datenträger. Ein Parameter BLOCKS_PER_DRIVE
spezifiziert die Zahl von Sektoren, die auf jedem physikalischen
Laufwerk benutzt wird.
-
Wenn eine Plattenanordnung rekonfiguriert wird,
können
die oben aufgeführten
Parameter auf verschiedene Werte für den logischen Quellen-Datenträger und
den logischen Ziel-Datenträger
spezifiziert werden. Zum Beispiel wird der Parameter LOGICAL_UNIT_PHYSICAL_DRIVE_COUNT
in einer Erweiterungsoperation in einen anderen Wert geändert, wobei
der Wert für
den logischen Ziel-Datenträger
größer ist
als der des logischen Quellen-Datenträgers. Der Fehlertoleranzmodus
des logischen Datenträgers
kann durch Ändern
des Parameters FAULT_TOLERANCE_MODE geändert werden, wobei der Quellen-Datenträger einen
Modus und der Ziel-Datenträger
einen anderen hat. Die anderen Datenträgerparameter können, wie
vom Benutzer gewünscht,
ebenfalls eingestellt werden.
-
Die Host-Software informiert den
lokalen Prozessor 106, dass eine Befehlsliste im Host-Speicher gebildet
wurde, indem sie die Adresse der Befehlsliste in einen in der Prozessor-PCI-Brücke 110 gelegenen
Befehlszeiger-FIFO schreibt. Der Befehls-FIFO ist vorzugsweise 16
Wörter
tief und 32 Bit breit, um bis zu 16 Befehlslistenzeiger zu halten.
Als Reaktion erlangt die Prozessor-PCI-Brücke 110 die Kontrolle
des PCI-Lokalbusses 102, um 8 Doppelwörter aus dem Host-Speicher
beginnend an der durch den Befehlslistenzeiger spezzierten Stelle
zurückzugewinnen.
Die 8 Doppelwörter
der Befehlsliste werden in einem Befehlslisten-FIFO gespeichert.
Die Prozessor-PCI-Brücke 110 unterbricht
dann den lokalen Prozessor 106, um anzuzeigen, dass ein Befehl lokal
vorhanden ist. Der lokale Prozessor 106 ruft dann die passende
Unterbrechungs-Serviceroutine auf, um den Befehl in den lokalen
Speicher 8 zu schieben. Die Unterbrechungs-Sericeroutine
ruft eine Routine EXECUTE_LOGICAL_REQUEST (gezeigt in 7A und 7B) auf, um zu bestimmen, welche Tasks
als Reaktion auf den Host-Befehl aufzurufen sind.
-
Die Routine EXECUTE_LOGICAL_REQUEST
wird mit einem Zeiger REQUEST, der die Anfangsadresse einer Datenstruktur
ist, die ein Feld UNIT enthält,
um den logischen Datenträger,
auf den zuzugreifen ist, zu spezifizieren, einem Feld COMMAND, um
die Art des auszuführenden
Befehls zu spezifizieren, einem Feld STATUS, um anzuzeigen, ob der
Host- Befehl erfolgreich
gelaufen ist, und Feldern übennittelt,
die die Anfangssektomummer und die Zahl von Sektoren angeben, die
in dem momentanen Befehl enthalten sind. Die Routine EXECUTE_LOGICAL_REQUEST
prüft, um
festzustellen, ob der Parameter EXPAND_RUN-NING wahr gesetzt ist, was anzeigt, dass
ein Rekonfigurationsprozess im Gange ist. Wenn ja, ruft die Routine EXECUTE_LOGICAL_REQUEST
eine Routine PROCESS_EXPAND_ REQUEST ( gezeigt in 8) auf, die prüft, um festzustellen, ob die
verlangten Sektoren durch die EXPAND-Task schon verarbeitet wurden,
und die Datenträger-Konfigurationsparameter
entsprechend zu setzen. Außerdem
ruft, wenn die Befehle SETCONFIGURATION oder CHANGE CONFIGURATION
geltend gemacht werden, die Routine EXECUTE_LOGICAL_REQUEST eine
Routine SET_CONFIGURATION auf, um die Rekonfigurations-Task zu handhaben.
-
Nun auf 3A-3C verweisend wird ein Flussdiagramm
der SET CONFIGURATION-Task gezeigt. Zuerst wird in Schritt 301 festgestellt,
ob ein Parameter GLOBAL RIS einen Nicht-Null-Wert hat. Der Parameter GLOBAL-RIS
ist ein Zeiger auf eine Stelle im Speicher, die die globale RIS-Struktur
speichert. Jeder logische Datenträger ist mit spezifischen Konfigurationsparametern
verbunden, und jede der Steuerungen 112A-E ist mit bestimmten Steuerungsparametern
verbunden. Die Konfigurations- und Steuerungs-Parameter sind in
reservierten Infonnationssektoren (RIS) in jedem logischen Datenträger gespeichert.
Die globale RIS-Datenstruktur liegt im lokalen Speicher 108, um
die RIS-Information der logischen Datenträger im Platten-Untersystem
142 zum schnelleren Zugriff auf die Konfigurations- und Steuerungs-Information
zu speichern. Die RIS-Datenstruktur speichert auch Parameter, die
mit der Rekonfigurationsoperation verbunden sind.
-
Wenn der Parameter GLOBAL RIS einen Wert
null hat, der anzeigt, dass die Steuerungsplatine 10 gerade
zu arbeiten begonnen hat, und dass noch kein logischer Datenträger konfiguriert
wurde. Wenn der Parameter GLOBAL RIS einen Wert null hat, geht der
Ablauf zu Schritt 304; andernfalls, wenn der Parameter
GLOBAL RIS einen Nicht-Null-Wert hat, geht die Steuerung zu Schritt 302,
wo ein Parameter LOGICAL gesetzt wird, um auf die Anfangsstelle
des Bereichs in der RIS-Datenstruktur zu zeigen, die die Konfigurations-
und Steuerungsparameter des spezifizierten logischen Datenträgers enthält, der
zu Zwecken des Rekonfigurationsprozesses der logische Ziel-Datenträger ist.
Der Ablauf geht dann von Schritt 302 zu Schritt 304.
-
In Schritt 304 wird festgestellt,
ob der spezifizierte Anforderungsbefehl ein Plattenanordnungs-Rekonfigurierbefehl
ist. Wenn eine Plattenanordnungs-Rekonfigurieranforderung angegeben wird,
geht der Ablauf zu Schritt 306; andernfalls geht der Ablauf
zu Schritt 314.
-
In Schritt 306 wird festgestellt,
ob irgendeeine der unten aufgeführten
Bedingungen wahr ist: Der Parameter LOGICAL_UNIT_PHYSICAL_DRIVE_COUNT
ist auf null gesetzt, was einen Befehl zum Streichen des spezzierten
logischen Datenträgers
anzeigt; der Parameter GLOBAL RIS enthält einen Null-Wert, d. h. der
angegebene logische Datenträger
existiert nicht; der Status des logischen Datenträgers ist LOG_VOL_UNUSED,
was anzeigt, dass der logische Datenträger momentan unbenutzt ist;
die Speicherplatine, die die DRAM-Schnittstelle 118 und das DRAM 116 enthält, ist
nicht vorhanden; die Batterien 144 zum Stützen von
Teilen des DRAM 116 sind nicht geladen, oder für den spezifizierten
logischen Datenträger
ist momentan eine Rekonfigurieranforderunng anhängig. Wenn eine der obigen
Bedingungen wahr ist, kann die Plattenanordnungs-Rekonfigurieranforderung
nicht fortschreiten. Der Ablauf geht dann zu Schritt 308, wo das
Feld STATUS der momentanen Anforderung auf den Status BAD_REQUEST
gesetzt wird, um anzuzeigen, dass die Rekonfigurieranforderung nicht
in der Lage ist, voranzuschreiten. Von Schritt 308 kehrt
die Steuerung zurück
zu der aufrufenden Task.
-
Wenn keine der in Schritt 306 geprüften Bedingungen
wahr ist, geht der Ablauf zu Schritt 309, wo die Richtung
der Rekonfigurieroperation und die Iterationsgröße festgelegt werden. Die Richtung
des Rekonfigurierprozesses wird in der Vorwärtsrichtung festgelegt, d.
h., Beginnen beim ersten Streifen und Vorangehen zum letzten Streifen
oder in der umgekehrten Richtung, d. h., Beginnen beim letzten Streifen
und Anhalten beim ersten Streifen. Die Richtung wird durch einen
Parameter DIRECTION_UP angegeben, der, wenn wahr gesetzt, angibt,
dass der Rekonfigurierprozess in der Vorwärtsrichtung vorangeht. Der
Wert des Parameters DIRECTION_UP wird wahr gesetzt, wenn die Zahl
von Laufwerken in dem logischen Ziel-Datenträger größer oder gleich der Zahl von
Laufwerken in dem logischen Quellen-Datenträger ist.
-
Die Iterationsgröße, dargestellt durch einen Parameter
ITERATION_BLOCK_COUNT, wird festgelegt, indem die Werte des Parameters DISTRIBUTION_FACTOR
in dem logischen Ziel-Datenträger
und des Parameters DISTRIBUTION_FACTOR in dem logischen Quellen-Datenträger verglichen
werden. Der Parameter DISTRIBUTION_FACTOR stellt die Zahl von Sektoren
in einer Streifeneinheit dar. Wenn die Parameter in dem logischen
Quellen- und Ziel-Datenträger gleich
sind, wird die Iterationsgröße ITERATION_BLOCK_COUNT
auf die Streifengröße des logischen
Ziel-Datenträgers
gesetzt. Andernfalls, wenn die Parameter nicht gleich sind, ist
die Iterationsgröße gleich
dem kleinsten gemeinsamen Nenner der Streifengröße des Quellen-Datenträgers und der
Streifengröße des Ziel-Datenträgers. Wenn
z. B. die Quellen-Datenträger-Streifengröße 12 Sektoren ist
und die Ziel-Datenträger
Streifengröße 18 Sektoren
ist, wird die Iterationsgröße auf 36
Sektoren gesetzt. Wenn die Iterationsgrö ße ITERATION_BLOCK_COUNT größer als
8,000 ist, was die Größe des Puffer-RAM 116 in
Sektoren darstellt, kehrt die Steuerung zu dem aufrufenden Programm
zurück,
wobei das Flag STATUS auf den Status BAD_REQUEST gesetzt wird. Die
Iterationsgröße ist die Übertragungsgröße für jeden
Rekonfigurierschritt, um Überschneiden
zu verhindern, wenn die Verteilungsfaktoren für den logischen Quellen- und
Ziel-Datenträger
verschieden sind.
-
Als Nächstes geht der Ablauf zu Schritt 310, wo
festgestellt wird, ob sich der Quellen-Datenträger und der Ziel-Datenträger in der
Rekonfigurationsoperation überschneiden.
Ebenfalls wird festgestellt, ob der Parameter DIRECTION_UP wahr
gesetzt ist und ob der Parameter OFFSET_TO_DATA des Ziel-Datenträgers größer als
der Parameter OFFSET_TO_DATA des Quellen-Datenträgers ist. Wenn ja, wird in
Schritt 312 das Feld STATUS der Anforderung auf den Zustand
BAD_REQUEST gesetzt. Aftemativ wird, wenn festgestellt wird, dass
sich der Ziel-Datenträger
mit dem Quellen-Datenträger überschneidet,
der Parameter DI-RECTION_UP
unwahr gesetzt, und wenn der Parameter OFFSET_TO_DATA des Ziel-Datenträgers kleiner als
der Parameter OFFSET_TO_DATA des Quellen-Parameters ist, wird das
Feld_STATUS der momentanen Anforderung ebenfalls in Schritt 312
auf den Zustand BAD_REQUEST gesetzt. Jede der zwei obigen Bedingungen
würde bewirken,
dass Teile des logischen Quellen-Datenträgers überschrieben werden, bevor
Daten in diesen Teilen in den logischen Ziel-Datenträger übertragen
wurden. Von Schritt 312 kehrt die Steuerung zurück zu der aufrufenden Task.
-
Wenn keine der in Schritt 310 geprüften Bedingungen
wahr ist, geht der Ablauf von Schritt 310 zu Schritt 314.
In Schritt 314 wird eine Prüfung
durchgeführt,
um festzustellen, ob sich der Ziel-Datenträger mit irgendeinem anderen
logischen Datenträger überschneiden
würde.
Der Platz in der für
den Ziel-Datenträger
benutzten Plattenanordnung darf nicht schon von einem anderen logischen
Datenträger
benutzt oder als Reservelaufwerk für einen anderen logischen Datenträger zugeteilt
sein. Der ganze in dem Ziel-Datenträger benutzte Platz muss entweder
Platz sein, der von dem Quellen-Datenträger benutzt wird, Reservelaufwerksplatz
für den
Quellen-Datenträger
oder unbenutzter Laufwerksplatz sein. In Schritt 316 wird festgestellt,
ob eine Überschneidung
vorkommt. Wenn ja, geht der Ablauf zu Schritt 318, wo das Feld STATUS
der Anforderung auf den Status BAD REQUEST gesetzt wird. Von Schritt
318 kehrt die Steuerung zurück
zu der aufrufenden Task.
-
Wenn in Schritt 316 keine Überschneidung festgestellt
wird, geht der Ablauf zu Schritt 320, wo die Task SET_CONFIGURATION
pausiert, während andere
anstehende logische Host-Anforderungen, wenn
vorhanden, verarbeitet werden. Wenn allen anderen logischen Anforderungen
erledigt sind, geht der Ablauf zu Schritt 322. In Schritt
322 wird festgestellt, ob die schmutzigen Zeilen in dem Schreib-Eintragungs-Puffer 136 in
das Platten-Untersystem 142 gespült worden sind. Wenn nicht,
wird die Task SET_CONFIGURATION erneut angehalten, während die
schmutzigen Zeilen im Puffer 136 gespült werden. Dann wird in Schritt
324 jede laufende Hintergrund-Task suspendiert. Dies ist erforderlich,
um Wiederherstellungs-, Oberflächenanalysen-
und andere Hintergrund-Tasks während
des Rekonfigunerens pausieren zu lassen.
-
Von Schritt 324 geht der
Ablauf zu Schritt 326, wo festgestellt wird, ob der Datenträger bereits in
der Erweiterungs-Queue ist. Wenn ja, geht der Ablauf zu Schritt
328, wo die Rekonfigurationsanforderung, die in der Queue anhängig ist,
durch Aufrufen einer Task EXPAND_ ABORT abgebrochen wird. Dies erlaubt,
dass ein Befehl SET CONFIGURATION ausgegeben wird, um einen Rekonfigurationsbefehl CHANGE
CONFIGURATION abzubrechen. Wenn eine Rekonfigurationsanfordenrng
abgebrochen wird, wird ein Parameter EXPAND_ UNIT_COUNT dekrementiert,
um anzuzeigen, dass eine Rekonfigurationsanforderung weniger anhängig ist.
Außerdem wird
von dem lokalen Prozessor 106 eine Unterbrechung zurück an den
Host erzeugt, um anzuzeigen, dass die Rekonfigurationsanforderung
abgebrochen wurde. Von Schritt 328 geht der Ablauf zu Schritt
330. Außerdem
geht der Ablauf von Schritt 326 zu Schritt 330,
wenn festgestellt wird, dass der angegebene Datenträger nicht
in der Erweiterungs-Queue ist.
-
In Schritt 330 wird festgestellt,
ob der Parameter GLOBAL RIS einen Null-Wert hat. Wenn der Parameter
GLOBAL RIS einen Null-Wert enthält, zeigt
dies an, dass es das erste Vorkommen des Befehls SET CONFIGURATION
ist, um den ersten logischen Datenträger zu konfigurieren. Wenn
der Parameter GLOBAL_RIS einen Null-Wert enthält, geht der Ablauf zu Schritt
332, wo die globale RIS-Datenstruktur in dem lokalen Speicher 108 zugeteilt
wird. Außerdem
werden die Inhalte der globalen RIS-Datenstruktur initialisiert.
Als Nächstes
wird in Schritt 334 ein Parameter LOGICAL DRIVE COUNT auf
den Wert 1 gesetzt, um anzuzeigen, dass ein Datenträger konfiguriert
wurde. Von Schritt 334 geht der Ablauf zu Schritt 336.
-
Wenn die globale RIS-Datenstruktur
bereits existiert, wie durch einen den Nicht-Null-Wert in Schritt 330 enthaltenden
Parameter GLOBAL RIS angezeigt, geht der Ablauf zu Schritt 338,
wo festgestel wird, ob der angegebene logische Datenträger im unbenutzten
oder LOG_VOL_UNUSED Status ist. Wenn dies wahr ist, wird der logische
Laufwerkszählparameter
LOGICAL_DRIVE_COUNT um den Wert 1 erhöht, um die Verfügbarkeit
eines anderen logischen Datenträgers
anzuzeigen. Von Schritt 338 geht der Ablauf zu Schritt 336.
-
In Schritt 336 wird der
Parameter LOGICAL auf einen Versatzwert gesetzt, der die Anfangsstelle eines
Bereichs in der RIS-Datenstruktur darstellt, die die Konfigurations-
und Steuerungsparameter der spezifizierten Datenträgereinheit
speichert. Man beachte, dass dies bereits in Schritt 302 gemacht
wurde, wenn der Parameter GLOBAL_RIS ein Nicht-NuII-Wert war. In
Schritt 336 besteht die Möglichkeit, dass
in Schrit 332 eine neue RIS-Datenstruktur zugeteilt wurde,
was es nötig
macht, dass der Parameter LOGICAL nachträglich definiert wird.
-
Zu Schritt 340 gehend wird
festgestellt, ob der übermittelte
Anforderungsbefehl ein Plattenanordnungs-Rekonfigurationsbefehl
ist. Wenn ja, geht der Ablauf zu Schritt 342, wo die Parameter
des logischen Quellen-Datenträgers
in einen anderen Teil der globalen RIS-Datenstruktur kopiert werden.
Die Quellen-Konfigurationsparameter werden zum späteren Zugriff
in einem getrennten Bereich der RIS-Datenstruktur gespeichert.
-
Von Schritt 342 oder von
Schritt 340 geht, wenn festgestellt wird, dass der übermittelte
Anforderungsbefehl kein Rekonfigurationsbefehl ist, der Ablauf zu
Schritt 344. In Schritt 344 werden die durch den
Host-Befehl SET CONFIGURATION oder CHANGE CONFIGURA-TION spezifizerten
Ziel-Datenträger-Konfigurationsparameter
in der globalen RIS-Datenstruktur beginnend an einer Stelle gespeichert,
die dem logischen Ziel-Datenträger
entsprtcht, d. h., der früheren
Stelle des logischen Quellen-Datenträgers.
-
Als Nächstes zu Schritt 356 gehend
wird wiederum festgestellt, ob der übermittelte Anforderungsbefehl
ein Rekonfigurationsbefehl ist. Wenn ja, geht der Ablauf zu Schritt 358,
wo eine Task EXPAND_QUEUE aufgerufen wird, um die Rekonfigurationsanforderung
in die Erweiterungsanforderungs-Queue EXPAND_UNIT_QUEUE[I] einzureihen.
Die Task EXPAND_ QUEUE wird mit 5 unten
beschrieben. Von Schritt 358 geht der Ablauf zu Schritt 360.
-
Wenn in Schritt 356 festgestellt
wird, dass die übermittelte
Anforderung keine Rekonfigurationsanforderung ist, geht der Ablauf
zu Schritt 360, wo der Datenträgerstatus des angegebenen logischen Datenträgers durch
Aufrufen einer Task UPDATE_LOGICAL_UNIT_STATE aktualisiert wird. Die
Routine modziert den Datenträgerstatus
des angegebenen logischen Laufwerks aufder Basis des Status aller
physikalischen Laufwerke in dem Datenfräger und des Fehlertoleranzmodus
des Datenträgers.
Wenn z. B. keine Fehlertoleranz gewählt wird, würde ein ausgefallenes physikalisches
Laufwerk bewirken, dass der Datenträgerstatus auf den ausgefallenen
Status gesetzt wird. Wenn jedoch der RAID 1, 4 oder 5 Fehlertoleranzmodus
gewählt
wird, können Daten
auf einem ausgefallenen Plattenlaufwerk abhängig davon wiederherstellbar
sein, ob Ersatz- und Reserve-Laufwerke momentan benutzt werden.
-
Die Routine UPDATE_LOGICAL_UNIT_STATE
sendet auch eine Unterbrechung an das Host-Computersystem 100, wenn
der Datenträgerstatus
aktualisiert worden ist. In Schritt 362 zeigt dies dem Host-Betriebssystem
an, dass ein neuer logischer Datenträger konfiguriert wurde. Von
Schritt 362 geht der Ablauf zu Schritt 360.
-
In Schritt 360 werden mit
dem Puffer verbundene Parameter, die von dem spezzierten logischen Datenträger abhängen, initialisiert.
Diese Pufferparameter umfassen eine Bitmap, die angibt, ob eingetragene
Schreibungen für
einen logischen Datenträger freigegeben
sind. Diese Pufferparameter werden auch in der globalen RIS-Datenstruktur
gespeichert. Dann wird zu Schritt 362 gehend die mit dem
logischen Ziel-Datenträger
verbundene Konfigurationssignatur in einem reservierten Bereich
in dem Schreib-Eintragungs-Puffer 136 gespeichert. Diese Signatur
wird während
der Stromwiedefierstellungs-Operation benutzt, um festzustellen,
ob eine unterbrochene Rekonfigurationsoperation wieder aufzunehmen
ist. Dann zu Schritt 364 gehend werden die Parameter, die
in der globalen RIS-Datenstruktur im lokalen Speicher 108 gespeichert
sind, in reservierte Informationssektoren des spezifizierten Datenträgers zurückgeschrieben.
Von Schritt 364 geht der Ablauf zu Schritt 366,
wo in Schritt 324 suspendierte Hintergrund-Tasks wiederaufgenommen werden.
Von Schritt 366 kehrt die Steuerung zurück zu dem aufrufenden Programm.
-
Nun auf 4 verweisend wird ein Flussdiagramm der
Task EXPAND_QUEUE gezeigt. Wie früher angemerkt, gibt die Task
EXPAND_QUEUE eine Rekonfigurationsanforderung in die Erweiterungsanforderungs-Queue
EXPAND_UNIT_QUEUE[I] ein. Beginnend in Schnitt 402 wird
der Parameter EXPAND UNIT COUNT, der die Zahl ausstehender Rekonfigurationsanforderungen
darstellt, um den Wert 1 erhöht.
Der erhöhte
Wert des Parameters EXPAND_ UNIT_COUNT wird benutzt, um auf den
momentanen Index in die Queue EXPAND_UNIT QUEUE zu zeigen. Die Datenträgereinheitsnummer
UNIT der Rekonfigurationsanforderung wird in die Queue geschrieben.
Außerdem
wird in Schritt 402 der Parameter EXPAND NEE-DED auf den WAHR-Status gesetzt.
-
Dann wird in Schritt 404 ein
Teil des DRAM 116 für
die Rekonfigurations-Task zugeteilt. Der zugeteilte Teil ist gleich
der maximalen Iterationsblockzahl aller Rekonfigurationsanforderungen
in der Queue. Der zugeteilte Teil des DRAM 116 ist batteriegestützt. Der
Ablauf geht dann zu Schritt 408, wo eine Unterbrechung
an den Host-Computer geltend gemacht wird, um anzuzeigen, dass die
Plattenanordnungs-Rekonfigurationsanforderung erfolgreich eingereiht
wurde. Von Schritt 408 kehrt die Steuerung zurück zu dem
aufrufenden Programm.
-
Nun auf 5 verweisend wird ein Flussdiagramm von
Teilen der Hintergrundplaner- Task gezeigt. Die Hintergrund-Task
stellt fest, ob eine der folgenden Hintergrundoperationen benötigt wird:
Eine Plattenanordnungs-Rekonfigurationsoperation, eine Wiedefierstellungsoperation,
eine Überwachungs- und
Leistungsoperation oder eine Plattenoberflächen-Analyseoperation. Die
Plattenanordnungs-Rekonfigurationsoperation wird durchgeführt, um
eine unterschiedliche Zahl von Plattenlaufwerken einem logischen
Datenträger
zuzuteilen. Der Wiederherstellungsprozess wird durchgeführt, um
Daten wiederherzustellen, wenn ein ausgefallenes Laufwerk entdeckt
wird und eine Reserve benutzt wird, um es zu ersetzen, oder wenn
ein vorher ausgefallenes Laufwerk ersetzt (hot plugged) wurde. Die Überwachungs- und Leistungs-Task
stellt fest, ob die physikalischen Laufwerke bestimmte Leistungsschwellen verletzt
haben, z. B. die maximale zulässige
Zahl von Lese- oder Schreibfehlern, die maximal annehmbare Zahl
von Suchfehlern, der maximal annehmbare Wert für die Hochlaufzeit und viele
andere Leistungsparameter. Die Überwachungs-
und Leistungs-Schwellendaten können
durch einen Benutzer auf einen gewünschten Wert gesetzt werden,
indem der geeignete Befehl von dem Host-Computer übermittelt
wird. Die Plattenoberflächen-Analyse-Task prüft auf Medienfehler
und führt
Konsistenzprüfungen
der Festplattenlaufwerke durch.
-
In Schritt 202 wird festgestellt,
ob eine Hot-Plug-Unterbrechung erkannt wurde. Wie oben angemerkt,
wird eine Hot-Plug-Unterbrechung durch einen der mit den fünf Sätzen von
physikalischen Laufwerken 114A-E verbundenen Mikrocontroller 140A-E
geltend gemacht. Eine Hot-Plug-Unterbrechung wird wird erzeugt,
wenn ein physikalisches Plattenlaufwerk eingefügt oder entfernt wird. In der bevorzugten
Ausführung
macht jeder Mikrocontroller 140A-E die Hot-Plug-Unterbrechung über einen
reservierten Pin der entsprechenden 53C825 SCSI-Steuerung 112A-E geltend. Firmware,
die auf jeder SCSI-Steuerung 112A-E läuft, setzt dann das geeignete
der Unterbrechungsbits HOT_PLUG_BUS[I], 1 = 5, die den fünf SCSI-Steuerungen
112A-E entsprechen.
-
Wenn irgendein Bit der Variablen HOT-PLUG_BUS[I]
gesetzt ist, geht der Ablauf zu Schritt 204. In Schritt 204 wird
eine Routine HOT PLUG durch die Hintergrund-Task aufgerufen, um festzustellen,
was die Hot-Plug-Unterbrechung verursacht hat. Die Routine HOT PLUG
bildet eine Liste von Befehlen im lokalen Speicher 108,
um den Fragezyklus durchzuführen.
Als Nächstes übermittelt
die Routine HOT PLUG einen Befehlsblock an die geeignete der SCSI-Steuerungen 112A-E.
Der Befehlsblock gibt die Anfangsadresse der Befehlsliste im lokalen
Speicher 108 an. Als Reaktion erlangt die ausgewählte SCSI-Steuerung 112 die
Kontrolle des PCI-Busses 102, um Befehle aus dem lokalen Speicher 108 zu
holen. Die Befehlsliste veranlasst die SCSI-Steuerung 112,
einen Lesebefehl über
den SCSI-Bus an den Mikrocontroller 140 durchzuführen, um
die Art des Ereignisses zu bestimmen, die das Hot-Plug-Ereignis
verursachte. Solche Ereignisse umfassen das Installiertwerden eines
physikalischen Laufwerks, das Entferntwerden eines physikalischen Laufwerks
oder das Entferntwerden und Wiedereingesetztwerden eines physikalischen
Laufwerks. Der Mikrocontroller speichert verschiedene Statusbits, die
angeben, welche Laufwerke angeschlossen sind, und ob in den Anschlüssen eine Änderung
stattgefunden hat. Befehlszyklen zwischen den SCSI-Steuerungen 112A-E
und den Mikrocontrollern 140A-E werden mittels SCSI-Befehlszyklen
durchgeführt.
-
In Schritt 206 wird dann
eine Prüfung
durchgeführt,
um den Status des Parameters EX-PAND_NEEDED
festzustellen, der, wenn hoch gesetzt, anzeigt, dass eine Plattenanordnungs-Rekonfigurationsanforderung
anhängig
ist, oder eines Parameters EXPAND_RUN-NING, der, wenn hoch gesetzt, anzeigt,
dass ein Rekonfigurationsprozess im Gange ist. Wenn einer der Parameter
hoch gesetzt ist und ein Parameter REBUILD_RUNNING tief ist, um
anzuzeigen, dass momentan kein Wiederherstellungsprozess im Gange
ist, geht der Ablauf zu Schritt 208.
-
In Schritt 208 wird die
Priorität
der Hintergrund-Task, die in diesem Fall die Rekonfigurations-Task
ist, festgelegt. Ein Parameter BACKGROUND_PRIORITY wird gleich einem
Wert gesetzt, der an der Stelle EXPAND_PRIORITY in der globalen
RIS-Datenstruktur gespeichert ist. Die Priorität der Rekonfigurations-Task
ist vom Benutzer wählbar.
Zu einer ausführlicheren
Beschreibung, wie die Hintergrund-Prtorttät die Operationen von Vordergrund-Tasks
beeinflusst, siehe US Patent Nummer 5,822,584.
-
Der Ablauf geht dann zu Schritt 210,
wo die Task EXPAND aufgerufen wird, um die Rekonfigurationsoperation
durchzuführen.
Von Schritt 210 geht der Ablauf zu Schritt 212. Wenn in Schritt 206 keiner der
Parameter EXPAND_NEEDED oder EXPAND_RUNNING hoch gesetzt ist, oder
wenn der Parameter REBUILD_RUNNING hoch gesetzt ist, geht der Ablauf
zu Schritt 214, wo der Hintergrund-Prtoritätsparameter BACKGROUND_PRIORITY
auf null gesetzt wird, um anzuzeigen, dass die Hintergrund-Task
die niedrtgste Prtorttät
hat. Dann geht der Ablauf zu Schritt 216, wo festgestellt wird,
ob bestimmte Hintergrundfunktionen durchzuführen sind. In der bevorzugten
Ausführung
umfassen diese bestimmten, anderen Funktionen die Überwachungs-
und Leistungs-Task und die Plattenoberflächen-Analyse-Task.
-
Von Schritt 216 geht der
Ablauf zu Schritt 212. In Schritt 212 wird die Pausendauer-
und Pausenintervallzeit für
die Vordergrund-Tasks entsprechend dem Wert des Parameters BACKGROUND_PRIORITY
gesetzt. Abhängig
von der für
die Hintergrund-Taks gesetzten Prorität werden der Vordergrund-Task
Verzögerungen
hinzugefügt.
Wenn z. B. der Para meter BACKGROUND_PRIORITY auf null gesetzt wird, wird
einer Anforderung von dem Host-Computer keine Verzögerung hinzugefügt. Wenn
der Parameter BACKGROUND_ PRIORITY auf 127 gesetzt wird, wird
jeder Host-Anforderung eine Verzögerung
von 0.1 s hinzugefügt.
Wenn der Parameter BACKGROUND_PRIORITY auf 255 gesetzt
wird, wird jeder Host-Anforderung eine Verzögerung von 1.6 s hinzugefügt. Zu werteren
Einzelheiten des Prtorttäts-Einstellschemas
siehe die oben genannte Patentanmeldung betitelt "User Selectable Prtority for
Disk Array Background Operations".
Von Schritt 212 kehrt die Steuerung zurück zu Schritt 202.
Die Hintergrundplaner-Task wird daher fortlaufend von dem lokalen
Prozessor 106 ausgeführt.
-
Nun auf 6A–6D verweisend wird ein Flussdiagramm
der Task EXPAND gezeigt. Die Task EXPAND wird von der Hintergrundplaner-Task
wiederholt aufgerufen, bis die Rekonfigurationsoperation vollendet
ist. Zuerst wird in Schritt 504 festgestellt, ob der Parameter
EXPAND RUNNING tief ist und der Parameter EXPAND NEEDED hoch ist.
Wenn beide obigen Bedingungen wahr sind, geht der Ablauf zu Schritt 506,
wo verschiedene Rekonfigurationsparameter gesetzt werden. Diese
Rekonfigurationsparameter werden in der XP-Datenstruktur gespeichert. Die Parameter
umfassen die logische Datenträgereinheitsnummer
LOGICAL UNIT, die gleich der in der Erweiterungsanforderungs-Queue-Stelle EX-PAND_UNIT_QUEUE[0]
gespeicherten Datenträgereinheitsnummer
gesetzt wird. Der Zeiger auf die Konfigurationsinformation des logischen
Quellen-Datenträgers
wird ebenfalls zurückgewonnen und
in den Parameter X_OLD_LOGICAL gelegt. Die volle Streifengröße des logischen
Ziel-Datenträgers wird
in den Parameter FULL_STRIPE_SIZE gestellt und wird berechnet, indem
der Parameter DISTRIBUTION_FACTOR mit der Zahl von physikalischen
Datenlaufwerken multipliziert wird. Ein Parameter BLOCKS_LEFT TO
EX-PAND wird gleich
dem Wert des Parameters BLOCKS_ON_VOLUME des logischen Quellen-Datenträgers gesetzt.
Der Parameter BLOCKS_LEFT_TO_EXPAND wird daher zu Anfang gleich
der Gesamtzahl von nutzbaren Sektoren in dem Quellen-Datenträger gesetzt.
In Schritt 506 wird auch eine Prüfung durchgeführt, um
festzustellen, ob die Zahl von Sektoren im Quellen-Datenträger größer als
die Zahl von Sektoren im Ziel-Datenträger ist. Wenn ja, wird der
Parameter BLOCKS LEFT TO EXPAND gleich dem Parameter BLOCKS ON_
VOLUME des Ziel-Datenträgers
gesetzt. In diesem Fall gehen alle übrigen Blöcke im Quellen-Datenträger einfach
verloren. Wenn gewünscht,
kann die Host-Software programmiert werden, die Rekonfiguration
zu verhindern, wenn die Zahl von Sektoren im logischen Quellen-Datenträger größer ist
als die Zahl von Sektoren im logischen Ziel-Datenträger.
-
Ein Parameter TOTAL BLOCKS wird gleich dem
Anfangswert des Parameters BLOCKS_ LEFT_TO_EXPAND gesetzt. Wenn
der Parameter TOTAL_BLOCKS kleiner als oder gleich dem Parameter
ITERATION_BLOCK_COUNT ist, kann die Rekonfigurationsoperation in
einer Iteration durchgeführt
werden. In diesem Fall wird der Parameter DIRECTION_ UP wahr gesetzt,
ein Parameter STARTING_BLOCK wird auf den Wert null gesetzt, und
ein Parameter COUNT wird auf den Wert von TOTAL BLOCKS gesetzt.
Der Parameter COUNT spezziert die Zahl von Blöcken, die in der momentanen
Rekonfigurations-Verschiebeoperation enthalten ist, und der Parameter
STARTING_BLOCKS spezziert die Anfangsposition der Rekonfigurationsoperation.
Wenn die obige Bedingung nicht wahr ist, werden die folgenden Vergleiche
durchgeführt.
Wenn der Parameter DIRECTION_UP wahr gegesetzt ist, wird der Parameter
STARTING BLOCK auf den Wert null gesetzt, und der Parameter COUNT
wird auf den Wert des Parameters ITERATION_BLOCK_COUNT gesetzt.
Andernfalls wird, wenn der Parameter DIRECTION_UP unwahr gesetzt
ist, der Wert von COUNT gleich dem MOD der Parameter TOTAL BLOCKS
und FULL STRIPE SIZE gesetzt, der die Zahl von Sektoren im letzten
Streifen erlangt. Wenn die Rekonfigurationsoperation in der umgekehrten Richtung
abläuft,
gibt es eine Möglichkeit,
dass die Größe des ersten
Streifens, auf den zugegriffen wird, nicht die volle Streifengröße ist.
In diesem Fall muss der Wert des Parameters COUNT justiert werden,
um die abweichende Größe zu akkomodieren.
Wenn in Schritt 506 festgestellt wird, dass der Parameter DIRECTION
UP tief gesetzt ist, wird die tatsächliche Zahl von Sektoren,
auf der die Task EXPAND zu arbeiten hat, in den Parameter COUNT
gestellt, indem die obige MOD-Operation durchgeführt wird. Wenn das Ergebnis
null ist, was anzeigt, dass der letzte Streifen ein voller Streifen
ist, wird der Wert von COUNT gleich dem Parameter ITERATION_BLOCK_COUNT
gesetzt. Der Parameter STARTING_BLOCK wird auf den Wert (TOTAL_BLOCKS_COUNT)
gesetzt, der die Adresse des ersten Sektors im letzten Streifen
des Ziel-Datenträger
ist.
-
Schließlich wird ein Parameter CURRENT_BLOCK,
der den Sektor verfolgt, auf den die Task EXPAND momentan zugreift,
zu Anfang gleich dem Wert des Parameters STARTING_ BLOCK gesetzt.
Ein Parameter CURRENT_ENDING_BLOCK, der den letzten laufenden Block
darstellt, wird gleich dem Wert (CURRENT BLOCK + COUNT – 1) gesetzt.
Der Parameter EXPAND_RUNNING wird auf den Wahr-Status gesetzt, um
anzuzeigen, dass die Task EXPAND im Gange ist.
-
Die oben beschriebenen Rekonfigurationsparameterwerden
in der XP = (Erweiterungsfortgang) Datenstruktur gespeichert, die
im lokalen Speicher 108 gelegen ist. Im Folgenden wird
das Symbol "XP" benutzt, um auf
einen Parameter in der XP-Struktur zu zeigen. Nachdem die Parameter
im lokalen Speicher 108 gesetzt sind, wird die XP-Datenstruktur
in den Konfigurationsbereich in dem Schreib-Eintragungs-Puffer 136 kopiert,
um den Fortgang der Task EXPAND zu aktualisieren. Die momentanen
Werte der RIS-Parameter werden eben falls in die reservierten Infonnationssektoren
des logischen Ziel-Datenträgers
zurückgeschrieben.
-
Von Schritt 506 geht der
Ablauf zu Schritt 508. Außerdem geht, wenn eine der
in Schritt 504 geprüften
Bedingungen nicht wahr ist, der Ablauf von Schritt 504 zu
Schritt 508. In Schritt 508 wird eine Prüfung durchgeführt, um
festzustellen, ob der Parameter EXPAND_RUN-NING hoch gesetzt ist. Wenn ja, geht
der Ablauf zu Schritt 510, wo festgestellt wird, ob der
Status des logischen Ziel-Datenträgers LOG_VOL_FAILED ist. Wenn
ja, geht der Ablauf zu Schritt 512, wo das Flag STATUS
der Anforderung auf den Status FATAL_ERROR gesetzt wird. Von Schritt 512 geht
der Ablauf zu Schritt 556. Wenn in Schritt 510 der
logische Ziel-Datenträger nicht
im Status LOG_VOL_FAILED ist, geht der Ablauf zu Schritt 524.
Von Schritt 508 kehrt, wenn der Parameter EXPAND_RUNNING
nicht wahr ist, die Steuerung zurück zu dem aufrufenden Programm.
-
Während
die Task EXPAND auf einem bestimmten Streifen arbeitet, müssen die
Sektoren in diesem Streifen gesperrt werden, sodass keine andere
Host-Anforderung auf die gleichen Sektoren zugreifen kann. Im lokalen
Speicher 108 wird eine Tabelle gehalten, die alle Sektoren
verfolgt, auf die momentan zugegriffen wird. In Schritt 524 wird
festgestellt, ob irgendwelche der Sektoren in dem laufenden Streifen
Gegenstand einer momentanen Host-Anforderung sind. Wenn ja, können diese
Sektoren von der Task EXPAND nicht gesperrt werden. Als Folge geht
der Ablauf zu Schritt 526, wo die Task EXPAND vorübergehend,
vorzugsweise etwa 0.1 s, angehalten wird, um der Host-Anforderung
zu gestatten, die Ausführung
zu vollenden. Der Ablauf kehrt zu Schritt 524 zurück, um festzustellen,
ob die Sektoren, auf die zugegriffen wird, noch belegt sind. Wenn nicht,
geht der Ablauf zu Schritt 528, wo der Streifen in dem Ziel-Datenträger, auf
den die Task EXPAND zugreift, gesperrt ist. Wenn der gewünschte Streifen geeignet
gesperrt ist, geht der Ablauf zu Schritt 530.
-
In Schritt 530 werden die
momentanen Werte der Rekonfigurationsparameter in der XP-Datenstruktur
im Konfigurationsbereich des Schreib-Eintragungs-Puffers 136 gespeichert.
Die nächsten
von der Task EXPAND auszuführenden
Schritte sind die Lese- und Schreibschritte, in denen Daten aus
dem Quellen-Datenträgerin
den Schreib-Eintragungs-Puffer 136 übertragen werden, die dann
in den logischen Ziel-Datenträger
zurückgeschrieben
werden. Mehrere Parameter werden zusammen mit den Lese- und Schreibanfordentngen übergeben.
Dann werden in Schritt 531 mit den Lese- und Schreibanforderungen verbundene
Parameter gesetzt. Die logische Rekonfigurationsanforderungsinformation
wird in einem Breich des lokalen Speichers 108 beginnend
bei der Stelle EXPAND_LOGICAL gespeichert. Ein Parameter EXPAND_LOGICAL.UNIT
wird gleich dem Wert von XP.LOGICAL_UNIT gesetzt. Ein Statusparameter
EXPAND_LOGICAL.STATUS wird auf den Status NO_ERROR gesetzt. Parameter EXPAND_LOGICAL.BLOCK
und EXPAND_LOGICAL.BLOCK COUNT werden gleich den Werten von Parametern
XP.CURRENT_BLOCK bzw. XP.COUNT gesetzt. Ein Parameter EXPAND_LOGICAL.REQUEST_TYPE
wird auf einen Status gleich dem bitweisem ODER von Statussen EXPAND_REQUEST, INTERNAL_LOGICAL_REQ
und LOCKED_BY_ORIGINATOR gesetzt. Der Parameter REQUEST_TYPE zeigt
daher an, dass die momentane Anforderung eine Plattenanordnungs-Rekonfigurationsanforderung
ist, eine Anforderung ist, die ganz innerhalb der Plattensteuerplatine 10 durchgeführt wird,
und eine Anforderung ist, die vom Anforderer gesperrt ist. Des Weiteren
wird ein Parameter EXPAND_LOGICAL.COMMAND auf den Status READ gesetzt,
um anzuzeigen, dass ein Lesebefehl durchzuführen ist.
-
Als Nächstes wird in Schritt 532 eine
Routine EXECUTE_LOGICAL_REQUEST aufgerufen, wobei die Information übergeben
wird, auf die von EXPAND LOGICAL gezeigt wird. Die logische Leseanforderung
bewegt Daten aus dem Quellen-Datenträger in den Transferteil des
Schreib-Eintragungs-Puffers 136. Die Menge an bewegten
Daten ist vorzugsweise gleich einem Streifen des Ziel-Datenträgers. Als Nächstes wird
in Schritt 534 die Operation der Task EXPAND ausgesetzt, bis die
Leseoperation in Schritt 532 vollendet ist. Sobald die
Routine EXECUTE_LOGICAL_REQUEST anzeigt, dass die Leseoperation
vollendet ist, geht der Ablauf zu Schritt 536, wo das von
der Routine EXECUTE_LOGICAL_RE-QUEST
zurückgegebene Flag
STATUS geprüft
wird. Wenn festgestellt wird, das ein fataler Fehler aufgetreten
ist, geht der Ablauf zu Schritt 556, um die fatale Fehlerbedingung
zu behandeln. Wenn kein fataler Fehler angezeigt wird, geht der
Ablauf zu Schritt 538, wo die momentanen Werte der Rekonfigurationsparameter
in der XP-Datenstruktur wieder im Konfigurationsbereich des Schreib-Eintragungs-Puffers 136 gespeichert
werden, um die Fortgangs-Information
der Task EXPAND zu akualisieren.
-
Von Schritt 538 geht der
Ablauf zu Schritt 539, wo Parameter für die nächste logische Anforderung
gesetzt werden. Die Parameter werden auf die gleichen Werte wie
die logische Leseanforderung gesetzt, außer dass der Parameter EXPAND_LOGICAL.COMMAND
auf den Status WRITE_TO_MEDIA gesetzt wird. Als Nächstes wird in
Schritt 540 die Routine EXE-CUTE_LOGICAL_REQUEST
aufgerufen, um eine Schreiben-auf-Medien-Operation durchzuführen. Dieser
Befehl bewirkt, dass Daten aus dem logischen Quellen-Datenträger, die
gerade in den Schreib-Eintragungs-Puffer 136 übertragen
wurden, in den entsprechenden Streifen des logischen Ziel-Datenträgers zurückgeschrteben
werden. Dann geht der Ablauf zu Schritt 542, wo die Operation
der Task EXPAND ausgesetzt wird, bis die Routine EXE-CUTE_LOGICAL_REQUEST
anzeigt, dass sie fertig ist. Als Nächstes wird in Schritt 544 das
Flag STATUS der Schreiboperation geprüft. Wenn ein fataler Fehler
erkannt wird, geht der Ablauf zu Schritt 556. Andernfalls geht der
Ablauf zu Schntt 546, wo der in Schritt 528 gesperrte Streifen
entsperrt wird, um Zugriff durch andere logische Anforderungen zu erlauben.
-
Dann wird in Schritt 548 festgestellt,
ob der Parameter XP.DIRECTION_UP hoch gesetzt ist. Wenn ja, geht
der Ablauf zu Schritt 550, wo der Parameter XP.CURRENT_BLOCK, der
den momenten Sektor, auf den die Task EXPAND zugreift, verfolgt, um
den Wert XP. COUNT erhöht
wird. Wenn der Parameter XP.DIRECTION_UP in Schritt 548 tief
gesetzt ist, geht der Ablauf zu Schntt 552, wo der Parameter
XP.CURRENT_BLOCK um den Wert XP.COUNT dekrementiert wird. Von entweder
Schritt 550 oder 522 geht der Ablauf zu Schntt 554,
wo der Parameter XP.BLOCKS_LEFT_TO-EXPAND um den Wert XP.COUNT dekrementiert
wird. In Schritt 554 wird dann der Parameter XP.COUNT auf
den Wert des Parameters ITERATION_BLOCK_COUNT gesetzt, falls nicht
der Wert von ITERATION_BLOCK COUNT größer als der Wert des Parameters BLOCKS_LEFT_TO_EXPAND
ist, in welchem Fall der Wert von COUNT gleich BLOCKS_LEFT_TO_EXPAND
gesetzt wird. Der Wert des Parameters CURRENT_ENDING_BLOCK wird
dann auf den Wert (CURRENT_BLOCK + COUNT – 1) gesetzt.
-
Von Schritt 554 geht der
Ablauf zu Schritt 556, wo das Flag STATUS geprüft wird,
um festzustellen, ob es auf Status FATAL_ERROR gesetzt ist. Wenn
ja, geht der Ablauf zu Schritt 558. Wenn nicht, geht der
Ablauf zu Schntt 560. In Schritt 558 wird ein Erwerterungsfehlerplan
aktualisiert, wobei der Ziel-Datenträger als Status LOG_VOL_FAILED
markiert wird. Von Status 558 geht der Ablauf zu Status 564.
-
In Schntt 560 wird festgestellt,
ob der Parameter XP.BLOCKS_LEFT_TO_EXPAND ungleich null ist, was
anzeigt, dass der Rekonfigurationsprozess weitergehen sollte. Wenn
der Parameter XP.BLOCKS_LEFT_TO_EXPAND null ist, geht der Ablauf
zu Schntt 562, ansonsten geht der Ablauf zu Schritt 561,
wo Rekonfigurationsfortgangsinformation in den Konfigurationsbereich
des Schreib-Eintragungs-Puffers 136 geschrieben wird. Von
Schritt 561 kehrt die Steuerung zurück zu dem aufrufenden Programm.
-
In Schritt 562 wird die
Routine UPDATE_LOGICAL_UNIT_STATE aufgerufen, um den Datenträgerstatus
des logischen Ziel-Datenträgers
zu modifizieren. Wie früher
erwähnt,
aktualisiert die Routine UPDATE_LOGICAL_UNIT_STATE den Datenträgerzustand
auf der Basis des Status der physikalischen Laufwerke und des Fehlertoleranzmodus.
Außerdem
ruft die UPDATE_LOGICAL_UNIT_STATE eine Unterbrechung an das Host-Betriebssystem
auf, um die Vollendung des Rekonfigurationsprozesses in Schritt 562
anzuzeigen.
-
Von Schritt 562 oder Schritt 558 geht
der Ablauf zu Schritt 563, wo eine Zuwachsvariable 1 auf den
Wert 1 gesetzt wird. Dann wird in Schritt 564 festgestellt,
ob der Wert des Parameters 1 kleiner als der Parameter
EXPAND_UNIT_COUNT ist. Wenn ja, geht der Ablauf zu Schritt 566,
wo die Erweiterungsanforderungs-Queue akualisiert wird, wenn der
verlangte logische Datenträger
einem logischen Datenträger
in der Queue entsprtcht. Wenn der verlangte logische Datenträger in der
Queue ist, werden die Einträge
in der Erweiterungsanforderungs-Queue EXPAND_UNIT_QUEUE nach unten
geschoben, d. h., der Eintrag EXPAND-UNIT QUEUE[I] wird in den Eintrag EXPAND_UNIT
QUEUE[I-1] geschoben. Für jede Übereinstimmung
wird der Parameter EXPAND_UNIT_COUNT wird auch um den Wert 1 dekrementiert.
Diese Operation hat eine von zwei Wirkungen. Wenn ein Befehl SET_CONFIGURA-TION übermittelt
wird, der kein Rekonfigurationsbefehl ist, wird der verlangte logische
Datenträger
aus der Erweiterungsanforderungs-Queue enffernt. Dies erlaubt dem
Befehl SET CONFIGURATION, eine anhängige Rekonfigurationsanforderung
abzubrechen. Die zweite Wirkung ist, dass eine vollendete Rekonfigurationsanforderung
aus der Queue entfernt wird. Als Nächstes wird in Schritt 568
der Wert der Vartablen I um eins dekrementiert. Von Schritt 568
kehrt der Ablauf zu Schritt 564 zurück.
-
Wenn der Wert der Vartablen 1 größer oder gleich
dem Parameter EXPAND UNIT COUNT ist, geht der Ablauf zu Schritt 572,
wo festgestellt wird, ob der Wert des Parameters EX-PAND_UNIT_COUNT größer als
null ist, Wenn ja, geht der Ablauf zu Schritt 574, wo der
Parameter EXPAND_NEEDED auf den Status Wahr gesetzt wird. Wenn nicht,
geht der Ablauf zu Schritt 576, wo der Paramenter EXPAND_NEEDED
auf den Status Unwahr gesetzt wird. Von entweder Schritt 574 oder 576 geht
der Ablauf zu Schritt 578, wo festgestellt wird, ob wenigstens
eine Übereinstimmung
aufgetreten ist (d. h. ein Eintrag wurde aus der Erweiterungsanforderungs-Queue
enffernt) und ob der Parameter EXPAND_NEEDED unwahr ist. Wenn ja,
geht der Ablauf zu Schritt 580, wo der dem Rekonfigurationsprozess
zugeteilte Teil des Schreib-Eintragungs-Puffers 136 zur
Benutzung durch andere logische Anforderungen freigesetzt wird.
Von Schritt 580 oder von Schritt 578 geht, wenn
die Bedingung von Schritt 578 nicht wahr ist, der Ablauf
zu Schritt 581, wo festgestellt wird, ob der erste Eintrag
der Queue entfernt wurde oder ob der Parameter EXPAND_NEEDED unwahr
ist. Wenn eines wahr ist, geht der Ablauf zu Schritt 582,
wo der Parameter EXPAND RUNNING unwahr gesetzt wird. Wenn die Bedingung
in Schritt 581 nicht wahr ist, geht der Ablauf zu Schritt 585.
-
Von Schritt 582 geht der
Ablauf zu Schritt 583, wo die RIS-Parameter in die reservierten
In formationssektoren des logischen Ziel-Datenträgers zurückgespeichert werden. Von Schritt
583 geht der Ablauf zu Schritt 584, wo die momentanen Werte
der XP-Parameter in den Konfigurationsbereich des Schreib-Eintragungs-Puffers 136 geschrieben
werden. Von Schritt 584 geht der Ablauf zu Schritt 585, wo eine
Unterbrechung zurück
an den Host gesendet wird, um die Vollendung der Host-Anforderung
anzuzeigen. Von Schritt 585 kehrt die Steuerung zurück zu dem
aufrufenden Programm.
-
Nun auf 7A–7B verweisend wird ein Flussdiagramm
der Routine EXECUTE_LOGICAL_ REQUEST gezeigt. Die logische Anforderungsinformation
ist in einer Datenstruktur enthalten, auf die der Parameter REQUEST
zeigt. Zu Zwecken der Task EXPAND wird die logische Anforderungsinformation durch
den Zeigerparameter EXPAND_LOGICAL, d. h. RE-QUEST = EXPAND LOGICAL, übergeben.
Lese- und Schreibanforderungen werden ebenfalls von der Routine
EXECUTE_LOGICAL_REQUEST behandelt, während die Task EX-PAND eine Online-Plattenanordnungs-Rekonfiguration
durchführt. Abhängig davon,
wo die Task EXPAND vorangeschritten ist, werden die geeigneten Konfigurationsparameter
ausgewählt,
um auf die gewünschten
Stellen in dem passenden logischen Datenträger zuzugreifen.
-
Beginnend in Schritt 602 wird
der Zeiger auf die Konfigurationsinformation des logischen Datenträgers, auf
die zuzugreifen ist, in den Parameter LOGICAL gestellt. Wie erörtert, wird
die Konfigurationsinformation in der globalen RIS-Datenstruktur
im lokalen Speicher 108 gespeichert. Dann, wenn in Schritt 604 festgestellt
wird, dass das Feld COMMAND der Anforderung ein Wert ist, der einen
Lese-, Schreib- oder Schreiben-auf-Medien-Operation darstellt, geht
der Ablauf zu Schritt 606. Andernfalls geht der Ablauf
zu Schritt 642, um die Art des verlangten Befehls festzustellen.
-
In Schritt 606 wird festgestellt,
ob der Parameter EXPAND_RUNNING hoch gesetzt ist, was anzeigt, das
die Task EXPAND momentan läuft.
Wenn ja, geht der Ablauf zu Schritt 698, wo der Parameter LOGICAL
gleich einem von einer Routine PROCESS_EXPAND_REQUEST zurückgegebenen Parameter
gesetzt wird. Die Routine PROCESS_EXPAND_REQUEST stellt zuerst fest, ob
die anfordernde Routine die Task EXPAND ist. Wenn ja, prüft sie,
ob eine Leseanforderung oder eine Schreibanforderung von der Task
EXPAND geltend gemacht wird. Wenn eine Leseanforderung erkannt wird,
wird der Parameter LOGICAL gesetzt, um auf die Konfigurationsinformation
des logischen Quellen-Datenträgers
zu zeigen. Dies erlaubt, dass die geeigneten Daten aus dem logischen
Datenträger
gelesen und in den zugeteilten Bereich des Schreib-Eintragungs-Puffers 135 übertragen
werden. Wenn eine Schreibanforderung von der Routine PROCESS_EXPAND_REQUEST
erkannt wird, wird der Para meter LOGICAL gesetzt, um auf die Konfigurationsinformation
des logischen Ziel-Datenträgers zu
zeigen.
-
Wenn die Anforderung eine Host-Schreib- oder
Leseanforderung ist, führt
die Routine PROCESS_EXPAND_REQUEST einen Vergleich der Sektoren,
auf die zugegriffen wird, mit den bereits von der Task EXPAND verarbeiteten
Sektoren durch. Auf der Basis dieses Vergleichs werden die Parameter
des logischen Quellen- oder Ziel-Datenträgers benutzt, um die richtigen
Daten zu erlangen.
-
Von Schritt 608 oder von
Schritt 606 geht, wenn der Parameter EXPAND_RUNNING tief
ist, der Ablauf zu Schritt 610. In Schritt 610 wird
festgestellt, ob der Sektor, auf den die Task EXPAND momentan zugreift,
und die Gesamtsektorzahl im Bereich sind. Zuerst wird festgestellt,
ob ein Parameter REQUEST.BLOCK-COUNT gleich dem Wert null ist. Der Parameter
REQUEST.BLOCK COUNT stellt die Zahl von Sektoren dar, auf der in
dem laufenden Streifen zu arbeiten ist. In Schritt 610 wird
auch festgestellt, ob ein Parameter REQUEST. BLOCK, der den Sektor,
auf den momentan zugegriffen wird, darstellt, größer oder gleich dem Parameter
BLOCKS ON VOLUME des spezifizierten logischen Datenträgers ist.
Der Parameter BLOCKS ON VOLUME stellt die Gesamtzahl von Sektoren
in dem logischen Datenträger
dar. Außerdem
wird in Schritt 610 festgestellt, ob die Summe der Parameter
REQUEST.BLOCK und REQUEST.BLOCK COUNT größer als der Parameter BLOCKS_
ON VOLUME ist. Dies zeigt an, dass der endende Sektor, auf den die
momentane logische Anforderung zuzugreifen hat, die letzte dem spezifizierten
logischen Datenträger
zugeteilte Sektorposition überschreiten
würde.
Wenn eine der obigen Bedingungen wahr ist, geht der Ablauf zu Schritt 612, wo
das Flag STATUS der Anforderung auf den Status BAD_ REQUEST gesetzt
wird. Von Schritt 612 geht der Ablauf zu Schritt 642.
Wenn keine der Bdingungen in Schritt 610 wahr ist, geht
der Ablauf von Schritt 610 direkt zu Schritt 614.
-
In Schritt 610 wird festgestellt,
ob ein Parameter GLOBAL RIS ungleich null ist, und ob der Datenträgerstatus
des spezifizierten logischen Datenträgers auf einem der folgenden
aktiven Zustände
ist: LOG_VOL_OK, anzeigend, dass das logische Laufwerk betrtebsfähig ist;
LOG_ VOL_REBUILDIG, anzeigend, dass das logische Laufwerk grade
wiederhergestellt wird; LOG_VOL_NEEDS_REBUILD, anzeigend; dass das
momentane logische Laufwerk wiederhergestellt werden muss; LOG VOL
REGENING, anzeigend, dass ein ausgefallenes logisches Laufwerk existiert,
aber dass der gewählte
Fehlertoleranzmodus ermöglicht,
dass die Daten des ausgefallenen Laufwerks regeneriert werden, und LOG_VOL_OVERHEATING,
anzeigend, dass Hardware in dem System sich überhitzt. Wenn der Parameter
GLOBAL RIS ein Nicht-Null-Wert ist und der Datenträgerstatus
auf einem der obigen Zustände
ist, geht der Ablauf zu Schritt 616; andernfalls geht der Ablauf
zu Schritt 640.
-
In Schritt 616 wird festgestellt,
ob eingetragene Schreibungen in dem Schreib-Eintragungs-Puffer 135 freigegeben
sind, und ob das Feld REQUEST_TYPE der logischen Anforderung eine Host-Anforderung
ist. Für
die Plattenanordnungs-Rekonfigurationsoperation wird das Feld REQUEST_TYPE
auf einen Status gesetzt, der das ODER der Statusse EXPAND_RE-QUEST, INTERNAL_LOGICAL_REQ
und LOCKED_BY_ORIGINATR ist. Die in Schritt 616 geprüfte Bedingung
wird daher für
von der Task EXPAND aufgerufene Lese- und Schreibanforderungen nicht
erfüllt
werden. Für
von der Task EXPAND angeforderte Operationen wird das Schreib-Eintragen
in den Puffer 136 nicht durchgeführt werden, da die Datenübertragungen
direkt zwischen dem Puffer 136 und den SCSI-Steuerungen
112A-E sind. Wenn eingetragene Schreibungen nicht freigegeben sind,
oder wenn die logische Anforderung keine Host-Anforderung ist, geht
der Ablauf vn Schritt 616 zu Schritt 628.
-
Wenn das Schreib-Eintragen freigegeben
ist und die logische Anforderung eine Host-Anforderung ist, geht
der Ablauf von Schritt 616 zu Schritt 618, wo die Schreib-Eintragung
in den Puffer 136 durchgeführt wird. Von Schritt 618 geht
der Ablauf zu Schritt 620, wo festgestellt wird, ob ein
Statusparameter CACHE_OP_STATUS gleich null ist. Wenn der Status
CACHEOP_STATUS null ist, zeigt dies an, dass das Schreib-Eintragen
aus irgendeinem Grund nicht erfolgte, in welchem Fall der Ablauf
zu Schritt 628 geht. Wenn der Statusparameter CACHE_ OP_STATUS
ein Nicht-Null-Wert ist, geht der Ablauf zu Schritt 622,
wo das Feld STATUS der logischen Anforderung auf den geeigneten
Status gesetzt wird und eine Vollendungsnachricht zurück an die Host-Software
geschickt wird, die ihr sagt, dass die logische Anforderung geendet
hat. Wie früher
erwähnt,
erlaubt daher, wenn der Host eine Schreibung in das Plattenanordnungs-Untersystem 142 durchführt, das
Schreiben von Daten in den Schreib-Eintragungs-Puffer 136,
dass ein Vollendungssignal viel früher zurück an den Host gesendet wird
als wenn die Schreibung in das Festplatten-Untersystem 142 stattgefunden
hätte.
Von Schritt 622 kehrt die Steuerung zurück zu dem aufrufenden Programm.
-
Wenn in Schritt 628 festgestellt
wird, dass das Feld COMMAND der logischen Anforderung ein Schreiben-auf-Medien-Befehl
ist, geht der Ablauf zu Schritt 630, wo der Parameter REQUEST.COMMAND
in den Status WRITE modifiziert wird. Der Ablauf geht dann zu Schritt 632.
Wenn die Anforderung kein Schreiben-auf-Medien-Befehl ist, geht
der Ablauf von Schritt 628 zu Schritt 632. In
Schritt 632 wird die logische Anforderung in eine physikalische
Anforderung abgebildet, um Daten zu und von den physikalischen Plattenlaufwerken
in dem Plattenuntersystem 142 zu übertragen. Das Abbilden hängt von
dem gewählten
Datenverteilungsmodus und dem gewählten Fehlertoleranzmodus ab.
In der bevorzugten Ausführung variiert
das Abbildungsschema zwischen direktem Abbilden, Mehrfachblock-Verschachtelungs-Abbilden
und Pantäts-Abbilden.
Der Fehlertoleranzmodus kann entweder auf keine Fehlertoleranz,
Spiegel- oder RAID 1 Fehlertoleranz, RAID 4 Fehlertoleranz
oder RAID 5 Fehlertoleranz gesetzt werden. Es wird angemerkt,
dass für
eine Rekonfigurationsoperation verschiedene Toleranzmodi für den logischen
Ziel- und Quellendatenträger
spezifiziert werden können.
Die logischen Anforderungen werden in Physikale Anforderungen abgebildet,
wobei der lokale Prozessor 106 eine Befehlsliste in dem
lokalen Speicher 108 erstellt. Zu einem künftigen
Zeitpunkt schreibt der lokale Prozessor 106 einen Zeiger auf
die Befehlsliste in die geeigneten CDBs, die in die geeignete der
SCSI-Steuerungen 112A-E geschrieben werden, die als Reaktion die
Kontrolle des PCI-Busses 102 erlangt, um die physikalischen
Befehle aus dem lokalen Speicher 108 zu holen. Von Schritt 632 kehrt
die Steuerung zurück
zu dem aufrufenden Programm.
-
Wenn in Schritt 614 der
Parameter GLOBAL-RIS ein Nicht-Null-Wert ist oder der Datenträgerstatus
des spezifizierten logischen Laufwerks nicht in einem der aufgeführten Statusse
ist, geht der Ablauf zu Schritt 640. In Schritt 640 wird
das Flag STATUS der logischen Anforderung auf den Status FATAL ERROR
gesetzt. Der Ablauf geht dann von Schritt 640 zu Schritt 642,
wo logische Anforderungen anders als Lese-, Schreib- oder Schreiben-auf-Medien-Anforderungen
behandelt werden. Von Schritt 642 kehrt die Steuerung zurück zu dem aufrufenden
Programm.
-
Nun auf 8 verweisend wird ein Flussdiagramm der
Routine PROCESS_EXPAND_REQUEST gezeigt. Beginnend in Schritt 700
wird festgestellt, ob der angeforderte logische Datenträger in der
Rekonfigurations-Queue ansteht. Außerdem wird festgestellt, ob der
Parameter EXPAND_RUNNING auf dem Status unwahr ist, oder ob der
angeforderte logische Datenträger
in der Queue ansteht, aber von der laufenden Rekonfigurationsoperation
noch nicht verarbeitet wird. Wenn eine der obigen Bedingungen wahr
ist, geht der Ablauf zu Schritt 701, wo der Parameter LOGICAL
gesetzt wird, um auf die alte Konfiguarationsinformation des angeforderten
Datenträgers
zu zeigen. Von Schritt 701 kehrt die Steuerung zurück zu dem
aufrufenden Programm.
-
Wenn die Bedingungen in Schritt 700 nicht wahr
sind, geht der Ablauf zu Schritt 702. Wenn in Schritt 702 festgestellt
wird, dass der Parameter EXPAND_RUNNING hoch gesetzt ist und die
Datenträgereinheit
REQUEST UNIT gleich der logischen Erweiterungs-Datenträgereinheit XP.LOGICAL_UNIT
ist, geht der Ablauf zu Schritt 704. Andernfalls wird der
angeforderte logische Datenträger
von der Task EXPAND momentan nicht verarbeitet, und die Steuerung
kehrt zu dem aufrufenden Programm zurück, wobei der Status des Parameters LOGICAL unverändert bleibt.
In Schritt 704 wird festgestellt, ob der Parameter REQUEST.REQUEST TYPE
eine Rekonfigurationsanforderung anzeigt. Wenn ja, geht der Ablauf
zu Schritt 705, wo festgestellt wird, ob der angeforderte
Befehl eine Lesebefehl ist. Wenn ja, geht der Ablauf zu Schritt 706,
wo der Parameter LOGICAL auf den Wert des Parameters X.OLD_LOGICAL
gesetzt wird, um auf die Konfigurationsparameter des logischen Quellen-Datenträgers zu
zeigen. Wenn der angeforderte Befehl kein Lesebefehl ist, kehrt
der Ablauf von Schritt 705 mit dem Parameter LOGICAL unverändert zurück. Von Schritt 706 kehrt
die Steuerung zu dem aufrufenden Programm zurück.
-
Wenn in Schritt 704 die
Anforderung keine Rekonfigurationsanforderung ist, d. h., sie ist
eine Schreib- oder Leseanforderung vom Host, geht der Ablauf zu
Schritt 708, wo festgestellt wird, ob die Task EXPAND den
angeforderten Sektor erreicht hat. Während der Rekonfigurationsprozess
im Gange ist, sind vom Host übermittelte
Lese- und Schreibanforderungen an entweder den alten logischen Datenträger oder
den neuen logischen Datenträger
erlaubt. Ebenfalls erlaubt sind Puffer-Spülen-Anforderungen, wo die schmutzigen
Zeilen im Schreib-Eintragungs-Puffer 136 zurück in das
Plattenuntersystem 142 gespült werden. Um sicherzustellen,
dass die Übertragung
von Daten an die richtigen Stellen im Plattenuntersystem 142 erfolgt,
muss festgestellt werden, ob die Sektoren, auf die von der logischen Anforderung
zugegriffen wird, einen Bereich betreffen, der bereits von der Task
EXPAND rekonfiguriert wurde. Wenn die angeforderten Blöcke bereits
von der Task EXPAND verarbeitet wurden, wird daher die Konfiguration
des logischen Ziel-Datenträgers
benutzt. Wenn andererseits auf die angeforderten Blöcke von
der Task EXPAND noch nicht zugegriffen wurde, wird die Konfiguration
des logischen Quellen-Datenträgers
benutzt. Es besteht auch die Möglichkeit,
dass die logische Anforderung Blöcke
anfordern kann, die sowohl den logischen Ziel- als auch den Quellen-Datenträger überspannen.
In diesem Fall wird die logische Anforderung ausgesetzt, bis die Task
EXPAND in der Lage ist, die angeforderten Blöcke einzuholen.
-
Wenn in Schritt 708 der
Parameter XP.DIRECTION_UP hoch gesetzt ist, um anzuzeigen, dass
die Task EXPAND sich in der Vorwärtsrichtung
bewegt, wird daher festgestellt, ob der Parameter REQUEST.BLOCK
größer als
oder gleich der Summe der Parameter XP.CUR-RENT_BLOCK und XP.COUNT ist. Dies zeigt
an, dass der Anfangssektor der logischen Anforderung vor den Sektoren
liegt, die von der Task EXPAND verarbeitet wurden, d. h., auf die
Sektoren wurde von der Task EXPAND noch nicht zugegriffen. Wenn
aber der Parameter XP.DIRECTION_UP tief gesetzt ist, wird festgestellt, ob
die Summe der Parameter RE-QUEST.BLOCK und
REQUEST.BLOCK_COUNT kleiner oder gleich dem Parameter XP. CURRENT
BLOCK ist. Dies zeigt an, dass der Endungssektor der logischen Anforderung
vor der Task EXPAND liegt. Wenn eine der obigen Bedingungen wahr
ist, geht der Ablauf zu Schritt 710, wo der Parameter LOGICAL
gesetzt wird, um auf die Konfigurationsinformation des logischen Quellen-Datenträgers zu
zeigen. Von Schritt 710 kehrt die Steuerung zurück zu dem
aufrufenden Programm.
-
Wenn die Bedingungen in 708 nicht
wahr sind, geht der Ablauf zu Schritt 712, wo festgestellt wird,
ob die Task EXPAND die von der logischen Anforderung angeforderten
Sektoren bereits behandelt hat. Wenn der Parameter XP.DIRECTION
UP hoch gesetzt ist, wird zuerst festgestellt, ob die Summe der Parameter
REQUEST.BLOCK und REQUEST.BLOCK COUNT kleiner als oder gleich dem Wert
des Parameters XP.CURRENT_BLOCK ist. Dies zeigt an, dass der Endungssektor
der logischen Anforderung bereits von der Task EXPAND verarbeitet
wurde. Alternativ wird, wenn der Parameter XP.DIRECTION UP tief
gesetzt ist, was anzeigt, dass die Task EXPAND in der umgekehrten
Richtung vorangeht, festgestellt, ob der Parameter REQUEST.BLOCK
größer als
oder gleich der Summe der Parameter XP.CURRENT_BLOCK und XP.COUNT
ist. Dies zeigt an, dass der Anfangssektor der logischen Anforderung
bereits von der Task EXPAND verarbeitet wurde. Wenn eine der obigen
Bedingungen wahr ist, kehrt die Steuerung zu dem aufrufenden Programm
zurück,
wobei der Parameter LOGICAL unverändert gelassen wird. Es wird
angemerkt, dass der Status des Parameters LOGICAL unverändert ist,
da er bereits auf den logischen Quellen-Datenträger zeigt.
-
Wenn keine der Bedingungen in Schritt 712 wahr
ist, geht der Ablauf zu Schritt 714, um anzuzeigen, dass die von
der logischen Anforderung angeforderten Blöcke sowohl logische Quellen-
als auch Ziel-Datenträger überspannen.
In Schritt 714 wird die vom Host übermittelte Anforderung für eine vorbestimmte
Dauer, vorzugsweise 0.1 s, suspendiert, um der Task EXPAND zu gestatten,
nachzukommen. Von Schritt 714 kehrt der Ablauf zu Schritt 702 zurück.
-
Nun auf 9 verweisend wird ein Flussdiagramm einer
Routine FINISH_EXPAND gezeigt. Die Routine FINISH_EXPAND wird beim
Einschalten aufgerufen. Wie früher
erwähnt,
sind Teile des Schreib-Eintragungs-Puffers 136 im Fall eines Stromausfalls
batteriegestützt.
Wie oben angemerkt, wird ein Konfigurationsbereich zum Speichern
der mit der Datenträgererweiterungs-Task
verbundenen Parameter in dem Schreib-Eintragungs-Puffer 136 zugewiesen,
wobei die Erweiterungsparameter von Zeit zu Zeit aktualisiert werden,
um zu verfolgen, wo die Task EXPAND sich befindet. Wenn ein Stromausfall
vorkommt, geht daher die Plattenanordnungs-Rekonfigurations-Fortgangsinformation
nicht verloren und kann wiedergewonnen werden, um den Erweiterungsprozess
fortzusetzen.
-
Beginnend in Schritt 902 wird
ein Zeiger EXPAND PTR gleich dem Parameter EXPAND in der globalen
RIS-Datenstruktur gesetzt. Dann wird in Schritt 904 der
Erweiterungsfehlerplan EXPAND_FAILURE_MAP auf den Wert 0 gelöscht. Dann
geht, wenn der Paramater EX-PAND_RUNNUNG,
auf den der Zeiger EXPAND PTR zeigt, wahr ist, der Ablauf zu Schritt 908,
um den Rekonfigurationsprozess fortzusetzen. Andertalls geht der
Ablauf zu Schritt 910. In Schritt 908 wird der Parameter
UNIT gleich dem Eintrag in der Erweiterungs-Queue EXPAND_UNIT_QUEUE[O]
gesetzt. Dann wird in Schritt 914 ein Fehlerflag ERROR
auf 0 gesetzt.
-
Wenn in Schritt 916 festgestellt
wird, dass die Pufferplatine, die die DRAM-Schnittstelle 118 und das
DRAM 116 enthält,
vorhanden ist, geht der Ablauf zu Schritt 918. Andernfalls
geht der Ablauf zu Schritt 920. Wenn die Pufferplatine
vorhanden ist, werden verschiedene mit der Task EXPAND verbundene
Fortgangsdaten aus dem Konfigurationsbereich des Schreib-Eintragungs-Puffers 136 zurückgewonnen.
Wie oben erörtert,
werden die mit der Task EX-PAND
verbundenen Fortgangsdaten in der Datenstruktur gespeichert, auf
die der Parameter XP zeigt. Dann wird in Schritt 922 festgestellt,
ob die Fortgangsdaten gültig
sind. Wenn nicht, geht der Ablauf zu Schritt 924, wo die
Task EXPAND abgebrochen wird. Von Schritt 924 geht der
Ablauf zu Schritt 926, wo festgestellt wird, ob der Parameter
EXPAND UNIT COUNT gleich 0 ist. Wenn ja, geht der Ablauf zu Schritt
928, wo der Parameter EXPAND_ RUNNING auf den Status FALSE gesetzt
wird. Der Ablauf geht dann zu Schritt 930. Wenn der Parameter EXPAND_UNIT_COUNT
nicht gleich 0 ist, geht der Ablauf von Schritt 926 zu
Schritt 930. In Schritt 930 wird der logische
Datenträger
auf den Ausfallstatus LOG_ VOL_FAILED gesetzt. Von Schritt 930 geht
der Ablauf zu Schritt 910.
-
Wenn in Schritt 922 festgestellt
wird, dass die im Konfigurationsbereich des Schreib-Eintragungs-Puffers 136 gespeicherten
Rekonfigurations-Fortgangsdaten gültig sind, geht der Ablauf
zu Schritt 932, wo der Parameter X OLD LOGICAL gesetzt
wird, um auf die Konfigurationsinformation des logischen Quellen-Datenträgers zu
zeigen. Ebenfalls wird in Schritt 932 der Parameter EXPAND_NEEDED auf
den Status TRUE gesetzt, und der Parameter EXPAND_RUNNING wird auf
den Status des Parameters XP.RUNNING gesetzt. Von Schritt 932 geht der
Ablauf zu Schritt 910.
-
Wenn in Schritt 916 festgestellt
wird, dass die Pufferplatine nicht vorhanden ist, geht der Ablauf zu
Schritt 920, wo der Rekonfigurationsprozess abgebrochen
wird. Wenn zu Schritt 934 gehend festgestellt wird, dass
der Parameter EXPAND_UNIT_COUNT gleich 0 ist, was anzeigt, dass
keine Rekonfigurationsanforderungen in der Erweiterungs-Queue sind,
geht der Ablauf zu Schritt 936. In Schritt 936 wird
der Parameter EXPAND_RUNNING auf den Zu stand FALSE gesetzt. Von
Schritt 936 oder von Schritt 934 geht, wenn der
Parameter EX-PAND_UNIT_COUNT
ein Nicht-Null-Wert ist, der Ablauf zu Schritt 938, wo
der Status des logischen Datenträgers
auf den Fehlerstatus LOG VOL FAILED gesetzt wird. Von Schritt 938
geht der Ablauf zu Schrittt 910.
-
Wenn eine EXPAND-Task nicht durch
einen Stromausfall unterbrochen wurde, muss trotzdem festgestellt
werden, ob beim Einschalten eine Plattenanordnungs-Rekonfiguration
erforderlich ist. Wenn in Schritt 910 festgestellt wird,
dass die Pufferplatine vorhanden ist und der Parameter EXPAND_UNIT_COUNT
ein Nicht-Null-Wert ist, geht daher der Ablauf zu Schritt 912,
wo der Parameter EXPAND_NEEDED auf den Status wahr gesetzt wird.
Von Schritt 912 oder von Schritt 910 kehrt, wenn die
Bedingungen nicht erfüllt
sind, die Steuerung zurück
zu dem aufrufenden Programm.
-
Wenn die Rekonfigurationsoperation
eine Plattenanordnungs-Erweiterungsoperation ist, bei der der Plattenanordnung
ein physikalisches Laufwerk hinzugefügt wird, wird überschüssiger Platz
für einen
neuen logischen Datenträger
verfügbar
sein, nachdem die ursprünglichen
Daten über
die Plattenlaufwerke verstreut worden sind. Der neue logische Datenträger kann
konfigurert werden, indem der Befehl SET_CONFIGURATION mit seinen
zugehörigen Parametern
ausgegeben wird. Der Parameter OFFSET_TO_DATA wird gesetzt, um den
Versatz in jedes Laufwerk in der Plattennanordnung zu dem neuen
logischen Datenträger
zu spezzieren, der nach dem Anfangsversatz des Ziel-Datenträgers sein wird.
Zu einigen der anderen betroffenen Parametern siehe die obige Erörterung
des Befehls SET CONFIGURATION.
-
Wie oben erklärt, empfängt das Host-Betriebssystem
einen Hinweis durch eine Unterbrechung, wenn eine Plattenanordnung
rekonfiguriert wurde, und wenn ein neuer logischer Datenträger konfiguriert
wurde. Die Task EXPAND ruft in Schritt 562 (6C) eine Unterbrechung auf,
um die Vollendung der Rekonfigurationsoperation anzuzeigen, und die
Task SET_CONFIGURATION ruft eine Unterbrechung in Schritt 362 (3C) auf, um die Erzeugung eines
neuen Datenträgers
anzuzeigen. Auf dem Host-Computersystem 100 laufende Software
kann den Status eines logischen Datenträgers rückgewinnen, indem sie einen
Bfehl SENSE_LOGICAL_DRIVE_STATUS ausgibt, der den Status des logischen
Laufwerks z. B. LOG_VOL_OK, LOG_VOL_FAILED, LOG_VOL_EXPANDING usw.
zurückgibt.
-
Somit ist ein System beschrieben
worden, in dem eine Online-Rekonfiguration einer Plattenanordnung
zustande gebracht werden kann. Die Plattenanordnungs-Rekonfiguration
wird aufgerufen, wenn ein neues physikalisches Laufwerk eingefügt oder ein
Laufwerk entfernt wird. Die Rekonfiguration kann auch durchgeführt werden,
wenn der Benutzer die Konfigu ration eines bestimmten logischen Datenträgers, z.
B. seine Streifengröfe,
zu ändern
wünscht. Die
Rekonfiguration wird als eine Hintergrund-Task durch Firmware auf
einer Plattensteuerungsplatine gefahren. Die Rekonfigurations-Task
schiebt zuerst Daten aus dem logischen Quellen-Datenträgerin einen
Eintragungsspeicher, z. B. einen RAM-Speicher.
-
Die Rekonfigurations-Task arbeitet
streifenweise, wobei die Streifengröße die des logischen Ziel-Datenträgers ist.
Sobald ein Streifen von Daten in den Eintragungsspeicher geschoben
ist, wird er in die entsprechenden Stellen im logischen Ziel-Datenträger zurückgeschrieben.
Der Rekonfigurationsprozess dauert an, bis alle Daten in dem logischen
Quellen-Datenträger
in den logischen Ziel-Datenträger übertragen
sind. Während
die Rekonfigurations-Task auf einem einzelnen logischen Datenträger arbeitet, bleiben
Daten für
Host-Schreib- und Leseanforderungen zugänglich.