-
Die
Erfindung bezieht sich auf ein Verfahren zum Überschreiben einer Datei, die
eine Mehrzahl von Rahmen von Daten aufweist und in einem nicht-flüchtigen
Speicher mit einer Mehrzahl von einzeln löschbaren Blöcken gespeichert ist, wobei
jedem Block eine Mehrzahl von Sektoren zugewiesen ist.
-
Computersysteme
weisen üblicherweise
eine Art einer nicht-flüchtigen
Massenspeichereinrichtung auf. Das Betriebssystem des Computers
ist für
die Kommunikation mit der Massenspeichereinrichtung verantwortlich,
um innerhalb der Massenspeichereinrichtung gespeicherte Dateien
zu erzeugen, zu löschen,
zu verändern
oder anzuhängen.
Daten werden auf der Platte gespeichert, indem eine Datei in die
Massenspeichereinrichtung hineingeschrieben wird.
-
Eine
Art einer nicht-flüchtigen
Massenspeichereinrichtung, die oftmals durch Computersysteme verwendet
wird, ist das elektromechanische Festplattenlaufwerk. Elektromechanische
Festplattenlaufwerke weisen eine oder mehrere kreisförmige Platten
oder Scheiben auf. Diese kreisförmigen
Platten enthalten ein magnetisches Speichermedium zum Speichern
von Daten. Die Platten sind in konzentrische Kreise unterteilt,
die Spuren genannt werden. Die Platten sind darüber hinaus radial derart unterteilt,
dass die Spuren in Sektoren unterteilt sind. Somit weist eine Platte
eine Mehrzahl von Spuren auf, wobei jede Spur eine Mehrzahl von
Sektoren aufweist.
-
Jeder
Sektor hat eine vorgegebene Sektornummer, auf die das Computersystem
Bezug nehmen kann. Eine in einem elektromechanischen Festplattenlaufwerk
gespeicherte Datei kann eine Reihe von Sektoren belegen. Die Sektoren
(d. h. die Dateisektoren), die der Datei zugeordnet sind, können auch
auf einer oder mehreren Platten derart angeordnet sein, dass die
zugehörigen
Sektoren weder notwendigerweise aufeinanderfolgend num meriert noch
notwendigerweise aneinander angrenzend angeordnet sind. Sobald eine
Datei erzeugt ist, können
neue Daten gespeichert werden, indem die neuen Daten an die Datei
angehängt
werden. Dies führt typischerweise
zu einer Ausdehnung der Größe der Datei,
indem zusätzlich
Sektoren der Datei zugewiesen werden.
-
Einige
Anwendungen erfordern nur das Modifizieren einer zuvor vorhandenen
Datei anstelle des Anhängens
an die bereits vorhandene Datei. Man betrachte beispielsweise eine
Anwendung, welche nur die Speicherung eines ”Fensters” von Daten erfordert. Zu irgendeinem
beliebigen Zeitpunkt muss jeweils nur eine fest vorgegebene Datenmenge
gespeichert werden. Anstelle des kontinuierlichen Anhängens neuer
Daten an die Datei, was die Speicheranforderungen für die Datei
ausdehnt, werden Abschnitte der Datei mit dem aktuellen Fenster
der Daten überschrieben.
So wird beispielsweise dann, sobald ausreichender Dateiraum auf
einem elektromechanischen Festplattenlaufwerk zugewiesen ist, um
das Fenster der Daten zu berücksichtigen, die
Datei oder Abschnitte der Datei kontinuierlich mit den eingehenden
Daten derart überschrieben,
dass die Datei oder einige Abschnitte der Datei das aktuelle Fenster
der Daten repräsentieren.
Die neue Version eines Sektors von Daten wird verwendet, um eine ältere, in
dem gleichen Sektor gespeicherte Version der Daten zu überschreiben.
Diese Technik ist insbesondere dann nützlich, wenn das elektromechanische
Festplattenlaufwerk im wesentlichen mit Daten gefüllt ist.
-
Festkörperspeicher-Platten
stellen eine Massenspeicheralternative gegenüber den elektromechanischen
Festplattenlaufwerken zur Verfügung.
Festkörperspeicherplatten
verwenden grundsätzlich
nicht-flüchtige
Halbleiterspeicher, um eine Massenspeichereinrichtung zur Verfügung zu
stellen. Um die Kompatibilität
mit elektromechanischen Festplattenlaufwerken aufrechtzuerhalten,
unterstützen
Festkörperspeicherplatten
jedoch die gleiche sektor-basierte Dateispeicheranordnung, so dass
ein Computersystem auf nummerierte Sektoren Bezug nehmen kann, um
Daten auf die Festkörperspeicherplatte
zu speichern oder von ihr wiederzugewinnen.
-
Im
Unterschied zu einem elektromechanischen Festplattenlaufwerk muss
der nicht-flüchtige
Speicher einer Festkörperspeicherplatte üblicherweise
gelöscht
werden, bevor er neu programmiert werden kann. Um die in einem Abschnitt
des Speichers gespeicherten Daten ändern zu können, muss somit der Abschnitt
des Speichers zunächst
gelöscht
werden. Bei einigen nicht-flüchtigen
Speichern jedoch kann das Löschen
eine relativ lange Zeitdauer beanspruchen.
-
Um
eine Leistung der Festkörperspeicherplatte
zu erreichen, die mit der eines elektromechanischen Festplattenlaufwerks
ebenbürtig
ist, wird bei einer Technik zum Aktualisieren eines Dateisektors
eine neue Version des Sektors an einen anderen Ort innerhalb des
nicht-flüchtigen
Speichers geschrieben. Ein Nachteil des Schreibens eines Sektors
zu einem anderen Ort innerhalb des nicht-flüchtigen Speichers besteht darin,
dass eine Sektorabbildung (Sektormap) erforderlich werden kann,
um den Ort der aktuellen Version des Sektors zu verfolgen. Die Sektorabbildung
muss dann jedes Mal aktualisiert werden, wenn ein Sektor umgelagert
wird.
-
Die
alten Versionen werden dann schließlich in einem Hintergrundsäuberungsprozess
gelöscht,
um Speicherraum freizugeben. Der Hintergrundsäuberungsprozess gestattet ein
zurückgestelltes
Löschen
solange, wie das Löschen
nicht die effektive Programmier- oder Schreibzeit für den nicht-flüchtigen
Speicher negativ beeinflusst.
-
Der
zurückgestellte
Löschprozess
kann bei einigen Anwendungen geeignet sein, wie beispielsweise bei
stoßweise
erfolgenden Datenübertragungen
zu der Festkörperspeicherplatte,
jedoch kann der oben beschriebene verzögerte Löschprozess bei einer Datei
ungeeignet sein, die kontinuierlich überschrieben wird. Insbesondere
dann, wenn der Hintergrundlöschprozess
lange genug verzögert
wird, wird ein Vordergrundlöschprozess
ausgeführt
werden müssen,
um zusätzlichen
Raum in dem nicht-flüchtigen
Speicher freizugeben. Während
der Vordergrundlöschprozess
ausgeführt
wird, müssen
die eingehenden Daten irgendwo vorübergehend gespeichert oder
ignoriert werden. Ein Ignorieren der Daten führt zu einem Datenverlust,
welcher vermieden werden sollte. Die Schaffung einer relativen großen Menge
temporären
Speichers führt
zu einer Erhöhung
der Kosten und Größe der Festkörperspeicherplatte.
Darüber
hinaus kann ein unzureichender temporärer Speicher zu einem Datenverlust
führen,
sobald der temporäre
Speicher überläuft.
-
Es
ist ein Verfahren erforderlich, das ein kontinuierliches Überschreiben
einer in einem nicht-flüchtigen Speicher
gespeicherten Datei gestattet.
-
Aus
der Druckschrift
EP
0 712 067 A2 sind eine Festkörperspeicherplatte sowie Verfahren
zum Lesen, Einspeichern und Umspeichern von Daten sowie zum Löschen von
Blöcken
bekannt. Die dort beschriebene Verbesserung geht von einem Stand
der Technik aus, bei dem eine Flash-Speicherkarte eine Magnetplattenspeichereinrichtung
nachbildet. Eine Steuereinrichtung der Flash-Speicherkarte empfängt Zylinder-,
Kopf- und Sektor-Nummern und bildet daraus eine logische Sektoradresse,
welche anschließend
mit Hilfe einer Abbildungstabelle auf eine physikalische Sektoradresse
abgebildet wird. Für
jede Sektoradresse gibt es einen Eintrag, was zu einer relativ großen Abbildungstabelle
führt.
Daraus ergibt sich die Aufgabe, die Größe der Adresskonvertierungstabelle
zu reduzieren. Die Druckschrift schlägt ein spezielles Verfahren
zur Abbildung der logischen Sektoradresse auf eine physikalische
Sektoradresse vor. Dabei wird u. a. eine logische Blockadresse gebildet,
die auf eine physikalische Blockadresse abgebildet wird. Ein dabei
verwendeter physikalischer Block (Löschblock) weist nicht nur Speicherbereiche
für die
jeweiligen Sektordaten auf, sondern darüber hinaus Sektor-ID- und Block-ID-Speicherbereiche
und insbesondere Reserve-Sektor-Speicherbereiche. Wenn in einem
physikalischen Sektor vorhandene Daten durch aktuelle ersetzt werden
sollen, so werden die aktuellen Daten zunächst in einen Reservesektor
des Reserve-Bereichs desselben Blocks eingeschrieben. Der die ursprünglichen
Daten in diesem Block enthaltende Sektor wird als ungültig markiert.
Jedesmal dann, wenn auf diese Weise ein Reservesektor beschrieben
wird, wird ein Sektoradresszeiger inkrementiert, so dass er auf den
nächsten
freien Reservesektor in demselben Block zeigt. Es können somit
solange aktuelle Sektoren in denselben Block eingeschrieben werden,
wie noch Reservesektoren fei sind. Wenn der Block voll ist, so werden
alle gültigen
Sektoren des Blocks in einen neuen Block übertragen. Anschließend wird
der ursprüngliche Block
insgesamt gelöscht.
Beim Übertragen
der gültigen
Sektoren in den neuen Block werden diese wiederum in der ursprünglichen
Reihenfolge, in der sie vor dem ersten Aktualisieren in dem ursprünglichen
Block gespeichert waren, angeordnet. Bei dem in der Druckschrift
beschriebenen Verfahren ist es von Nachteil, dass in jedem physikalischen
Block eine Anzahl von Reservesektoren vorzusehen ist. Ist diese
Anzahl zu gering, so müssen
häufig
vollständige
Blöcke
in neue Blöcke übertragen
werden; ist sie zu groß,
wird Speicherplatz verschwendet. Aus dem Patent
US 5,544,356 ist eine Architektur
eines Speichersystems mit blockweise löschbaren nicht-flüchtigen
Halbleiterspeichern bekannt. Aus der Druckschrift
EP 0 704 803 A1 ist ein
Verfahren zur Speicherverwaltung eines Flash-Speichers bekannt,
dass insbesondere bei Diktiergeräten
Anwendung findet, bei denen Sprachdateien abgelegt werden. Die Druckschrift
beschreibt das Einschreiben, Löschen
und Umlagern vollständiger
Sprachdateien. Aus dem Patent
US
5,573,569 ist ein Verfahren zum Speichern von Dateien in
Flash-Speichern bekannt, das die Blocklöschungen minimieren soll. Die
gespeicherten Dateien sind Sprachdateien eines Anrufbeantworters.
Wenn ein Block teilweise aktuelle und teilweise zu löschende
Nachrichten enthält,
werden zum Zwecke der Freigabe des Blocks die noch aktuellen Nachrichten
in einen Reserveblock kopiert. Anschließend wird der ursprüngliche
Block gelöscht.
Der Reserveblock erhält
dann die Blocknummer des ursprünglichen
Blocks und der ursprüngliche,
gelöschte
Block wird zum neuen Reserveblock.
-
Aufgabe
der Erfindung ist es, ein Verfahren zu schaffen, dass ein kontinuierliches Überschreiben
einer in einem nicht-flüchtigen
Speicher gespeicherten Datei gestattet ohne übermäßigen zusätzlichen Speicherplatz zu verbrauchen.
-
Diese
Aufgabe wird erfindungsgemäß auf ein
Verfahren mit den Merkmalen des Patentanspruchs 1 gelöst. Vorteilhafte und/oder
bevorzugte Weiterbildungen der Erfindung sind in den Unteransprüchen gekennzeichnet.
-
Im
Folgenden wird die Erfindung anhand eines in den Zeichnungen dargestellten
bevorzugten Ausführungsbeispiels
näher erläutert, wobei
in den Zeichnungen:
-
1 ein
Verfahren zum Durchführen
eines Überschreibens
einer in einem elektromechanischen Festplattenlaufwerk gespeicherten
Datei veranschaulicht.
-
2 veranschaulicht
ein alternatives Verfahren zum Durchführen eines Überschreibens einer in einem
elektromechanischen Festplattenlaufwerk gespeicherten Datei.
-
3 veranschaulicht
ein Verfahren, das beim Überschreiben
einer in einem nicht-flüchtigen
Speicher gespeicherten Datei verwendet wird.
-
4 veranschaulicht
die Anwendung des Verfahrens gemäß 3.
-
5 veranschaulicht
ein Verfahren zum Rückgewinnen
eines zur Säuberung
markierten Blocks.
-
6 veranschaulicht
die Anwendung des Verfahrens gemäß 5.
-
7 veranschaulicht
ein Verfahren zum Durchführen
eines kontinuierlichen Schreibens einer in einem nicht-flüchtigen
Speicher gespeicherten Datei.
-
8 veranschaulicht
ein Verfahren zum Umlagern von in einem Overhead-Bereich gespeicherten Sektoren.
-
Betriebssysteme,
die elektromechanische Festplattenlaufwerke unterstützen, verwenden
typischerweise ein sektor-basiertes Schema zur Dateiverwaltung.
Der Benutzer oder einzelne Anwendungsprogramme befassen sich üblicherweise
nicht direkt mit den Sektornummern, wenn sie auf das elektromechanische
Festplattenlaufwerk schreiben oder von ihm lesen. Üblicherweise
unterstützt
das Betriebssystems die Verwendung eines Dateizeigers, um einen
speziellen Sektor der Datei zu lokalisieren oder zu identifizieren.
Somit ist das Betriebssystem für
das Austauschen von Sektornummern mit dem elektromechanischen Festplattenlaufwerk verantwortlich,
um Sek toren von der Datei zugeordneten Daten zu speichern oder zurückzugewinnen.
-
Grundsätzlich verwenden
Betriebssysteme eine Art einer Zuweisungsabbildung, um sämtliche
einer gegebenen Datei zugeordnete Sektoren zu lokalisieren. Eine
Art eines sektor-basierten
Dateisystems verwendet eine Dateizuweisungstabelle (FAT; File Allocation
Table), um die einer bestimmten Datei zugeordneten Sektoren zu verfolgen.
Die FAT ist eine Tabelle von Zuweisungseinheiten, die typischerweise
an einem vorgebenen Ort in einem elektromechanischen Festplattenlaufwerk
gespeichert sind. Die Zuweisungseinheit ist die kleinste Größeneinheit,
die einer Datei zuweisbar ist. Eine Zuweisungseinheit kann so klein
wie ein Sektor sein. Da die FAT an einem vorgebenen Ort in dem elektromechanischen
Festplattenlaufwerk gespeichert ist, gestattet die FAT nur eine
fest vorgegebene Maximalanzahl von Einträgen. Um jedoch größere Platten
mit mehr Sektoren zu berücksichtigen,
erhöht
sich die Anzahl der Sektoren pro Zuweisungseinheit, so daß eine Zuweisungseinheit
aus einer Gruppe (Cluster) von Sektoren besteht. Die FAT dient im
wesentlichen als ein Index um anzuzeigen, welche Sektoren einer
gegebenen Datei zugeordnet sind.
-
Die
Verwendung einer FAT gestattet es den Dateien, Sektoren zu benutzen,
welche nicht physikalisch zusammenhängend gruppiert sind. Wenn
Dateien erzeugt werden, sucht das Betriebssystem nach verfügbarem Raum
auf der Platte, um die Dateien zu speichern. Sofern ausreichender
zusammenhängender
Speicherraum verfügbar
ist, speichert das Betriebssystem die Datei auf der Festplatte derart,
daß die
Datei aufeinanderfolgend zugegriffene Sektoren zur Speicherung verwendet.
Anderenfalls plaziert das Betriebssystem Abschnitte der Datei überall dort,
wo Raum verfügbar
ist, bis die Datei vollständig
auf der Platte gespeichert ist. Die FAT hilft beim Abbilden der
Orte der Datei auf der Platte. Um die Datei aus der Platte wiederzugewinnen, wird
die FAT verwendet, um die der Datei zugeordneten Sektoren zu lokalisieren.
Die Sekto ren werden dann miteinander ”verkettet”, um die Datei oder Abschnitte
der Datei von der Platte zu gewinnen.
-
Wenn
Dateien erzeugt, modifiziert und gelöscht werden, neigen einzelne
Dateien dazu, ”fragmentiert” zu werden,
so daß sie
nicht länger
zusammenhängend
auf der Platte gespeichert sind. Das Betriebssystem fragmentiert
eine Datei, sofern dies erforderlich ist, um diese in über die
Festplatte verstreuten Raum zu speichern. Die Verwendung von Zuweisungsabbildungen
und Sektornummern gestattet die Wiedergewinnung, Speicherung und
Modifikation von Dateien, die auf einem elektromechanischen Festplattenlaufwerk
gespeichert sind.
-
Eine
Art eines gegenüber
einem elektromechanischen Festplattenlaufwerk alternativen Massenspeichermediums
ist eine Festkörperspeicherplatte.
Die Festkörperspeicherplatte
weist eine beliebige Art eine nicht-flüchtigen Speichers auf. Eine
Art eines nicht-flüchtigen
Speichers, der bei Festkörperspeicherplatten verwendet
wird, ist ein elektrisch lösch- und programmierbarer
Floating-Gate-Nur-Lese-Speicher (”Flash-EEPROM” oder ”Flash-Speicher”).
-
Eine
Flash-Speicherzelle wird gelöscht,
indem die Nettoladung auf dem auf schwebendem Potential befindlichen
Gate unter einem vorgebenen Schwellenwert reduziert wird. Eine gelöschte Zelle
wird vereinbarungsgemäß als eine
Zelle angesehen, die eine binäre ”i” speichert.
Eine Flash-Speicherzelle ist programmiert, wenn die Nettoladung
einen vorgebenen Schwellenwert überschreitet.
Eine programmierte Zelle wird vereinbarungsgemäß als eine Zelle angesehen,
die eine binäre ”0” speichert.
Eine Flash-Speicherzelle kann nicht neu programmiert werden, ohne
daß sie
zuvor gelöscht
worden ist, wobei es eine Ausnahme gibt. Eine Flash-Speicherzelle
kann jederzeit auf eine ”0” programmiert
werden, indem zusätzlich
Ladung auf die Floating-Gate-Elektrode gebracht wird.
-
Flash-Speicher
werden typischerweise in einzeln löschbare Blöcke unterteilt. Jeder Block
enthält
eine Anzahl von Flash-Speicherzellen. Obwohl jeder Block individuell
gelöscht
werden kann, kann eine vorgegebene Flash-Zelle nur gelöscht werden,
indem ihr gesamter Block gelöscht
wird. So muß zum
Umprogrammieren einer Flash-Zelle ein gesamter Block von Zellen
zunächst
gelöscht
werden. Bei einem elektromechanischen Festplattenlaufwerk kann das
Betriebssystem die Laufwerkssteuereinrichtung auffordern, Daten
aus einem durch eine bestimmte Sektornummer identifizierten Sektor
zur Verfügung
zu stellen. Da der nicht-flüchtige Speicher
kein elektromechanisches Festplattenlaufwerk ist, wird ein Übersetzungsmechanismus
benötigt,
um die Sektornummer in eine physikalische Adresse für den nicht-flüchtigen
Speicher zu übersetzen.
Bei einem Ausführungsbeispiel
wird diese Übersetzung
in Software ausgeführt
und wird als Flash-Übersetzungsebene (FTL;
Flash Translation Layer) bezeichnet. Die FTL gestattet es einer
Festkörperspeicherplatte,
ein elektromechanisches Festplattenlaufwerk derart zu emulieren,
daß das
Betriebssystem, welches elektromechanische Festplattenlaufwerke
unterstützt,
damit fortfahren kann, sektor-basierte Dateisysteme für nicht-flüchtigen
Speicher, wie beispielsweise Flash-Speicher, aufweisende Festkörperspeicherplatten
zu verwenden.
-
Neben
dem Zuweisen von Speicherraum für
eine Datei, wenn sie erzeugt wird, muß das Betriebssystem Änderungen
an einer bereits vorhandenen Datei behandeln. Wie oben ausgeführt, verwendet
ein elektromechanische Plattenlaufwerke unterstützendes Betriebssystem typischerweise
ein sektor-basiertes Schema zum Verwalten von Dateien. Insbesondere
unterstützt
das Betriebssystems die Verwendung eines Dateizeigers, um einen
speziellen Sektor, der den zu modifizierenden Daten zugeordnet ist,
zu lokalisieren oder zu identifizieren. Der Sektor kann dann mit
den aktualisierten Daten überschrieben
werden.
-
Aufgrund
der bei Flash-Speichern erforderlichen relativ langen Löschzeit
wird ein logisches Sektoradressierschema anstelle eines physikalischen
Sektoradressierschemas be nutzt. Mit anderen Worten, statt einer
fest vorgegebenen Korrespondenz zwischen Sektornummer und physikalischen
Adressen des nicht-flüchtigen
Speichers werden neue Daten. für
einen Sektor in einen neuen physikalischen Speicherplatz geschrieben,
sofern eine ältere
Version der Sektordaten bereits vorhanden ist. Die ältere Version
wird dann als ungültig markiert,
so daß sie
nachfolgend während
eines Rückgewinnungsprozesses
regeneriert werden kann. So sind die Sektornummern von ”logischer” Art und
nicht von physikalischer, da mit der gleichen Sektornummer über der
Zeit unterschiedliche physikalische Adressen zugegriffen werden
können.
Es ist eine Sektorabbildung erforderlich, um den einer logischen
Sektornummer zugeordneten aktuellen physikalischen Ort zu verfolgen.
Bei einem Ausführungsbeispiel
behandelt die FTL die Verwaltung der Sektorabbildung. Ein Block
kann eine Mischung von gültige
Daten enthaltenden Sektoren und ungültige Daten enthaltenden Sektoren
aufweisen.
-
So
erscheint die Festkörperspeicherplatte
dem Computersystem als kontinuierlich in Sektoren aufgeteiltes Medium.
Die FTL jedoch lagert die Sektoren in einer für das Betriebssystem transparenten
Weise derart um, daß eine
Sektornummer nicht mehr permanent einem speziellen Bereich von physikalischen
Adressen zugeordnet ist. Die FTL verfolgt unter Verwendung der Sektorabbildung
die logisch-zu-physikalische Relation.
-
Bei
einem Verfahren des Schreibens auf eine Festkörperspeicherplatte werden Daten
in vorhandenen freien Raum innerhalb der Festkörperspeicherplatte geschrieben. Ältere Versionen
der Daten werden am Ort gelöscht.
Sobald die Festkörperspeicherplatte
einen vorgegebenen Schwellenwert gelöschter Daten überschreitet,
muß eine
Rückgewinnungsoperation
im Vordergrund durchgeführt
werden, um die den gelöschten Daten
zugeordneten Speicherbereiche freizugeben. Ein Reserveblock wird
während
der Rückgewinnungsprozedur
verwendet, um gültige
Sektoren von Daten aus einem für
eine Säuberungsoperation
eingeplanten Block zu speichern. Der einge plante Block hat einen
Schwellenwert von gelöschten
Daten überschritten.
Die gültigen Sektoren
innerhalb des eingeplanten Blocks werden aus dem eingeplanten Block
in den Reserveblock kopiert, so daß der eingeplante Block gelöscht werden
kann, um zusätzlichen
Speicher freizugeben. Die obengenannte Technik kann nur dann verwendet
werden, wenn die Festkörperspeicherplatte
den verfügbaren
Speicherraum erhöhen
kann, indem sie von gelöschten
Daten verwendeten Raum zurückgewinnt.
Sobald die Festkörperspeicherplatte
voll ist und keine gelöschten
Daten enthält,
kann die obengenannte Technik nicht verwendet werden, um neue Daten
auf die Platte zu schreiben, selbst wenn eine Datei nur modifiziert
wird und nichts an sie angehängt
wird.
-
Einige
Anwendungen sind zum Aktualisieren einer bereits vorhandenen Datei
durch Modifizieren der Datei anstelle eines Anhängens an die Datei geeignet.
Man betrachte beispielsweise eine Anwendung, bei der nur ein ”Fenster” von Daten
aufrechterhalten zu werden braucht. Alte Daten können durch neue Daten so ersetzt
werden, daß die
Länge der
Datei nicht ausgedehnt zu werden braucht, solange die Datei ausreichend groß genug
ist, um das gewünschte
Datenfenster aufzunehmen. In einem solchen Falle braucht die Länge der gespeicherten
Datei nicht erhöht
zu werden. Die Datei oder Abschnitte der Datei werden wie gewünscht überschrieben.
Man betrachte beispielsweise eine Anwendung, welche Rahmen von Daten
in einem Puffer empfängt
und speichert. Die Daten werden aus dem Puffer wiedergewonnen und
verwendet, um Abschnitte der gespeicherten Datei zu überschreiben.
-
1 veranschaulicht
ein Ablaufdiagramm für
ein Verfahren zum Überschreiben
einer in einem elektromechanischen Festplattenlaufwerk gespeicherten
Datei. Bei diesem Ausführungsbeispiel
kann das Überschreiben
an einem beliebigen ausgewählten
Sektor innerhalb der Datei beginnen und sich fortsetzen, bis das Ende
der Datei erreicht ist.
-
Im
Schritt 110 wird ein Suchen durchgeführt, um einen Dateizeiger auf
den ersten zu überschreibenden
Sektor zu po sitionieren. Dann wird der Sektor im Schritt 115 überschrieben.
Im Schritt 120 wird bestimmt, ob es weitere Daten zu schreiben
gibt. Wenn dies nicht der Fall ist, dann endet der Prozeß im Schritt 150.
Anderenfalls wird der Prozeß mit
dem Schritt 125 fortgesetzt.
-
Im
Schritt 125 wird der nächste
zu überschreibende
Sektor lokalisiert. Bei diesem Ausführungsbeispiel endet der Überschreibprozeß, wenn
das Ende der Datei erreicht ist. Folglich wird im Schritt 130 festgestellt,
ob der Dateizeiger das Ende der Datei erreicht hat (d. h., ob es
keinen nächsten
Sektor) gibt. Wenn das Ende der Datei erreicht ist, dann wird ein
Ende-der-Datei(EOF)-Fehler im Schritt 140 erzeugt und der
Prozeß endet
im Schritt 150.
-
Wenn
sich der Dateizeiger nicht am Ende der Datei befindet, so wird ein
Suchen im Schritt 135 durchgeführt, um den Dateizeiger auf
den nächsten
zu überschreibenden
Sektor zu positionieren. Dann wird der Prozeß mit dem Überschreiben des Sektors im
Schritt 115 fortgesetzt.
-
2 veranschaulicht
ein Ablaufdiagramm für
ein weiteres Verfahren zum Überschreiben
einer in einem elektromechanischen Festplattenlaufwerk gespeicherten
Datei. Bei diesem Ausführungsbeispiel
kann das Überschreiben
an irgendeiner ausgewählten
Position innerhalb der Datei beginnen und sich fortsetzen, bis das
Ende der Datei erreicht ist. Anstelle des Erzeugens einer Fehler-Nachricht
und des Stoppens, wenn das Ende der Datei erreicht ist, wird jedoch
das Überschreiben
innerhalb des ersten Sektors in der Datei wie unten beschrieben
fortgesetzt.
-
Im
Schritt 210 wird ein Suchen durchgeführt, um einen Dateizeiger so
zu positionieren, daß er
den ersten Sektor auswählt,
der überschrieben
werden soll. Der ausgewählte
Sektor wird dann im Schritt 215 überschrieben. Im Schritt 220 wird
ein Test durchgeführt,
um zu bestimmen, ob es weitere Daten gibt, die in die Datei geschrieben
werden sollen. Wenn dies nicht der Fall ist, endet der Prozeß im Schritt 250.
Anderenfalls wird der Prozeß mit
dem Schritt 225 fortgesetzt.
-
Im
Schritt 225 wird der nächste
zu überschreibende
Sektor lokalisiert. Schritt 230 stellt fest, ob der Dateizeiger,
das Ende der Datei erreicht hat. Im Unterschied zu dem Ausführungsbeispiel
gemäß 1 jedoch wird
der Überschreibprozeß nicht
beendet, sobald das Ende der Datei erreicht ist. Wenn ein Ende der
Datei im Schritt 230 erfaßt wird, dann wird der Dateizeiger
neu positioniert, indem ein Suchen durchgeführt wird, um den ersten Sektor
in der Datei zu lokalisieren. Der Überschreibprozeß wird dann
vom Beginn der Datei an fortgesetzt, indem mit dem Schritt 215 fortgefahren
wird.
-
Nach
dem Schritt 230 führt
dann, wenn das Ende der Datei nicht erreicht worden ist, der Schritt 235 ein
Suchen durch, um den Dateizeiger auf dem nächsten Sektor neu zu positionieren.
Dann wird der nächste Sektor
im Schritt 215 überschrieben.
Wie oben ausgeführt,
verwenden jedoch einige Festkörperspeicherplatten
nicht-flüchtige
Speicher, welche nicht neu programmiert werden können, ohne sie zunächst zu
löschen.
Die bedeutet, daß der
Sektor nicht einfach lokalisiert und überschrieben werden kann, wie
es in den 1 und 2 veranschaulicht
ist. Um ein kontinuierliches Überschreiben
einer sektor-basierten Datei in einem nicht-flüchtigen Speicher durchzuführen, werden
die Positionier- und Überschreib-Schritte
gemäß 1 modifiziert.
Insbesondere wird die neuere Version der Daten auf eine Weise gespeichert,
welche dabei hilft, die Menge der anderenfalls während der Blockrückgewinnung
erforderlichen ”Nacharbeit” zu minimieren.
Soweit dies möglich
ist, wird der Rückgewinnungsprozeß ”am Ort” durchgeführt. Dies
hilft, den Engpaß einer
erzwungenen Vordergrundsäuberung
zu eliminieren. Außerdem
hilft dies, die Menge des Overhead-Bereichs zu minimieren, der zum
Aufnehmen eingehender Daten erforderlich ist, wenn die Blöcke zurückgewonnen
werden müssen,
um mehr Raum freizugeben.
-
3 veranschaulicht
die Kernschritte zum Durchführen
eines Überschreibens
einer Datei in einer Festkörperspeicherplatte.
Diese Schritte können
sowohl auf Anwendungen angewendet werden, bei welchen der Überschreibprozeß am Ende
der Datei beendet wird, ebenso wie auf Anwendungen, bei welchen
der Überschreibprozeß an den
Beginn einer überschriebenen
Datei zurückkehrt,
sobald das Ende der Datei erreicht ist, wie sie in den 1 bzw. 2 veranschaulicht
sind.
-
Die
Prozedur beginnt im Schritt 310. Im Schritt 320 wird
ein Rahmen von Daten empfangen. Im Schritt 330 wird der
Sektor bestimmt, in den der Datenrahmen geschrieben werden soll.
Der Datenrahmen repräsentiert
die aktuelle Version der Daten, die im physikalischen Sektor sein
sollte. Anstelle der Verwendung physikalischer Sektornummern, welche
stets speziellen physikalischen Adressen entsprechen, verwendet
dieses Verfahren logische Sektornummern. Die logische Sektornummer
des Sektors, in den der Datenrahmen geschrieben werden soll, entspricht
einem ersten physikalischen Sektor, der an einem ersten Offset in
einem ersten Block angeordnet ist. Der erste Block weist darüber hinaus
eine zugehörige
erste logische Blocknummer auf. So wird im Schritt 330 die
logische Sektornummer des Sektors, in den der Datenrahmen geschrieben
werden soll, bestimmt.
-
Wie
oben erwähnt,
kann der nicht-flüchtige
Speichersektor nicht programmiert werden, ohne ihn zuvor zu löschen. Folglich
werden die Rahmendaten in einen Reserveblock geschrieben, der dem
ersten Block zugeordnet ist. Somit werden im Schritt 340 die
Rahmendaten in einen zweiten Sektor geschrieben, welcher bei einem
zweiten Offset in einem Reserveblock angeordnet ist. Das zweite
Offset ist so ausgewählt,
daß es
identisch dem ersten Offset ist. So werden die Rahmendaten in den
Reserveblock derart geschrieben, daß die ersetzten Daten und die
Rahmendaten an exakt derselben Position innerhalb des ersten Blocks
bzw. des Reserveblocks angeordnet sind.
-
Das
in 3 präsentierte
Beispiel unterstellt, daß nur
ein Sektor aktualisiert wird. Nachdem die Rahmendaten geschrieben
sind, wird die logische Blocknummer des Reserveblocks im Schritt 350 auf
die erste logische Blocknummer aktualisiert. Der erste Block wird
als ungültig
markiert, um Fehler zu vermeiden, die dadurch entstehen können, daß zwei Blöcke die
gleiche logische Blocknummer aufweisen. Die kann beispielsweise
dadurch ausgeführt
werden, daß ein
Wert in einen Blockstatusbereich des Reserveblocks programmiert wird.
Der Reserveblock weist jetzt die Identität des ersten Blocks auf. Da
der logische Sektor einem physikalischen Sektor entspricht, der
in dem Reserveblock an der gleichen Position angeordnet ist, an
der eine ältere Version
des physikalischen Sektors in dem ersten Block angeordnet war, ist
keine Aktualisierung der Sektorabbildung erforderlich.
-
4 soll
die Anwendung des in 3 veranschaulichten Verfahrens
darstellen. Insbesondere hält der
Block 410 (d. h., der logische Block Nummer 4) die aktuelle
Version des logischen Sektors Nummer 63. Der Reserveblock 450 ist
der dem Block 410 zugeordnete Reserveblock. Ein umlaufender
Rahmenpuffer 470 enthält
eine Serie von Rahmen von Daten, welche auf die Festkörperspeicherplatte
gespeichert werden sollen.
-
Entsprechend
dem Schritt 330 gemäß 3 wird
die logische Sektornummer, zu der die Rahmendaten geschrieben werden
sollen, bestimmt. Üblicherweise
stellt das Plattenbetriebssystem die Sektornummer, in die die Daten
geschrieben werden sollen, zur Verfügung. Beispielsweise soll der
Rahmen 472 zum logischen Sektor Nummer 63 geschrieben werden.
Der der logischen Sektornummer 63 entsprechende physikalische Sektor
kann nicht neu programmiert werden, solange er nicht gelöscht wurde.
-
Der
gegenwärtig
der logischen Sektornummer 63 zugeordnete physikalische Sektor ist
der physikalische Sektor 412 im Block 410. Der
physikalische Sektor 412 ist bei einem Offset 430 innerhalb
des Blocks 410 angeordnet. Gemäß dem anhand von 3 dargelegten
Verfahren wird der Rahmen 472 in den physikalischen Sektor 452 des
Reserveblocks 450 eingeschrieben. Der physikalische Sektor 452 ist
an dem gleichen Offset 430 innerhalb des Reserveblocks 450 angeordnet,
wie der physikalische Sektor 412 innerhalb des Blocks 410 angeordnet
ist. Der logische Sektor Nummer 63 entspricht jetzt dem physikalischen
Sektor 452.
-
Die
Verwendung logischer Blocknummern und die Tatsache, daß die logischen
Sektoren zu den gleichen Offsets innerhalb des Reserveblocks umgelagert
werden, beseitigt das Erfordernis zum Aktualisieren der Sektorabbildungen
jedesmal dann, wenn ein Löschen
zurückgestellt
wird.
-
Obwohl
die neuere Version der Daten für
den logischen Block Nummer 4 im Reserveblock 450 gespeichert
ist, kann der die älteren
Versionen der Daten enthaltende Sektor nicht erneut verwendet werden,
ohne den Block 410 zu löschen.
Bei diesem Beispiel wurden die Sektoren 8, 5 und 63 im Block 410 mit
Daten aktualisiert. Die Sektoren 332, 135, 5, 684 und 651 jedoch
können
möglicherweise
noch gültige
Sektoren darstellen, welche nicht durch aktualisierte Daten in dem
Reserveblock ersetzt worden sind. Ein Rückgewinnungsprozeß wird verwendet,
um die gültigen
Sektoren aus dem Block 410 derart zu gewinnen, daß der Speicherraum,
der nicht mehr durch die Sektoren 8, 5 und 63 benötigt wird,
freigegeben werden kann, um zusätzlich eingehende
Daten zu speichern. Dieser Prozeß wird als Säuberungsprozeß bezeichnet.
Nachdem die Sektoren 8, 5 und 63 aktualisiert worden sind, wird
der Block 410 für
die Säuberung
eingeplant.
-
Bei
einem Ausführungsbeispiel
einer Festkörperspeicherplatte
enthält
jeder Block des Speichers einen oder mehrere Datensektoren. Über der
Zeit kann ein Block schließlich
einen Schwellenwert von Sektoren, die ältere Versionen von Daten enthalten,
erreichen. Um den die älteren
Versionen der Daten enthaltenden Raum zurückzugewinnen, muß der gesamte
Block gelöscht
werden. Sofern der Block mehr als einen Datensektor speichert, so
müssen
vor dem Löschen
alle anderen gültigen
Sektoren in dem Block in einen anderen Block kopiert werden.
-
Dies
wird ausgeführt,
indem die gültigen
Sektoren von Daten aus dem zum Löschen
eingeplanten Block (Quellblock) kopiert und die kopierten Informationen
in einen anderen Block (Zielblock oder Reserveblock) geschrieben
werden. Die kopierten Daten verwenden die gleiche logische Sektornummer,
obwohl sie in einem anderen Block gespeichert werden. Der Quellblock
oder die Sektoren innerhalb des Quellblocks werden als ungültig markiert,
um Operationen, die den Löschprozeß unterbrechen
könnten,
daran zu hindern, zu den älteren
Versionen der Sektoren zu schreiben. Der Quellblock wird dann gelöscht.
-
Da
es keinen permanent zugewiesenen Abschnitt des physikalischen Speichers
für eine
gegebene Sektornummer gibt, kann der Säuberungsprozeß zurückgestellt
und so priorisiert werden, daß er
nur dann durchgeführt
wird, wenn dies die Leistungsfähigkeit
der Festkörperspeicherplatte
in Bezug auf anhängige
Lese- und Schreibkommandos, die aus dem Computersystem empfangen
wurden, nicht negativ beeinflussen würde. In diesem Fall wird der
Säuberungsprozeß als Hintergrundprozeß ausgeführt.
-
Üblicherweise
haben Schreiboperationen eine höhere
Priorität
als Löschoperationen,
so daß die Löschoperationen
zurückgestellt
werden, um eine schnellere Antwort auf Schreiboperationen zu erreichen. Somit
wird selbst dann, wenn ein Säuberungsprozeß gegenwärtig ausgeführt wird,
eine anhängige
Schreiboperation bewirken, daß der
Säuberungsprozeß unterbrochen
wird, so daß die
anhängige
Schreiboperation durchgeführt
wird. Nachdem die Schreiboperation durchgeführt ist, kann der Säuberungsprozeß im Hintergrund
fortgesetzt werden.
-
Wenn
jedoch die Platte keinen ausreichenden verfügbaren Raum aufweist, so muß ein Vordergrundsäuberungsprozeß ausgeführt werden,
bevor zusätzliche
Daten zu der Platte geschrieben werden können. Somit können Schreiboperationen nicht
gegenüber
Löschoperationen
priorisiert werden, da es keinen verfügbaren Speicher für Schreiboperationen
gibt.
-
Wenn
ein Vordergrundsäuberungsprozeß ausgeführt wird,
müssen
die eingehenden Daten vorübergehend
an einem anderen Ort gespeichert werden. Die Menge des erforderlichen
temporären
Datenraums hängt
von einer Reihe von Faktoren ab, einschließlich der zum Durchführen des
Vordergrundsäuberungsprozesses
erforderlichen Zeit und der Frequenz der eingehenden Daten. Die
temporären
Daten werden in einem Overhead-Bereich des Speichers gespeichert.
-
Um
den von den die ungültigen
Daten enthaltenden Sektoren verwendeten Speicherraum zu regenerieren,
werden gültige
Sektoren von einem zur Säuberung
eingeplanten Block (einem Quellblock) zu einem Reserveblock kopiert.
Dann kann der Quellblock für
eine Gesamtregenerierung des Speicherraums, der von den die ungültigen Daten
enthaltenden Sektoren in dem Quellblock verbraucht wird, gelöscht werden.
-
5 veranschaulicht
die Schritte zum Säubern
eines Blocks (z. B. eines ”ersten
Blocks”)
unter Verwendung eines zugehörigen
Reserveblocks, beginnend mit dem Schritt 510. Der erste
Block weist eine erste logische Blocknummer auf.
-
Im
Schritt 520 wird der Ort eines gültigen Sektors in dem ersten
Block bestimmt. Im Schritt 525 wird der gültige Sektor
aus dem ersten in den Reserveblock kopiert. Der gültige Sektor
wird so kopiert, daß er
an der gleichen Position (d. h. an dem gleichen Offset) innerhalb
des Reserveblocks abgeordnet wird, an der er innerhalb des ersten
Blocks angeordnet war.
-
Im
Schritt 530 wird die Kopie des gültigen Sektors in dem ersten
Block als ungültig
markiert. Bei einem Ausführungsbeispiel
wird dies durchgeführt,
indem Statusbits in einem Kopfteil oder einem Fußbereich des Sektors modifiziert
werden. Bei einem alternativen Ausführungsbeispiel wird ein Blockstatusbereich
für den Reserveblock
oder den ersten Block modifiziert, so daß er anzeigt, daß der Reserveblock die
jüngste
Version des in ihm gespeicherten logischen Sektors repräsentiert.
-
Im
Schritt 540 bestimmt ein Test, ob ein weiterer gültiger Sektor
in dem ersten Block vorhanden ist. Die Schritte 525, 530 und 540 werden
ausgeführt,
bis keine weiteren gültigen
Sektoren in dem ersten Block verbleiben.
-
Wenn
ein weiterer gültiger
Sektor in dem ersten Block im Schritt 540 lokalisiert wird,
dann wird im Schritt 545 bestimmt, ob auf eine höher priorisierte
Funktion geantwortet werden sollte. Schritt 545 dient in
seiner Wirkung als ein Interrupt-Fenster, so daß der Hintergrund-Rückgewinnungsprozeß unterbrochen
werden kann, um höher
priorisierte Funktionen, wie beispielsweise das Speichern eines
neuen Rahmens von eingehenden Daten, zu behandeln.
-
Wenn
auf eine höher
priorisierte Funktion geantwortet werden muß, dann fährt der Prozeß mit Schritt 580 fort,
so daß der
Hintergrundprozeß zurückgestellt
wird. Anderenfalls fährt
der Schritt 545 mit Schritt 525 fort, um den Prozeß der Rückgewinnung
des zum Säubern
markierten Block fortzusetzen.
-
Vom
Schritt 540 ausgehend wird dann, wenn keine weiteren gültigen Sektoren
in dem ersten Block verbleiben, dem Reserveblock die logische Blocknummer
des ersten Blocks im Schritt 550 zugewiesen. Als nächstes wird
der erste Block im Schritt 560 gelöscht. Die Rückgewinnung des ersten Blocks
ist dann im Schritt 570 abgeschlossen. Aus dem Rückgewinnungsprozeß wird dann
im Schritt 580 zurückgekehrt.
Der frühere erste
Block ist nun für
eine Verwendung als Reserveblock während der Rückgewinnung irgendeines anderen Blocks
verfügbar.
-
6 veranschaulicht
die Anwendung des Verfahrens gemäß 5 unter
Verwendung des Blocks 610 als ersten Blocks und des Blocks 650 als
Reserveblock. Die logischen Sektoren 8, 5 und 63 wurden bereits durch
den Überschreibprozeß aktualisiert
und sind gegenwärtig
den physikalischen Sektoren 652, 655 bzw. 654 im
Reserveblock 650 zugewiesen.
-
Somit
werden die logischen Sektoren Nummern 8, 5 und 63 innerhalb des
ersten Blocks 610 nicht mehr als gültig oder aktuell betrachtet.
Die verbleibenden gültigen
Sektoren des Blocks 610 jedoch müssen in den Reserveblock 650 kopiert
werden. So werden beispielsweise die logischen Sektoren 332, 135,
684 und 561 in den Reserveblock 650 kopiert.
-
Wenn
sie kopiert werden, werden die logischen Sektoren 332, 135, 684
und 561 in den Reserveblock bei dem gleichen Offset kopiert, bei
dem sie innerhalb des ersten Blocks angeordnet waren. Beispielsweise
ist der ungültige
logische Sektor 63 bei einem Offset 620 innerhalb des Blocks 610 angeordnet.
Der gültige
logische Sektor 63 ist bei einem Offset 660 innerhalb des
Reserveblocks 650 angeordnet. Die Offsets 620 und 660 sind
gleich, so daß das
relative Offset des physikalischen Sektors, der dem logischen Sektor
63 zugeordnet ist, konstant bleibt. Die logischen Sektoren 332,
135, 684 und 561 werden auf eine Weise kopiert, welche sichert,
daß sie
bei dem gleichen Offset innerhalb des Reserveblocks 650 angeordnet
werden, bei dem sie zuvor innerhalb des Blocks 610 angeordnet
waren.
-
Die
logischen Sektoren 332, 135, 684 und 561 entsprechen den physikalischen
Sektoren 611, 613, 616 bzw. 617 des
Blocks 610. Die logischen Sektoren 332, 135, 684 und 561
werden folglich in die physikalischen Sektoren 651, 653, 656 bzw. 657 im
Reserveblock kopiert. Dies sichert, daß keine Sektorabbildungen aktualisiert
zu werden brauchen, nachdem die Rückgewinnung abgeschlossen ist.
-
Der
Rückgewinnungsprozeß verwendet
zumindest zwei Blöcke
für jeden
Block, der zurückgewonnen wird.
Der erste verwendete Block ist derjenige Block, welcher gesäubert oder
zurückgewonnen
wird, und der zweite Block ist der Reserveblock, der dem gesäuberten
Block zugeordnet ist. Jedoch kann es sein, daß die eingehenden Datenrahmen
nicht sämtlich
logischen Sektoren innerhalb des gleichen Blocks zugeordnet sind. In
einem solchen Fall muß ein ”Block-Sprung” durchge führt werden,
um mit dem Speichern der eingehenden Datenrahmen in einem anderen
Block zu beginnen.
-
Jedesmal
dann, wenn ein Blocksprung erforderlich ist, könnten zumindest zwei weitere
Blöcke
sofort zum Speichern der eingehenden Daten verfügbar sein. Wenn es keine weiteren
verfügbaren
Reserveblöcke gibt,
dann müssen
die Rahmendaten in einen Overhead-Bereich geschrieben werden, um
dm Verlust eingehender Daten zu vermeiden, während die Rückgewinnung des vorhergehenden
Blocks abgeschlossen wird.
-
7 veranschaulicht
den integrierten Prozeß des
Initiierens und Durchführens
eines kontinuierlichen Überschreibens
einer Datei, die als sektorbasierte Dateistruktur in einem nicht-flüchtigen
Speicher gespeichert ist, einschließlich der Verwendung eines
Overhead-Bereichs. Dieser Prozeß ist
insbesondere zum Überschreiben
von Dateien geeignet, die in nicht-flüchtigen Speichern gespeichert
sind, welche voll oder im wesentlichen voll sind.
-
Der
Prozeß beginnt
im Schritt 710, indem ein suchen nach einem der zu überschreibenden
Datei zugeordneten identifizierten Sektor durchgeführt wird.
Der identifizierte Sektor und der Block, in dem der identifizierte
Sektor angeordnet ist, werden zum ”aktuellen Sektor” bzw. ”aktuellen
Block”.
Das Dateiüberschreiben wird
somit am aktuellen Sektor des aktuellen Blocks im Schritt 715 initiiert.
-
Im
Schritt 720 wird ein Test durchgeführt, um festzustellen, ob ein
empfangener Datenrahmen sofort abgefertigt werden muß. Wenn
nicht, fährt
die Verarbeitung mit den Hintergrundprozessen 765 fort,
um die Rückgewinnung
des Overhead-Bereichs zu priorisieren, die zum Säubern markierten Blöcke zurückzugewinnen
oder um Sektoren von einem Overhead-Bereich in der unten beschriebenen Weise
umzulagern.
-
Wenn
Rahmendaten abgefertigt werden müssen,
Jährt die
Verarbeitung mit Schritt 725 fort, um den logischen Sektor
zu bestimmen, in den die Rahmendaten geschrieben werden sollen.
Schritt 730 bestimmt, ob ein Blocksprung erforderlich sein
wird.
-
Wenn
der logische Sektor in dem aktuellen Block ist, dann ist kein Blocksprung
erforderlich. Folglich fährt
die Verarbeitung mit Schritt 735 fort. Im Schritt 735 wird
ein Reserveblock für
den aktuellen Block lokalisiert, sofern dies möglich ist. Wenn es zu diesem
Zeitpunkt keinen dem aktuellen Block zugeordneten Reserveblock gibt,
dann werden die Rahmendaten in einen logischen Sektor in dem Overhead-Bereich geschrieben, Schritt 760.
Anderenfalls werden die Rahmendaten in einen Sektor des Reserveblocks
im Schritt 740 geschrieben. Wenn die Rahmendaten in einen
Sektor des Reserveblocks geschrieben werden, werden sie bei dem gleichen
Offset innerhalb des Reserveblocks geschrieben, wie die durch sie
ersetzten Daten in dem aktuellen Block angeordnet sind.
-
Bei
einem Ausführungsbeispiel
ist der Rahmen von Daten kleiner als die Größe eines Sektors. Sobald ein Überschreiben
bei einer bestimmten Startadresse oder bei einem bestimmten Startort
innerhalb der Datei initiiert ist, ersetzen nachfolgende Rahmen
von Daten nachfolgende Orte innerhalb der Datei. So werden aufeinanderfolgende
Rahmen von Daten aneinandergefügt,
bis der aktuelle Sektor mit den Rahmen von Daten gefüllt ist,
bevor sich die Verarbeitung in den nächsten Sektor der Datei bewegt.
Im Grunde wird jeder nachfolgende Datenrahmen zu einem Rahmenoffset
innerhalb des ersetzten Sektors geschrieben, bis der Sektor in dem
Reserveblock voll ist.
-
Bei
einem Ausführungsbeispiel
kann das Überschreibverfahren
an einem beliebigen Punkt innerhalb eines Sektors initiiert werden.
Folglich muß das Überschreibverfahren
nicht an einer Sektorbegrenzung initiiert werden. Wenn die Startadresse,
zu der der Anfangsrahmen von Daten geschrieben werden soll, nicht
einer Sektorbegrenzung entspricht, dann sollten die beginnend mit
der Sektorbegrenzung der Startadresse vorhergehenden Daten des gerade überschriebenen
anfänglichen
Sektors in den Reserveblock kopiert werden. Somit werden für den anfänglichen
Sektor, der überschrieben
wird, die von der Sektorbegrenzung bis zu der Startadresse des Rahmens
vorhergehenden Daten des überschriebenen
Sektors in gleiche zugehörige
Orte in dem Reserveblock kopiert, sofern die Startadresse nicht
mit einer Sektorbegrenzung des gerade überschriebenen anfänglichen
Sektors zusammenfällt.
-
Sobald
die Rahmendaten in den Reserveblock (Schritt 740) oder
den Overhead-Bereich (760) geschrieben sind, wird die alte
Version des Sektors ungültig
gemacht. Bei einem Ausführungsbeispiel
wird dies ausgeführt,
indem Statusbits in einem Kopf- oder einem Fußbereich des Sektors modifiziert
werden. Bei einem alternativen Ausführungsbeispiel wird ein Blockstatusbereich
für den
Reserveblock oder den ersten Block modifiziert, um anzuzeigen, daß der Reserveblock
die jüngste
Version des in ihm gespeicherten logischen Sektors repräsentiert.
Welche Lösung
auch gewählt
wird, sie muß sichern,
daß die
jüngste
Version eines Sektors sofort von älteren Versionen mit der gleichen
logischen Sektornummer unterschieden werden kann. Die älteren Sektornummern
werden wirksam ungültig
gemacht. So wird im Schritt 745 der ”aktuelle” Sektor des aktuellen Blocks
ungültig
gemacht, weil er nicht mehr die jüngste Version des Sektors darstellt.
Vom Schritt 745 kehrt der Prozeß zum Schritt 720 zurück, um zusätzliche
eingehende Daten zu behandeln.
-
Im
Schritt 730 wird dann, wenn die aus Schritt 720 bestimmte
logische Sektornummer nicht in dem aktuellen Block angeordnet ist,
ein Blocksprung erforderlich. Nachfolgend wird im Schritt 750 der
aktuelle Block zur Säuberung
markiert. Im Schritt 755 wird der Block, in dem der logische
Sektor gespeichert ist (d. h. der Block, in den ”gesprungen” wird), als aktueller Block
gekennzeichnet. Die Verarbeitung kehrt dann zum Schritt 735 zurück, um zu
bestimmen, ob ein Reserveblock für
den neuen ”aktuellen
Block” verfügbar ist.
-
Obwohl
die Behandlung eingehender Rahmen von Daten hohe Priorität hat, um
zu sichern, daß keine Daten
verlorengehen, muß man
sich von Zeit zu Zeit um die Overhead-Daten und die Block-Rückgewinnung kümmern. Die
Prozesse der Priorisierung des Overhead-Bereichs für eine Säuberung 770,
der Rückgewinnung
von für
die Säuberung
markierten Blöcken 780 und
des Umlagerns von Sektoren aus dem Overhead-Bereich 790 sind
sämtlich
Hintergrundprozesse, welche unterbrochen werden können, um
sich der höher
priorisierten Funktion der Behandlung eingehender Daten (d. h. Schritt 720)
zu widmen.
-
Wenn
es keine Rahmen von Daten mehr gibt, um die man sich sofort kümmern muß, dann
beginnen die Hintergrundprozesse 765 mit der Priorisierung
der Rückgewinnung
des Overhead-Bereichs, sofern erforderlich, im Schritt 770.
-
Bei
einem Ausführungsbeispiel
wird der Block, in dem sich der Overhead-Bereich aufhält, für eine Säuberung
eingeplant, sobald der Overhead-Bereich einen vorgegebenen Schwellwert
von verfügbaren
verbleibenden Sektoren erreicht. Der vorgegebene Schwellwert sollte
hoch genug gewählt
werden, so daß bei
gegebenen Löschzeiten
einer speziellen Implementierung es noch genügend Overhead-Bereich gibt,
um eingehende Daten aufzunehmen, ohne aus dem Overhead-Bereich hinauszulaufen,
bevor der Overhead-Bereich gesäubert
wird.
-
Der
Overhead-Bereich muß sofort
verfügbar
sein, um zu sichern, daß keine
Daten verlorengehen. Sobald der Overhead-Bereich eine vorgegebene Schwellenanzahl
von benutzten Sektoren erreicht, wird der Block, in dem sich der
Overhead-Bereich aufhält,
für die
Säuberung
eingeplant. Unabhängig
davon, ob irgenwelche anderen Blöcke
für die
Säuberung
eingeplant sind, wird der Rückgewinnung
des Blocks, in dem sich der Overhead-Bereich aufhält, eine
höhere
Priorität
im Schritt 770 gegeben. Dies bewirkt gegebenenfalls die Zurückstellung
der Rückgewinnung
irgendwelcher anderer Blöcke,
um eine sofortige Verfügbarkeit
des Overhead-Bereichs zu sichern.
-
Im
Schritt 780 wird der Prozeß der Rückgewinnung irgendwelcher zur
Säuberung
markierter Blöcke durchgeführt. Abgesehen
davon, daß er
Priorität
gegenüber
der Rückgewinnung
irgendwelcher anderer Blöcke
hat, wird der Block, der dem Overhead-Bereich zugeordnet ist, wie
jeder andere Block auch zurückgewonnen.
Sofern Schritt 785 bestimmt, daß die Rückgewinnung nicht abgeschlossen
ist, dann werden die Hintergrundprozesse 765 ausgesetzt,
damit sich die Verarbeitung Funktionen höherer Priorität widmen
kann. Wenn die Rückgewinnung
nicht erforderlich war oder erfolgreich abgeschlossen ist, wird
die Verarbeitung im Schritt 790 fortgesetzt.
-
Der
Overhead-Bereich wird nur benutzt, um Sektoren vorübergehend
zu speichern. Anderenfalls müßten die
Sektorabbildungen aktualisiert werden, um den neuen Speicherort
der Sektoren wiederzugeben. Um die Schritte des Aktualisierens der
Sektorabbildungen zu vermeiden, müssen die logischen Sektoren
in dem Overhead-Bereich in die richtigen physikalischen Sektoren
und Blöcke
umgelagert werden. Somit führt
der Schritt 790 die Umlagerung von gegenwärtig in
dem Overhead-Bereich
gespeicherten Sektoren durch, sofern dies erforderlich ist.
-
Der
Prozeß des
Umlagerns von gegenwärtig
in dem Overhead-Bereich gespeicherten Sektoren ist beginnend mit
dem Schritt 810 naher in 8 veranschaulicht.
Im Schritt 820 wird ein gültiger Sektor innerhalb des
Overhead-Bereichs lokalisiert. Der Block, der eine ungültige Version
desselben Sektors aufweist, wird im Schritt 825 lokalisiert
(die ungültige
Version wird bei einem ersten Offset innerhalb eines ersten Blocks
lokalisiert).
-
Ein
dem ersten Block zugeordneter Reserveblock wird im Schritt 830 lokalisiert.
Der gültige
Sektor aus dem Overhead-Bereich wird in den Rerserveblock im Schritt 835 kopiert.
Der gültige
Sektor wird mit einem Offset innerhalb des Reserveblocks kopiert,
das gleich dem Offset der ungültigen
Version des Sektors in dem ersten Block ist. Im Schritt 840 wird
der gültige
Sektor in dem Overhead-Bereich als ungültig markiert. Im Schritt 845 wird
ein Test durchgeführt,
um zu bestimmen, ob irgendwelche weiteren gültigen Sektoren in dem Overhead-Bereich
vorhanden sind.
-
Wenn
ein weiterer gültiger
Sektor in dem Overhead-Bereich angeordnet ist, fährt die Verarbeitung mit dem
Schritt 850 fort. Schritt 850 dient als ein Interrupt-Fenster,
das es dem Hintergrundprozeß gestattet,
angehalten zu werden, um auf eine höher priorisierte Funktion,
wie beispielsweise der Behandlung eingehender Datenrahmen, zu antworten.
Sofern eine höher
priorisierte Funktion behandelt werden muß, fährt der Hintergrundprozeß vom Schritt 850 zur
Rückkehr
im Schritt 870 fort. Andernfalls, d. h., wenn keine höher priorisierte Funktion
den Hintergrundprozeß unterbricht,
wird die Umlagerung vom Schritt 850 zum Schritt 825 fortgesetzt.
-
Wenn
keine weiteren gültigen
Sektoren in dem Overhead-Bereich
im Schritt 845 gefunden werden, dann ist die Umlagerung
der logischen Sektoren innerhalb des Overhead-Bereichs abgeschlossen,
wie es im Schritt 860 festgestellt wird. Der Hintergrundprozeß endet
dann im Schritt 870.
-
Obwohl
eine zusammenhängende
Speicherung von Sektoren, die der gleichen Datei zugeordnet sind, innerhalb
der Festkörperspeicherplatte
nicht erforderlich ist, erfordern die oben beschriebenen Verfahren,
daß eine
vorgegebene Anzahl von der gerade überschriebenen Datei zugeordneten
Sektoren in dem gleichen Block angeordnet sein müssen. Die Reihenfolge oder
Nachbarschaft der betroffenen Sektoren innerhalb des Blocks ist
irrelevant. Immer dann, wenn der nächste zu überschreibende Block nicht
in dem aktuellen Block lokalisiert wird, ist ein Blocksprung erforderlich,
wie es oben unter Bezugnahme auf 7 erörtert wurde.
-
Solange
die Häufigkeit
von Blocksprüngen
geringer als ein bestimmter Schwellwert ist, sind die oben beschriebenen
Verfahren in der Lage, ein kontinuierliches Überschreiben der Datei auszuführen. Die
Häufigkeit
von Blocksprüngen
wird durch den Grad der Fragmentierung der Datei bestimmt. Der Schwellwert
wird zum Teil durch die eingehende Datenrate und die Geschwindigkeit
des Rückgewinnungsprozesses
bestimmt.
-
Daten
werden kontinuierlich bei einer effektiven Rate ri empfangen,
wobei ri in Sektoren pro Sekunde ausgedrückt wird.
Es muß ein
ausreichender Overhead-Bereich vorhanden sein, um die eingehenden
Daten während
einer im ungünstig sten
Fall auftretenden Zurückgewinnungszeitdauer
unterzubringen. Die ungünstige
Zurückgewinnungszeitdauer
treclaim unterstellt, daß ein gesamter Quellblock von
Daten in einen Reserveblock kopiert werden muß, und daß der Quellblock gelöscht werden
muß, um
einen neuen Reserveblock für zukünftige Zurückgewinnungsoperationen
zur Verfügung
zu stellen. Somit ist die Zeit zum Kopieren eines gesamten Quellblocks
tcopy plus die Zeit, die zum Löschen eines
Blocks erforderlich ist, terase gleich der
ungünstigsten
Zurückgewinnungszeitdauer,
so daß treclaim = tcopy +
terase Folglich muß es einen ausreichenden Overhead-Speicherbereich
geben, um zumindest ri × treclaim Sektoren
von Daten aufzunehmen.
-
Nebenbei
sei angemerkt, daß treclaim nicht die unbehinderte ungünstigste
Vordergrundzurückgewinnungszeit
ist. Angenommen, daß der
Zurückgewinnungsprozeß im Hintergrund
abläuft,
so wird treclaim durch die Zeitdauer, die
zum Verarbeiten der Hintergrundzurückgewinnungsfunktionen zugewiesen
ist, beeinflußt.
Da der Zurückgewinnungsprozeß unterbrochen
wird, um sich neuen Rahmen der eingehenden Daten zu widmen, ist
treclaim auch zum Teil von der Rate der
eingehenden Daten abhängig.
Somit reflektiert treclaim die ungünstigste Zurückgewinnungszeit,
wenn die Festkörperspeicherplatte
im wesentlichen voll mit Daten ist und wenn Daten bei der Rate ri empfangen werden.
-
Bei
einem Ausführungsbeispiel
ist der Overhead-Bereich groß genug,
um wenigstens ri × treclaim Sektoren
von Daten aufzunehmen. Wenn jedoch der Overhead-Bereich gerade den
minimalen erforderlichen Overhead-Raum schafft, so wird ein kontinuierliches
Zurückgewinnen
erforderlich sein, um den Overhead-Bereich für zusätzliche eingehende Daten freizugeben.
Die kontinuierliche Zurückgewinnung
des Overhead-Bereichs führt
zu einer nachteiligen Beeinflussung der Durchsatzleistung der Festkörperspeicherplatte.
Zusätzlich
führt die
kontinuierliche Zurückgewinnung
zu einem Verbrauch größerer Leistungsmengen.
Somit wird, um die Festkörperspeicherplattenleistung
zu erhöhen
und den Stromverbrauch abzu senken, bei einem Ausführungsbeispiel
der Overhead-Bereich so gewählt,
daß er
Mehrfache m der Minimalanzahl von Sektoren aufnehmen kann (d. h.,
der Overhead-Bereich nimmt m × ri × treclaim Sektoren auf, wobei m > 1 ist). Bei einem
Ausführungsbeispiel
wird ein m von mindestens 4 gewählt,
so daß der
Overhead-Bereich ein Minimum von 4 × ri × treclaim Sektoren aufnimmt.
-
Um
ein kontinuierliches Überschreiben
zu erreichen, sollte die Anzahl der Blocksprünge, die beim Überschreiben
einer Datei erforderlich werden, unter einer Sprungfrequenz gehalten
werden. Diese Sprungfrequenz steht in einem umgekehrten Verhältnis zur
Anzahl der aufeinanderfolgend verketteten Dateisektoren, die in
demselben Block angeordnet sind. Ein Absenken der Sprungfrequenz
kann ausgeführt
werden, indem die Anzahl der aufeinanderfolgend verketteten Dateisektoren
erhöht
wird, die in dem gleichen Block angeordnet sind. Der Dateifragmentierungsgrad
dient als ein Maß der
Anzahl von in demselben Block angeordneten aufeinanderfolgend verketteten
Dateisektoren. Somit hilft ein geringerer Dateifragmentierungsgrad,
eine geringere Blocksprungfrequenz zu sichern. Eine bestimmte Schwellenanzahl
von aufeinanderfolgend verketteten Sektoren muß innerhalb des gleichen Blocks
angeordnet sein, um zu sichern, daß es stets einen Reserveblock für die Rückgewinnung
und einen Overhead-Bereich, der für eine vorgegebene Rate eingehender
Daten verfügbar
ist, gibt.
-
Um
zu sichern, daß der
Dateifragmentierungsgrad gering genug ist, kann es folglich erforderlich
werden, die Datei zu defragmentieren, bevor der kontinuierliche Überschreib-
prozeß richtig
funktionieren kann. Es ist nur die Fragmentierung derjenigen Datei
relevant, die überschrieben
wird. Bei einem Ausführungsbeispiel
muß jeder
Block mit Ausnahme des letzten Blocks, der zum Speichern eines Abschnitts
der überschriebenen
Datei verwendet wird, eine Minimalanzahl n aufeinanderfolgend verketteter
Sektoren aufweisen. Bei diesem Ausführungsbeispiel wird das Überschreiben
beendet, so bald das Ende der Datei erreicht ist. Folglich braucht
der Block, der das Ende der Datei speichert, keine Minimalanzahl
n aufeinanderfolgend verketteter Sektoren aufzuweisen.
-
Bei
einem anderen Ausführungsbeispiel
wird, sobald das Ende der Datei erreicht ist, der Überschreibprozeß fortgesetzt,
in dem mit dem Überschreiben
des ersten der Datei zugeordneten Sektors fortgefahren wird. Bei
diesem Ausführungsbeispiel
gibt es im Prinzip keinen ”letzten
Block” für den Überschreibprozeß. Somit
sollte jeder Block, in dem ein Abschnitt der Datei gespeichert ist,
die Minimalzahl n aufeinanderfolgend verketteter Sektoren aufweisen.
-
Bei
einem Ausführungsbeispiel
ist die Schwellanzahl n größer als
oder gleich der Maximalanzahl von Sektoren von Daten, die in einer
ungünstigsten
Säuberungszeitperiode
empfangen werden können.
Mit anderen Worten, es ist n ≥ r
i × t
reclaim. Die Datenrate r
i kann
bestimmt werden aus
-
Beispielsweise
ist eine 1 Kb/Sekunde-Datenrate äquivalent
einer 2 Sektoren/Sekunde-Datenrate, sofern 512-Byte-Sektoren verwendet
werden.
-
Man
betrachte ein Beispiel, bei dem das Verfahren zum Ausführen eines
kontinuierlichen Überschreibens
verwendet wird, um Audiodaten zu speichern. Audiodaten werden als
Rahmen von 84 Bytes empfangen, welche in einem umlaufenden Puffer
gespeichert werden. Ein Audiorahmen wird alle 40 ms empfangen. Somit beträgt die eingehende
Datenrate
oder ungefähr 2 kB/s.
Angenommen, daß die
Festkörperspeicherplatte
für 512-Byte-Sektoren
konfiguriert ist, so ist
-
Für eine ungünstigste
Rückgewinnungszeit
von treclaim = 5,66 Sekunden könnten ungefähr 23 Sektoren von
Daten während
einer ungünstigsten
Zurückgewinnungszeitdauer
empfangen wer den (d. h. ri × treclaim = 4 Sektoren/Sekunde × 5,66 Sekunden
= 23 Sektoren).
-
Bei
diesem Beispiel müssen
für n > ri × treclaim mindestens 23 aufeinanderfolgende
verkettete Sektoren in jedem Block, in dem ein Abschnitt der Datei
gespeichert ist, gespeichert werden (mit Ausnahme gegebenenfalls
des letzten Blocks, wie oben erläutert
wurde). Somit sollte gegebenenfalls die Datei defragmentiert werden,
um zu sichern, daß nicht
weniger als 23 aufeinanderfolgende verkettete Sektoren in jedem
Block angeordnet sind, in dem ein Abschnitt der Datei gespeichert
ist.