-
Hintergrund der Erfindung
-
I. Gebiet der Erfindung
-
Die
vorliegende Erfindung betrifft elektronische Schaltungen. Insbesondere
betrifft die vorliegende Erfindung ein neues und verbessertes Verfahren
und eine Vorrichtung zur Reduzierung der RAM-Anforderung in einer
Vorrichtung unter Beibehaltung einer schnellen Suche und Abfrage
von Daten aus einem langsamen nichtflüchtigen Speicher.
-
II. Beschreibung verwandter
Techniken
-
Ein
elektronischer Speicher irgendeines Typs wird in fast allen modernen
elektronischen Vorrichtungen verwendet. Ein elektronischer Speicher kann
die Form von Floppy-Disks, Magnetbänder, Festplatten und integrierten
Schaltungen (IC – integrated
circuits) annehmen. Jede Speicherform hat ihre Vorteile und Nachteile.
Floppy-Disks ermöglichen
zahlreiche Datenaktualisierungen auf einem tragbaren Medium, haben
aber eine begrenzte Kapazität
und eine sehr lange Lese- und Schreibzugriffszeit. Sowohl Magnetbänder als
auch Festplatten weisen die Fähigkeit
für eine
enorme Kapazität
auf, sind aber nicht tragbar, erfordern große Mengen von Unterstützungs-Hardware
und haben langsame Lese- und Schreibzugriffszeiten. Daten, die auf
einer Floppy-Disk, einer Festplatte und einem Magnetband gespeichert
werden, werden oft vor einem Speichern auf dem Medium zuerst in
einer Software auf ein Dateiformat formatiert. Wenn Daten aus dem
Speichermedium zurückgewonnen
werden, muss die Softwaredateiroutine ablaufen, um die angeforderten
Daten zu lokalisieren und abzufragen. Dies verlangsamt weiter den
Datenzugriffsprozess, da es eine Software-Ebene zusätzlich zu
dem bereits langsamen Hardware-Zugriff hinzufügt.
-
Ein
IC-Speicher wird typischerweise verwendet, wenn ein Speicher in
eine tragbare Vorrichtung integriert werden muss. Ein Variieren
des Typs und der Anzahl von ICs kann die Menge an Speicher skalieren
(verkleinern/vergrößern). ICs
erfordern minimale Unterstützungs-Hardware,
sind sehr klein und können
schnelle Lese- und Schreibzugriffszeiten liefern. Mancher IC-Speicher kann einen
direkten Zugriff einfach unterstützen
ohne die Notwendigkeit für eine
Software-Ebene bzw. Layer.
-
Eine
Vielzahl von unterschiedlichen Typen von IC-Speicher ist verfügbar, um
Lösungen
für verschiedene
Gestaltungsanforderungen vorzusehen. Jeder Typ von Speicher kann
eine Anzahl von Gestaltungsanforderungen erfüllen, aber kein Speichertyp
ist in der Lage, eine vollständige
Gestaltungslösung
zu liefern. Der für
eine bestimmte Anwendung gewählte
Typ von Speicher hängt
ab von der geplanten Verwendung und von Kompromissen zwischen Leistung
und Gestaltung.
-
Der
verbreitetste Typ von IC-Speicher ist der Festwertspeicher (ROM – read only
memory). Wie der Name andeutet, ist der Speicher nur zum Lesen zugänglich.
Eine ROM-Vorrichtung kann nicht wiederbeschrieben werden, sobald
sie programmiert wurde. Integrierte Softwareanwendungen verwenden ROM,
um integrierte Code- und Datenaufzeichnungen zu speichern. Der Prozessor
in einer integrierten Softwareanwendung ruft jede Anweisung aus
dem ROM ab und führt
sie aus. Unterschiedliche Typen von ROM sind abhängig von der Flüchtigkeit
der in dem ROM zu programmierenden Information verfügbar. Wenn
die in dem ROM zu speichernde Information sich nicht ändern wird
und das erwartete Volumen von Vorrichtungen hoch ist, dann wird
ein maskenprogrammierbarer ROM verwendet. Dieser Typ von ROM wird
vor dem Packen des Chips (die) maskenprogrammiert. Die zu programmierende
Information muss sehr stabil sein und darf keiner Revision unterliegen,
da Änderungen
der programmierten Information eine Maskenänderung erfordern. Die Vorteile
einer Verwendung von maskenprogrammiertem ROM betreffen Kosten-
und Zeiteinsparungen für ausgereifte
Pro dukte mit hohem Volumen. Andere Typen von ROM sind für Produkte
verfügbar,
die keine Produktionsvolumen oder eine Codestabilität unterstützen, die
ausreichend sind/ist, einen maskenprogrammierten ROM zu rechtfertigen.
-
Ein
programmierbarer Festwertspeicher (PROM – programmable read only memory)
ermöglicht
dem Vorrichtungshersteller, den integrierten Code zu programmieren.
Dies ermöglicht
Revisionen des Codes, aber ermöglicht
noch immer keine Modifikation oder Löschung des ROMs, sobald er
programmiert wurde. Vorrichtungen, die mit einer veralteten Coderevision
programmiert wurden, müssen entweder
mit der veralteten Coderevision verwendet werden oder müssen weggeworfen
werden.
-
Ein
EPROM (erasable programmable read-only memory) sieht die Fähigkeit
vor, einen programmierten Teil vollständig zu löschen. Die Löschung eines
EPROMs wird erreicht durch Aussetzen des Chips einem ultravioletten
Licht (UV) für
eine vorgegebene Zeitdauer. Der Chip kann dem UV-Licht durch ein
transparentes Fenster auf dem EPROM-Gehäuse ausgesetzt werden. Sobald
der EPROM gelöscht
wurde, kann er neu programmiert werden. EPROMs werden typischerweise
nur bei der Ingenieursentwicklung verwendet, wo die erwartete Anzahl
von Coderevisionen hoch ist. Die Einschränkungen an den Gehäusetyp,
der das transparente Fenster aufnehmen kann, tragen zu dem sehr
viel höheren
Preis eines EPROMs im Vergleich zu einem PROM bei. Obwohl der EPROM
gelöscht
und neu programmiert werden kann, müssen die Modifizierungen des
Codes auf einer vollständigen
Chip-Basis durchgeführt werden.
Sogar Änderungen
an einem einzigen Bit in dem Code erfordern eine vollständige Löschung und
neue Programmierung. Diese Einschränkung zusammen mit der Erfordernis
für ein UV-Licht
zur Löschung
begrenzen die Aufgabe einer Aktualisierung von EPROMs auf die ursprünglichen Vorrichtungshersteller
(OEMs – original
equipment manufacturers).
-
Eine
Vorrichtung, die eine selektive Inhaltslöschung und Neuprogrammierung
erlaubt, ist der EEPROM (electrically erasable programmable read
only memory). Ein herkömmlicher
EEPROM ermöglicht, dass
Daten an Ort und Stelle aktualisiert werden können. Das heißt, ein
bestimmter Datenort kann gelöscht
und neue Daten an derselben Stelle darüber geschrieben werden. Daten
können
aus einem EEPROM schnell gelesen werden, aber der Schreibzyklus
des herkömmlichen
EEPROMs kann um eine Größenordnung
länger
sein als die Lesezeit. Ein weiterer Nachteil einer Verwendung eines
herkömmlichen
EEPROMs entsteht aus der inhärenten
Struktur der herkömmlichen
EEPROM-Zelle. Die Struktur einer herkömmlichen EEPROM-Zelle erfordert mehr Transistoren
als in einem standardmäßigen PROM. Die
erhöhte
Struktur resultiert in einer reduzierten Speicherkapazität und gesteigerten
Kosten. Diese Nachteile verbieten eine Verwendung von herkömmlichem
EEPROM in den meisten elektronischen Anwendungen für Endverbraucher.
-
Ein
Arbeitsspeicher (RAM – random
access memory) stellt ein weiteres alternatives Mittel zur Speicherung
dar. RAM ermöglicht
selektive Datenlesungen und -beschreibungen. Lesen und Schreiben können auf
einer Byte-Basis durchgeführt
werden. Es ist kein Löschzyklus
erforderlich vor dem Schreiben neuer Daten auf ein früher beschriebenes
Byte. Ferner sind, anders als beim EEPROM, die Lese- und Schreibzykluszeiten
fast identisch. Die Dichte und Kapazität von RAM ist vergleichbar
zu ROM. Der größte Nachteil
bei der Verwendung von RAM ist die flüchtige Eigenschaft der gespeicherten
Daten. In einem RAM gespeicherte Information ist verloren, wenn
der RAM abgeschaltet wird. Dies steht in Kontrast zu ROM, bei dem
es sich um einen nichtflüchtigen
Speicher handelt, wo die Inhalte des Speichers verbleiben, auch
nachdem der IC einem Stromzyklus (an/aus) unterzogen wurde. Um die
Inhalte von RAM zu behalten, muss auf dem Chip zu jeder Zeit Strom vorhanden
sein. Dies erfordert eine Batterieunterstützung zu der normalen Stromversorgung.
Wenn die Batterieunterstützung
ausfällt,
wenn die Stromversorgung ausgeschaltet wird, sind die Inhalte des RAMs
verloren. Aus diesem Grund wird RAM nicht für einen integrierten Code verwendet
und wird nur für
einen dynamischen Speicher verwendet. Ein für einen integrierten Code verwendeter
RAM wäre
anfällig
für einen
Verlust von Batterieleistung und Stromversorgungsstörungen.
Ferner hätten,
wenn ein RAM für
einen integrierten Code verwendet wird, Batterie-betriebene Vorrichtungen,
wie zellulare Telefone, aufgrund des konstanten Strombedarfs des RAMs
eine verminderte Batterielebensdauer. Wenn ein RAM für einen
dynamischen Speicher verwendet wird, interessiert es das System
nicht, ob die Inhalte nach einem Stromzyklus verloren sind. Dies
verringert die Notwendigkeit für
eine Batterieunterstützung. Jedoch
sind die Kosten eines RAMs höher
als die Kosten eines ROMs.
-
Eine
weitere Speicheralternative ist ein sektorierter (sectored) EEPROM,
der im Allgemeinen als ein Flash-Speicher bezeichnet wird. Ein sektorierter EEPROM
ist eine nichtflüchtige
Speichervorrichtung, die ein Lesen und Schreiben auf einer Byte-Basis
ermöglicht.
Im Unterschied zu RAM muss in einem sektorierten EEPROM eine Löschoperation
vor dem Neubeschreiben über
ein vorher beschriebenes Byte durchgeführt werden. Jedoch kann eine
Datenlöschung
nicht auf einer Byte-Basis durchgeführt werden. Eine Löschung kann
nur auf einer Sektorbasis durchgeführt werden, wobei die Größe des Sektors von
der bestimmten gewählten
Speichervorrichtung definiert wird. Die Größe eines löschbaren Sektors ist immer
größer als
ein Byte und kann in dem Bereich von 64 Kbytes liegen. Jedoch ist
die Anzahl von Löschzyklen
nicht unbegrenzt, sondern von einer maximalen Zykluslebensdauer
begrenzt. Eine typische empfohlene Löschzykluslebensdauer für einen sektorierten
EEPROM ist 100,000 Zyklen. Somit würde man einen sektorierten
EEPROM nicht für
Anwendungen verwenden, die mehr als 100,000 Löschzyklen über die erwartete Lebensdauer
der Vorrichtung erfordern. Ein sektorierter EEPROM hat Vorteile
gegenüber
den anderen Typen von wiederbeschreibbarem Speicher in Anwendungen,
die weniger als 100,000 Lösch- und Wiederbeschreibzyklen
erfordern. Ein sektorierter EEPROM ist bevorzugt gegenüber jedem
Typ von RAM für
integrierte Codeanwendungen, da ein sektorierter EEPROM nichtflüchtig ist. Ein
sektorierter EEPROM ist vorzuziehen über EPROM aufgrund der Fähigkeit
des sektorierten EEPROMs, Teile des systeminternen Speichers neu
zu beschreiben. Ein sektorierter EEPROM benötigt auch kein UV-Licht für eine Chiplöschung.
Ein sektorierter EEPROM ist vorzuziehen gegenüber einem herkömmlichen
EEPROM, der vergleichbare Wiederbeschreibbeschränkungen aufweist, aufgrund
der geringeren Kosten und der höheren
Dichte von sektorierten EEPROM-Vorrichtungen.
Sektorierte EEPROMs werden in tragbaren elektronischen Vorrichtungen
für die
nichtflüchtige
Speicherung von Benutzerkonfigurierbaren Daten verwendet.
-
In
einem sektorierten EEPROM gespeicherte Daten werden oftmals formatiert,
um einem Dateisystem zu entsprechen. Das Dateiformatübereinkommen
wird teilweise von dem Löschzyklus
auf Sektorgröße bestimmt.
Daten werden nicht an einen bestimmten Ort speicheradressiert (memory
mapped), da Daten in einem sektorierten EEPROM nicht auf der Stelle
wieder geschrieben werden können. Der
zusätzliche
Software-Overhead führt
zu stark erhöhten
Speicherzugriffszeiten. Die Zugriffszeit wird in Multitasking-Systemen weiter erhöht. Einem
nichtflüchtigen
Speicherzugriff in einem Multitasking-Systeme kann durch eine Aufgabe
mit höherer
Priorität zuvorgekommen
(preempted) werden. Eine Präemption
erfordert, dass die Aufgabe mit niedrigerer Priorität auf die
Beendigung der Aufgabe mit höherer
Priorität
wartet, bevor sie fortfährt.
Wenn der Software-Overhead bei der Berechnung der Zugriffszeit eingeschlossen
ist, kann die Zeit, um auf Daten von dem sektorierten EEPROM zuzugreifen,
mehr als 1000 bis 100,000 mal langsamer sein als die Zugriffszeit auf
in RAM-Vorrichtungen gespeicherten Daten.
-
Lange
Zugriffszeiten stellen für
den Benutzer Schnittstellenprobleme dar. In einer tragbaren elektronischen
Vorrichtung, wie einem drahtlosen Telefon, werden nichtflüchtige Benutzer-konfigurierbare Daten
oft in sektorierten EEPROMs gespeichert. Die Benutzerschnittstelle
wird verbessert, wenn ein Zugriff auf die Daten des Telefonbuchs
als verzögerungsfrei
stattzufinden erscheint. Ein Datenabruf aus dem sektorierten EEPROM
führt zu
einer langsamen Benutzerantwort, wenn ein Benutzer eine Telefonnummer
zum Vergleich mit den Einträgen
in dem Telefonbuch eingibt. Dies geschieht auf grund des Software-Overheads
bei der Bearbeitung des Dateisystems, das initiiert werden muss,
um Daten aus dem sektorierten EEPROM abzufragen. Die lange Zugriffszeitverzögerung stellt
ein ernsthaftes Problem in Echtzeitsystemen dar, wo ein Datenabruf
in einem vordefinierten Zeitfenster stattfinden muss.
-
Eine
Lösung
für die
langsamen Zugriffszeiten von sektorierten EEPROMs oder anderem nichtflüchtigem
Speicher besteht darin, alle Daten von den nichtflüchtigen
Datenaufzeichnungen zu einem RAM zu übertragen. Die Datenaufzeichnungen
können von
einem nichtflüchtigen
RAM beim Einschalten der Vorrichtung übertragen werden. Dann können alle Daten
schnell von dem RAM abgerufen werden. Dies verbessert die Benutzerschnittstelle
sehr. Jedoch präsentiert
diese Lösung
beträchtliche
Kosten- und Raumnachteile. Zusätzlicher
RAM ist erforderlich, der die Inhalte des nichtflüchtigen
Speichers redundant speichert, nur um die Benutzerschnittstelle
zu verbessern. Es ist ein Verfahren und eine Vorrichtung zur Reduzierung
der Menge an erforderlichem RAM erforderlich, um eine schnelle Benutzerschnittstelle bei
einem Zugriff auf Daten beizubehalten, die in einem nichtflüchtigen
Speicher gespeichert sind.
-
EP-A-1076301,
eine Veröffentlichung
gemäß Artikel
54(3)EPC, offenbart ein Verfahren des Ladens von Objekten aus einem
primären
Speicher, in dem ein berechneter Hash-Index verzeichnet ist. Ein
berechneter Hash-Wert wird für
ein aufgerufenes Objekt abgeleitet und mit einem Hash-Wert in dem Hash-Index
abgeglichen. Als Antwort wird ein Objekt, das dem berechneten Hash-Wert
entspricht, in den primären
Speicher geladen. Ein derartiges Verfahren ist ungünstig, da
es nur ein Erzeugen von Zeigern zur Extraktion von Information vorsieht,
wodurch die Zeit dafür
erhöht
wird.
-
EP-A-0411691
offenbart eine Speicheranordnung mit einer Hash-Schaltung und einem
Speicher zum Speichern von Schlüsseln
und zugehörigen Daten.
Der Speicher wird in zwei Teile geteilt, der erste Teil zum Speichern
von Hash-Werten, der zweite zum Speichern der Schlüssel und
zugehörigen
Da ten. Die Schaltung arbeitet lediglich, um Zeiger zur Auswahl von
Schlüsseln
vorzusehen.
-
Zusammenfassung
der Erfindung
-
Gemäß der vorliegenden
Erfindung ist ein Verfahren für
einen schnellen Datenzugriff gemäß Anspruch
1 vorgesehen und eine Vorrichtung für einen schnellen Datenzugriff
gemäß Anspruch
8 vorgesehen.
-
Die
vorliegende Erfindung ist ein neues und verbessertes Verfahren und
eine Vorrichtung zur Reduzierung der Menge von erforderlichem RAM,
um einen schnellen Datenabruf aus einem langsameren nichtflüchtigen
Speicher zu unterstützen.
Die Verwendung von RAM statt einem nichtflüchtigen Speicher verringert
die Datensuchzeit sehr. Ein RAM-Zugriff ist um vieles schneller
als ein nichtflüchtiger Speicherzugriff
aufgrund eines Software-Overheads, der
jedes Mal durchgeführt
werden muss, wenn auf einen nichtflüchtigen Speicher zugegriffen
wird.
-
Eine
Sammlung von Datenaufzeichnungen kann in dem nichtflüchtigen
Speicher gespeichert werden. Zugriff auf die nichtflüchtigen
Datenaufzeichnungen ist aufgrund des zu einem nichtflüchtigen Speicherzugriffgehörenden Software-Overheads verlangsamt.
Die vorliegende Erfindung kann verwendet werden, um Suchen von in
einem nichtflüchtigen
Speicher gespeicherten Datenaufzeichnungen stark zu verbessern.
Wenn in einem nichtflüchtigen Speicher
gespeicherte Datenaufzeichnungen durchsucht werden müssen, sind
typischerweise zahlreiche Zugriffe auf den nichtflüchtigen
Speicher erforderlich. Die vorliegende Erfindung reduziert die Anzahl
der Zugriffe auf die nichtflüchtigen
Datenaufzeichnungen durch Speichern einer Reihe von berechneten
Bezeichnungswerten (tag values) in vorgegebenen Stellen in dem RAM.
Suchen nach in einem nichtflüchtigen
Speicher gespeicherten Datenaufzeichnungen werden dann durchgeführt durch Durchsuchen
der vorgegebenen RAM-Stellen nach entsprechenden Bezeichnungswerten,
dann Durchsuchen der nichtflüchtigen
Datenaufzeichnung, ob ein übereinstimmender
Bezeichnungswert gefunden ist. Ein Suchen nach übereinstimmenden Bezeichnungswerten
in dem RAM reduziert die typische Anzahl von nichtflüchtigen
Speicherzugriffen, die erforderlich ist, um nach einer übereinstimmenden
Datenaufzeichnung zu suchen, auf eins. Dies steht im Gegensatz zu
den zahlreichen nichtflüchtigen
Aufzeichnungsabfragen und Vergleichen, die in einer herkömmlichen
Suche von nichtflüchtigen
Datenaufzeichnungen erforderlich sind.
-
Eine
vorgegebene Anzahl von Speicherstellen wird in einem RAM entsprechend
der Anzahl von in dem nichtflüchtigen
Speicher gespeicherten Datenaufzeichnungen zugeteilt. Jede in dem
RAM zugeteilte Speicherstelle muss nicht groß genug sein, um die in dem
nichtflüchtigen
Speicher gespeicherte Datenaufzeichnung zu speichern. In dem bevorzugten
Ausführungsbeispiel
werden zwei Bytes RAM für jede
Datenaufzeichnungsstelle in dem nichtflüchtigen Speicher zugeteilt.
Die nichtflüchtige
Datenaufzeichnung kann beliebig lang sein. Eine Bezeichnungs(tag)funktion
H(x) wird definiert, um jede nichtflüchtige Aufzeichnung (record)
einem entsprechenden Bezeichnungswert zuzuordnen. Die Bezeichnungsfunktion
H(x) muss keine 1:1-Abbildung von Datenaufzeichnungen zu Bezeichnungswerten
liefern. Eine 1:1-Abbildung
von Datenaufzeichnungen zu Bezeichnungswerten minimiert die Anzahl
von nichtflüchtigen
Speicherzugriffen auf einen nichtflüchtigen Aufzeichnungszugriff
pro Datenaufzeichnungssuche.
-
Die
vorgegebenen RAM-Stellen weisen Bezeichnungswerte auf, die von den
Inhalten der entsprechenden nichtflüchtigen Datenaufzeichnungen bestimmt
werden. Wenn eine Suche nach einer bestimmten Datenaufzeichnung
erforderlich ist, wird ein Bezeichnungswert für die durchsuchte Aufzeichnung berechnet.
Wenn die durchsuchte Aufzeichnung als y bezeichnet wird, wird der
Bezeichnungswert H(y) berechnet. Der Bezeichnungswert H(y) wird
dann mit allen in den vorgegebenen RAM-Stellen gespeicherten Bezeichnungswerten
verglichen. Dieser Schritt wird aufgrund der schnellen Zugriffsfähigkeiten
von RAM sehr schnell durchgeführt.
Wenn ein übereinstimmender
Bezeichnungswert in RAM gefunden wird, wird die entsprechende nichtflüchtige Speicherstelle als
die Stelle identifiziert, die der bestimmten RAM-Stelle entspricht.
Die Inhalte der nichtflüchtige Datenaufzeichnung
werden abgerufen und mit der gesuchten Aufzeichnung verglichen.
Wenn die beiden übereinstimmen,
ist die Suche komplett. Wenn die abgerufene nichtflüchtige Datenaufzeichnung und
die gesuchte Aufzeichnung keine identische Übereinstimmung zeigen, werden
die verbleibenden Bezeichnungswerte in dem RAM nach zusätzlichen Übereinstimmungen
zu dem Bezeichnungswert durchsucht, der für die gesuchte Aufzeichnung
berechnet wurde. Die Suche dauert an, bis eine identische Übereinstimmung
gefunden ist oder das Ende der RAM-Bezeichnungswerte erreicht ist.
-
Die
vorliegende Erfindung sieht eine starke Verringerung der Zeit vor,
die gebraucht wird, um die Datenaufzeichnungen zu durchsuchen, da
der Großteil
der Suche unter Verwendung der RAM-Bezeichnungstabellen durchgeführt wird.
Auf die nichtflüchtigen
Speicheraufzeichnungen wird nur zugegriffen, wenn eine Übereinstimmung
des Bezeichnungswerts gefunden ist. Für die meisten Suchen ist nur
ein Zugriff auf den nichtflüchtigen
Speicher erforderlich. Die Zeiteinsparungen ermöglichen eine verbesserte Benutzerschnittestelle,
während
die Reduzierung des RAMs reduzierte Hardware-Kosten liefert.
-
Kurze Beschreibung
der Zeichnungen
-
Die
Merkmale, Ziele und Vorteile der vorliegenden Erfindung werden aus
der unten angeführten detaillierten
Beschreibung in Verbindung mit den Zeichnungen offensichtlicher,
in denen gleiche Bezugszeichen Entsprechendes identifizieren und
wobei:
-
1 eine
Blockdarstellung einer Speicherimplementierung in Schichten ist;
-
2A–2B Blockdarstellungen
sind, die Implementierungen einer RAM-basierten Suche von NV-Speichertabellen
zeigen; und
-
3A–3B Ablaufdiagramme
der RAM-Implementierung der vorliegenden Erfindung sind.
-
Detaillierte
Beschreibung der bevorzugten Ausführungsbeispiele
-
Speicher
und Speichervorrichtungen in jeder elektronischen Vorrichtung werden
gemäß erwarteten
Anforderungen zugeteilt. In einer elektronischen Vorrichtung, wie
einem drahtlosen Telefon, gibt es einen Speicher typischerweise
in der Form eines nichtflüchtigen
Speichers und eines RAMs. Der nichtflüchtige Speicher kann eine Kombination
aus PROM und nichtflüchtigem
sektorierten EEPROM sein. Ein Typ von nichtflüchtigem sektorierten EEPROM,
der in der Industrie bekannt ist, ist ein FLASH-Speicher.
-
Einer
der Vorteile einer Verwendung eines FLASH-Speichers ist seine Fähigkeit,
elektronisch gelöscht
und wiederbeschrieben werden zu können. Einer der Nachteile eines
FLASH-Speichers ist, wie oben diskutiert, die Unfähigkeit,
Daten an Ort und Stelle zu aktualisieren. Ganze Sektoren müssen zur gleichen
Zeit gelöscht
werden. Um eine effiziente Verwendung des FLASH-Speicherraums zu
maximieren, werden die in FLASH gespeicherten Daten nicht speicheradressiert
(memory mapped) zu einer bestimmten Stelle, sondern sie werden unter
Verwendung eines Datei-basierten Speichersystems gespeichert. Im
Gegensatz dazu können
in dem RAM gespeicherte Daten an Ort und Stelle aktualisiert werden
und können
aufgrunddessen einem Speicherplan zugewiesen werden.
-
1 zeigt
eine Blockdarstellung der Speicherstruktur 20 einer elektronischen
Vorrichtung, wie einem drahtlosen Telefon 10. Alle in dem
Speicher 20 gespeicherten Daten werden in einer Datenbank 110 verwaltet.
Daten, die flüchtig
oder vorübergehend sind,
werden in einem RAM 120 gespeichert. Daten des RAMs 120 kann
ein Speicherplan zugewiesen werden, da Daten des RAMs 120 an
der Stelle aktualisiert werden können.
Jedoch werden andere Teile von Daten, die variierende Längen oder
Positionen haben, unter Verwendung eines Dateisystems 130 verwaltet.
Das Dateisystem 130 ist eine Software-Routine, die das
Format, die Position und die Größe von Datei-basierten
Daten bestimmt. Eine der Vorrichtungen, welche die Datei-basierte Struktur
für ihre
Daten verwendet, ist ein nichtflüchtiger
Speicher 140. Alle in dem nichtflüchtigen Speicher 140 gespeicherten
Daten müssen
zuerst in dem Dateisystem 130 formatiert werden. Ein Anordnen
des nichtflüchtigen
Speichers 140 unter dem Dateisystem 130 erzeugt
eine weitere Verzögerung
beim Zugriff auf Daten, die in dem nichtflüchtigen Speicher 140 gespeichert
sind. Die Verzögerung
beim Zugriff auf die in dem nichtflüchtigen Speicher 140 gespeicherten
Daten kann unerwünschte
Verzögerungen
erzeugen, wo Daten aus dem nichtflüchtigen Speicher als Teil einer
Benutzerschnittstelle abgerufen werden müssen. Ein Beispiel einer Verwendung
von allgemein in einem drahtlosen Telefon verfügbaren Daten ist die Suche
eines von dem Benutzer erzeugten Telefonbuchs.
-
Drahtlose
Telefone haben typischerweise die Fähigkeit, Benutzer-erzeugte
Telefonbucheinträge
zu speichern. Ein Benutzer kann typischerweise über einhundert Telefonnummern
und entsprechende Namen in einem elektronischen Telefonbuch haben,
das in dem nichtflüchtigen
Speicher gespeichert ist. Die tatsächliche Anzahl von Einträgen wird
nur von der Menge von Speicherraum begrenzt, den ein Gestalter dem
Telefonbuch zuteilt. Die Telefonnummern und Namen stellen jeweils
Datenaufzeichnungen (Daten-Records) dar, die in dem nichtflüchtigen
Speicher gespeichert sind. Jede Telefonnummer kann bis zu zweiunddreißig Zeichen
lang sein. Diese Länge ermöglicht,
dass Vorwahlen, interne Telefondurchwahlen, Zugriffscodes und persönliche Identifikationscodes
für bestimmte
Nummern automatisch gewählt
werden können.
Jede Anzahl von Zeichen kann für
einen Namen zugeteilt werden, aber zur Einfachheit wird eine Länge von
zweiunddreißig
Zeichen angenommen. Wenn angenommen wird, dass 512 kombinierte Telefonnummer-
und Namenseinträge möglich sind,
dann müssen
16 K von nichtflüchtigem Speicher
zugeteilt werden. Wenn ein Benutzer eine Telefonnummer oder einen
Namen eingibt und wünscht,
das Telefonbuch nach der entsprechenden gespeicherten Information
zu durchsuchen, müssen die
in dem nichtflüchtigem
Speicher gespeicherten Datenaufzeichnungen durchsucht werden.
-
In
dem nichtflüchtigem
Speicher gespeicherte Datenaufzeichnungen können nur durch das Dateisystem 130 gelesen
werden. Das Dateisystem 130 ist eine Ebene unter der Datenbank 110.
Die mehreren Ebenen auf dem Zugriff zu dem nichtflüchtigen
Speicher erzeugen eine große
Verzögerung
für jeden
Zugriff auf in dem nichtflüchtigen
Speicher gespeicherte Datenaufzeichnungen. Während einer herkömmlichen
Suchroutine wird eine Datenaufzeichnung aus dem nichtflüchtigen
Speicher abgerufen und mit den Eingabedaten verglichen. Wenn die beiden übereinstimmen,
werden die der Übereinstimmung
entsprechenden Datenaufzeichnungen gefunden. Wenn die beiden nicht übereinstimmen,
wird die erste abgerufene Datenaufzeichnung verworfen und die nächste Datenaufzeichnung
wird aus dem nichtflüchtigen
Speicher abgerufen. Ein Abruf von Datenaufzeichnungen aus dem nichtflüchtigen
Speicher und ein Vergleich mit den Eingabedaten wird fortgesetzt,
bis eine Übereinstimmung
gefunden wird oder alle Datenaufzeichnungen in dem nichtflüchtigen Speicher
durchsucht sind. Die mehreren Ebenen, die vor einem Abruf von Datenaufzeichnungen
aus dem nichtflüchtigen
Speicher durchlaufen werden müssen,
tragen zu Verzögerungen
bei. Wenn Eingabedaten mit einer großen Anzahl von in dem nichtflüchtigen
Speicher gespeicherten Inhalten verglichen werden müssen, ist
die Verzögerung
für eine
Benutzerschnittstelle übermäßig lange.
Von einem Benutzer, der einen Namen oder eine Telefonnummer eingibt und
die gespeicherte Information abzufragen wünscht, die sich auf diesen
Eintrag bezieht, kann nicht erwartet werden, für lange Zeitdauern zu warten.
Die Benutzerschnittstelle muss für
den Benutzer nahtlos und unmittelbar erscheinen.
-
Eine
Art, die Geschwindigkeit zu erhöhen, die
mit einer Suche der Datenaufzeichnungen in dem nichtflüchtigen
Speicher zusammenhängt,
liegt darin, die Suche in dem RAM durchzuführen. Zugriffszeiten auf in
dem RAM gespeicherte Datenaufzeichnungen sind um Größenordnungen
schneller als die Zugriffszeiten, um die entsprechende Datenaufzeichnung aus
dem nicht flüchtigen
Speicher abzurufen. Der Unterschied bei den Zugriffszeiten ist dem
Dateisystem zuschreibbar. RAM erfordert nicht, dass Datenaufzeichnungen
formatiert und auf sie unter dem Dateisystem zugegriffen wird. Um
die Suche in dem RAM statt in dem nichtflüchtigen Speicher durchzuführen, können alle
Datenaufzeichnungen des nichtflüchtigen
Speichers zu dem RAM übertragen
werden. Dann sind, wenn eine Suche notwendig ist, alle Datenaufzeichnungen
in dem RAM verfügbar.
Diese Implementierung hat den Nachteil der Verwendung einer großen Menge
an RAM nur dafür,
in dem nichtflüchtigen
Speicher verfügbare
Datenaufzeichnungen redundant zu speichern. Die gesteigerten Kosten und
die physikalische Größe von zusätzlichem
RAM machen diese Lösung
weniger als ideal zur Implementierung in einer tragbaren elektronischen
Vorrichtung, wie einem drahtlosen Telefon.
-
Eine
alternative Implementierung, die Suchzeiten von in dem nichtflüchtigen
Speicher gespeicherte Datenaufzeichnungen verbessert, aber nicht zur
Folge hat, dass die gesamten Inhalte des nichtflüchtigen Speichers in dem RAM
gespeichert werden müssen,
wird in 2A dargestellt. In 2A wird
der RAM nicht verwendet, um die in dem nichtflüchtigen Speicher gespeicherten
Datenaufzeichnungen zu speichern. Stattdessen werden RAM-Hash-Bins
(Behältnisse) 220 in
dem RAM definiert. Jede der ursprünglichen nichtflüchtigen
(NV – nonvolatile)
Aufzeichnungen 210 wird in eine Hash-Funktion eingegeben.
Ein Zeiger zu der eingegebenen NV-Aufzeichnung 210 wird
in dem RAM-Hash-Bin 220 entsprechend der ausgegebenen Hash-Zahl
gespeichert. Die Hash-Funktion muss keine 1:1-Abbildung der NV-Aufzeichnung 210 zu dem
RAM-Hash-Bin 220 vorsehen. Jedoch gleicht die Wahl einer
Hash-Funktion die Anzahl von RAM-Hash-Bin 220 gegenüber einer
Zugriffsgeschwindigkeit aus. Je eindeutiger die Hash-Funktion-Abbildung
ist, desto größer ist
der benötigte
Raum für
den RAM-Hash-Bin 220. Der Vorteil einer eindeutigen Hash-Funktion-Abbildung
ist die reduzierte Anzahl von Zugriffen auf den nichtflüchtigen
Speicher bei einer Durchsuchung der NV-Aufzeichnungen 210 nach einer Übereinstimmung.
-
Die
in 2A gezeigte Implementierung wird wie folgt durchgeführt. Bei
Initialisierung der elektronischen Vorrichtung wird jede der NV-Aufzeichnungen 210 in
eine Hash-Funktion eingegeben. Eine Initialisierung kann als jedes
Ereignis für
eine elektronische Vorrichtung definiert werden. Eine Initialisierung
in einem drahtlosen Telefon wird als Einschalten definiert. Ein
Beispiel einer Hash-Funktion wird im Folgenden gezeigt.
-
-
In
der Gleichung stellt xi das i-te Byte in
der bestimmten in die Hash-Funktion eingegebene NV-Datenaufzeichnung
dar. Das yi stellt die Ausgabe der Hash-Funktion
nach der Verarbeitung von i Bytes in der bestimmten NV-Datenaufzeichnung
dar. Die Anzahl N stellt die Anzahl von Bytes dar, die jeder NV-Datenaufzeichnungseintrag
aufweist. Jede NV-Datenaufzeichnung ist in dem oben beschriebenen
Beispiel zweiunddreißig
Bytes lang. Für
die in dem oben beschriebenen Beispiel beschriebene Datenaufzeichnungslänge ist
N = 32. Die Berechnung wird unter Verwendung von ganzzahliger Mathematik für eine tatsächliche
Implementierung durchgeführt. Es
ist zu sehen, dass die Abbildung von Eingabe zu Ausgabe nicht 1:1
ist, wenn eine ganzzahlige Mathematik verwendet wird.
-
Die
Ausgabe der Hash-Funktion fällt
in einen vordefinierten RAM-Hash-Bin 220. Ein Zeiger 222 zu der
NV-Aufzeichnung, die als die Eingabe in die Hash-Funktion verwendet
wurde, wird in dem RAM-Hash-Bin 220 gespeichert. Der Zeiger
verwendet weniger Speicherraum zur Speicherung als die Datenaufzeichnung.
Typischerweise werden dem Zeiger vier Bytes zugeteilt. Für eine nichtflüchtige Datenaufzeichnung
mit 512 Einträgen
sind 2 K an Speicher erforderlich, um alle Zeiger zu speichern.
Dies liefert eine mögliche
Einsparung von RAM-Speicherraum.
-
Jeder
Hash-Bin muss die Fähigkeit
aufweisen, mehr als einen Zeiger 222 zu speichern. Dies
ist erforderlich, da die Hash-Funktion keine 1:1-Abbildung von Eingabe
zu Ausgabe liefert. Das Fehlen einer 1:1-Abbildung in der Hash-Funktion
erzeugt Probleme mit einer RAM-Speicherzuteilung. Eine große Anzahl
von Hash-Bins muss definiert werden, um sicherzustellen, dass jeder
Hash-Bin nur einen Zeiger aufweisen wird. Wenn eine geringere Anzahl
von Hash-Bins definiert wird, besteht die Wahrscheinlichkeit, dass
jeder Hash-Bin eine Anzahl von Zeigern speichern muss.
-
Ein
Konstrukteur kann sicherstellen, dass jeder Hash-Bin nur einen Zeiger
aufweist, wenn 64 K an Hash-Bins definiert werden. Da nur 2 K an
Zeigern erforderlich sind, um alle Datenaufzeichnungen zu identifizieren,
ist es offensichtlich, dass die Mehrzahl der Hash-Bins keine Zeiger
aufweisen wird. Eine Zuteilung von 64 K Hash-Bins erfordert eindeutig
mehr RAM-Raum als ein Speichern aller nichtflüchtigen Datenaufzeichnungen
in den RAM erfordert. Somit ist diese Lösung nicht brauchbar. Um die
RAM-Anforderung zu reduzieren, teilt eine Gestaltung weniger 64
K Hash-Bins zu. Jedoch erhöht
eine Reduzierung der Anzahl von Hash-Bins durchaus die Wahrscheinlichkeit,
dass ein Hash-Bin mehr als einen Zeigerwert enthält.
-
Um
eine Übereinstimmung
einer Datenaufzeichnung zu eingegeben Daten zu finden, werden die
eingegebenen Daten zuerst durch die Hash-Funktion geleitet. Die
Ausgabe der Hash-Funktion lenkt die Suchroutine dann zu einem bestimmten Hash-Bin.
Wenn in dem Hash-Bin kein Zeiger gespeichert ist, dann wird keine Übereinstimmung
in den nichtflüchtigen
Datenaufzeichnungen gefunden. Dies reduziert die Suchzeit beträchtlich,
wenn keine Übereinstimmung
zu finden ist. In der herkömmlichen
Suche müssten
alle Datenaufzeichnungen in dem nichtflüchtigen Speicher abgerufen
und mit der Eingabe verglichen werden, bevor festgestellt wird,
dass keine Übereinstimmung
existiert. Unter Verwendung des Hash-Bin-Verfahrens müssen Zugriffe
auf den nichtflüchtigen
Speicher nicht vor einer Feststellung stattfinden, dass keine Übereinstimmungen
existieren.
-
Wenn
in dem Hash-Bin Zeiger gespeichert sind, wird der erste Zeiger aus
dem Hash-Bin abgerufen und die NV-Aufzeichnung, auf die der Zeiger ver weist,
wird abgerufen. Dann wird ein vollständiger Vergleich zwischen der
Eingabe und der abgerufenen Datenaufzeichnung durchgeführt. Wenn
die beiden identisch sind, ist eine Übereinstimmung gefunden und
die verbleibenden zugehörigen
Datenaufzeichnungen können
abgerufen werden. Wenn die abgerufene Datenaufzeichnung nicht übereinstimmt, dann
muss der nächste
Zeiger, wenn vorhanden, in dem Hash-Bin abgerufen werden. Der Vergleich
wird durchgeführt
und der Abruf von Zeigern aus dem Hash-Bin wiederholt, bis entweder eine Übereinstimmung
gefunden ist oder alle nichtflüchtigen
Datenaufzeichnungen verglichen wurden, auf die von den Hash-Bin-Zeigern
verwiesen wird.
-
In
der vorherigen Implementierung gibt es die Möglichkeit von zahlreichen Zugriffen
auf den nichtflüchtigen
Speicher. Die Anzahl von Zugriffen auf den nichtflüchtigen
Speicher hängt
ab von der Anzahl von in jedem Hash-Bin gespeicherten Zeigern. Die
Anzahl der erforderlichen Hash-Bins steht in Beziehung zu der Hash-Funktion.
Eine Erhöhung der
Anzahl von eindeutigen Hash-Bins reduziert die Anzahl von nichtflüchtigen
Speicherzugriffen. Die Reduzierung der Anzahl von nichtflüchtigen
Speicherzugriffen führt
zu mehr erforderlichem RAM.
-
Die
vorliegende Erfindung verwendet eine Implementierung, die reduzierte
Suchzeiten für
Datenaufzeichnungen und verringerte RAM-Anforderungen vorsieht.
Eine Blockdarstellung der vorliegenden Erfindung wird in 2B gezeigt.
In der vorliegenden Erfindung weisen NV-Aufzeichnungen 210 eine
Sammlung von Datenaufzeichnungen auf, wie oben beschrieben. Statt
einer Definition von Hash-Bins in dem RAM wird jedoch ein Speicherblock
in dem RAM für
Bezeichnungswerte 230 zugeteilt. Wie in dem obigen Beispiel
beschrieben, ist jede in dem nichtflüchtigen Speicher gespeicherte
Datenaufzeichnung zweiunddreißig
Zeichen lang. Es gibt 512 verfügbare
Aufzeichnungen, die in dem nichtflüchtigen Speicher zugeteilt
sind. Dies entspricht 16 K an Speicher. Die vorliegende Erfindung
teilt zwei Bytes an RAM-Raum für
jede Datenaufzeichnung in dem nichtflüchtigen Speicher zu. Um 512
Datenaufzeichnungen aufzunehmen, muss 1 K Bytes an RAM zugeteilt
werden.
-
Da
die Anzahl von Bytes an RAM, die jeder nichtflüchtigen Speicheraufzeichnung
zugeteilt wird, konstant ist, können
die RAM-Adressstellen den entsprechenden nichtflüchtigen Datenaufzeichnung zugewiesen
werden. Zum Beispiel würde
die erste nichtflüchtige
Datenaufzeichnung den ersten zwei in dem RAM zugeteilten Bytes entsprechen.
-
Die
zwei Bytes an RAM, die jeder nichtflüchtigen Datenaufzeichnung zugeteilt
werden, sind nicht ausreichend, um die gesamte Datenaufzeichnung
zu speichern. Stattdessen speichern die zwei Bytes einen Bezeichnungswert,
welcher der Datenaufzeichnung entspricht. Der Bezeichnungswert wird
unter Verwendung derselben oben beschriebenen Hash-Funktion erzeugt.
Der Bezeichnungswert, der jeder Datenaufzeichnung in dem nichtflüchtigen Speicher
entspricht, wird berechnet und an einer vorgegebenen Stelle in dem
RAM gespeichert. Die vorliegende Erfindung minimiert somit die zugeteilte Menge
an RAM. Zwei Bytes in dem RAM werden für jede nichtflüchtige Datenaufzeichnung
zugeteilt und es gibt 512 Datenaufzeichnungen. Somit muss nur 1 K
an RAM zugeteilt werden.
-
Wenn
ein Eingabewert mit den Inhalten der Datenaufzeichnungen des nichtflüchtigen
Speichers verglichen werden muss, wird der eingegebene Wert zuerst
durch die Hash-Funktion geleitet. Dann wird der ausgegebene Hash-Wert mit den in dem
RAM gespeicherten Bezeichnungswerten verglichen. Wenn ein übereinstimmender
Bezeichnungswert gefunden wird, werden die Inhalte des nichtflüchtigen Speichers
entsprechend dieser Bezeichnungswertstelle abgerufen und mit dem
ursprünglichen
eingegebenen Wert verglichen. Wenn die beiden identisch sind, ist
eine Übereinstimmung
gefunden. Ansonsten fährt
die Suche durch die RAM-Bezeichnungswerte fort, bis entweder ein
anderer Bezeichnungswert eine übereinstimmende
Datenaufzeichnung ergibt oder das Ende des Bezeichnungswertverzeichnisses
erreicht ist. Auf diese Weise wird der Großteil der Suche in dem RAM
durchgeführt
und das einzige Mal, wann auf den nichtflüchtigen Speicher zugegriffen
wird, ist, wenn der berechnete eingegebene Bezeichnungswert mit
einem der vorher gespeicherten Bezeichnungswerte übereinstimmt. Wenn
die Hash-Funktion keine große
Anzahl von doppelten Bezeichnungswerten erzeugt, ist die Anzahl
von Zugriffen auf den nichtflüchtigen
Speicher minimiert. Unter Verwendung der oben beschriebenen Hash-Funktion
wird die Anzahl von Zugriffen auf den nichtflüchtigen Speicher auf eine für 99% der
Datensuchen minimiert.
-
3A zeigt
ein Ablaufdiagramm der vorliegenden Erfindung. Die Routine startet
in Zustand 301. Die Routine wird jedes Mal initialisiert,
wenn die Vorrichtung angeschaltet wird. In einem drahtlosen Telefon
startet 301 die Routine, wenn der Benutzer das Telefon
anschaltet. Die Routine geht dann zu Zustand 304, wo alle
Einträge
in den nichtflüchtigen
(NV – nonvolatile)
Speicherdatenaufzeichnungen gelesen werden. Dann werden in Zustand 308 die
Bezeichnungswerte für
die NV-Speichereinträge
berechnet. Der Bezeichnungswert für jeden NV-Speichereintrag wird
unter Verwendung einer Funktion berechnet, wie der oben beschriebenen
Hash-Funktion. Jeder Bezeichnungswert erfordert zwei Bytes.
-
Die
Routine geht dann zu Zustand 310, wo die berechneten Bezeichnungswerte
in vorgegebenen RAM-Stellen gespeichert werden. Jede RAM-Stelle
entspricht einem Eintrag in der Sammlung der NV-Speicherdatenaufzeichnungen.
Zum Beispiel ist der sechste Eintrag in der RAM-Bezeichnungswerttabelle
eine absolute Adresse, die dem sechsten Eintrag in der NV-Speicherdatenaufzeichnung
unabhängig
davon entspricht, wo in dem NV-Speicher
sich der Eintrag tatsächlich
befindet.
-
Nachdem
die Bezeichnungs- bzw. Tagwerte in dem RAM gespeichert wurden, kann
jede Suche der Datenaufzeichnungen hauptsächlich in dem RAM durchgeführt werden.
Der Zustand 320 nimmt an, dass ein Eintrag „y" mit den Inhalten
der Datenaufzeichnungen verglichen werden muss. In einer elektronischen
Vorrichtung, wie einem drahtlosen Telefon, kann der Eintrag „y" einer Telefonnummer
entsprechen, die von dem Benutzer eingegeben wird. Die Inhalte der
Datenaufzeichnungen entsprechen Namen und Information, die zu einer
bestimmten Telefonnummer gehören.
Ein Benutzer kann eine Telefonnummer eingeben und wünschen,
alle früher
gespeicherte Information abzurufen, die diese Nummer betrifft.
-
Der
erste Schritt der Suche wird in Zustand 322 erreicht, wo
der Bezeichnungswert, der dem Eintrag „y" entspricht, berechnet wird. Bei Zustand 324 wird
ein in der Suche verwendeter Indexzähler initialisiert. Das Ablaufdiagramm
geht als nächstes
weiter zu Punkt 330. Der Punkt 330 ist kein funktionales
Element des Ablaufdiagramms und ist nur vorhanden, um die Zustände des
Ablaufdiagramms von 3A mit den Zuständen des
Ablaufdiagramms von 3B zu verbinden.
-
3B beginnt
mit Punkt 330, der das Ablaufdiagramm von 3A mit
dem von 3B verbindet. Von dem Punkt 330 geht
die Routine zu Zustand 340 weiter. Bei Zustand 340 ruft
die Routine aus dem RAM den vorher gespeicherten Bezeichnungswert
ab, welcher der von dem Indexzähler identifizierten
Stelle entspricht. Die Routine geht dann zu Zustand 344,
wo der dem Eintrag „y" entsprechende Bezeichnungswert
mit dem abgerufenen RAM-Bezeichnungswert
verglichen wird. Die Abruf- und Vergleichsoperation findet sehr
schnell statt, da die Bezeichnungswerte nur zwei Bytes lang sind
und sich alle Werte in dem RAM befinden. Wenn die Routine feststellt,
dass die beiden Bezeichnungswerte nicht übereinstimmen, geht die Routine
zu Zustand 354 weiter, um zu überprüfen, ob es weitere Bezeichnungseinträge in dem
RAM gibt, die noch mit dem eingegebenen Bezeichnungswert verglichen
werden müssen.
Wenn in Zustand 354 die Routine weitere Bezeichnungswerte
in dem RAM identifiziert, die nicht verglichen wurden, geht die
Routine zu Zustand 358, um den Indexzähler zu inkrementieren. Nachdem
der Indexzähler
inkrementiert ist, geht die Routine zurück zu Zustand 340,
um den nächsten
von dem Indexzähler
identifizierten Bezeichnungswert abzurufen.
-
Wenn
stattdessen die Routine in Zustand 354 feststellt, dass
keine weiteren Bezeichnungswerte in dem RAM vorhanden sind, die
noch nicht mit dem Bezeichnungswert des Eintrags verglichen wurden,
geht die Routine zu Zu stand 362, wo die Routine schließt, dass
keine Datenaufzeichnung in dem Speicher existiert, die mit dem eingegebenen
Eintrag übereinstimmt.
Die Routine ist dann beendet. Wenn keine Bezeichnungswerte mit dem
Bezeichnungswert für
den eingegebenen Eintrag übereinstimmen, ist
notwendigerweise keine Datenaufzeichnung in dem nichtflüchtigen
Speicher gespeichert, die mit dem eingegebenen Eintrag übereinstimmt.
In der vorliegenden Erfindung gibt es für diese Bedingung keinen Zugriff
auf den nichtflüchtigen
Speicher. Somit kann die Suche feststellen, dass keine nichtflüchtigen
Datenaufzeichnungen übereinstimmen,
ohne jemals auf den nichtflüchtigen
Speicher zuzugreifen.
-
Wenn
bei Zustand 344 die Routine stattdessen feststellt, dass
der abgerufene Bezeichnungswert mit dem Bezeichnungswert des Eintrags übereinstimmt,
geht die Routine zu Zustand 348. Bei Zustand 348 ruft
die Routine aus dem nichtflüchtigen Speicher
die Datenaufzeichnung ab, die dem übereinstimmenden Bezeichnungswert
entspricht, der vorher aus dem RAM abgerufen wurde. Somit wird auf
die in dem nichtflüchtigen
Speicher gespeicherten Datenaufzeichnungen nur zugegriffen, wenn
der Bezeichnungswert für
diese Datenaufzeichnung mit dem Bezeichnungswert eines eingegebenen
Eintrags übereinstimmt.
-
Sobald
die tatsächliche
Datenaufzeichnung aus dem nichtflüchtigen Speicher abgerufen
ist, geht die Routine zu Zustand 350, um einen Vergleich
der vollständigen
Aufzeichnungen durchzuführen.
Der Vergleich der vollständigen
Aufzeichnungen ist erforderlich, da die Hash-Funktion keine 1:1-Abbildung von der
Datenaufzeichnung zu dem Bezeichnungswert vorsieht. Obwohl der eingegebene
Eintrag und die nichtflüchtige
Datenaufzeichnung dieselben Bezeichnungswerte erzeugen können, müssen die
tatsächlichen
Datenaufzeichnungen verglichen werden, um eine Übereinstimmung tatsächlich zu
bestätigen.
-
Wenn
die abgerufene nichtflüchtige
Datenaufzeichnung mit dem eingegebenen Eintrag übereinstimmt, wurde eine erfolgreiche
Suche durchgeführt.
Es gibt keinen weiteren Grund, die Suchroutine fortzusetzen, somit
endet die Routine und erwartet einen neuen eingegebenen Eintrag
zur Suche.
-
Wenn
bei Zustand 350 die Routine feststellt, dass die abgerufene
nichtflüchtige
Speicherdatenaufzeichnung nicht mit dem eingegebenen Eintrag übereinstimmt,
geht die Routine zu Zustand 354 wie oben beschrieben, um
zu bestimmen, ob alle RAM-Bezeichnungswerte durchsucht wurden oder nicht.
-
Die
Ablaufdiagramme in den 3A und 3B zeigen,
wie eine minimale Menge von RAM zur Unterstützung bei einer schnellen Suche
von Datenaufzeichnungen, die in einem langsamen nichtflüchtigen
Speicher gespeichert sind, benutzt werden kann. Anstatt die gesamten
Inhalte der Datenaufzeichnungen in einem nichtflüchtigen Speicher in den RAM
zu laden, wird nur ein Satz von Bezeichnungswerten in den RAM geladen.
Wenn die Datenaufzeichnungen nach einem eingegebenen Eintrag durchsucht
werden müssen,
wird zuerst der eingegebene Eintrag verwendet, um den Bezeichnungswert zu
erzeugen, unter Verwendung derselben Hash-Funktion, die zuvor verwendet
wurde, um in dem RAM gespeicherten Bezeichnungswerte zu erzeugen.
Dann wird der Bezeichnungswert des eingegebenen Eintrags nacheinander
mit den in dem RAM gespeicherten Bezeichnungswerten verglichen. Wenn
ein übereinstimmender
Bezeichnungswert gefunden wird, wird die entsprechende Datenaufzeichnung
aus dem nichtflüchtigen
Speicher abgerufen. Somit wird auf den nichtflüchtigen Speicher nur zugegriffen,
wenn es eine hohe Wahrscheinlichkeit zum Abruf einer übereinstimmenden
Datenaufzeichnung gibt. Die aus dem nichtflüchtigen Speicher abgerufene
Datenaufzeichnung wird dann mit dem eingegebenen Eintrag verglichen.
Es gibt eine hohe Wahrscheinlichkeit zur Erzielung einer Übereinstimmung, da
die beiden Aufzeichnungen denselben Bezeichnungswert erzeugen. Wenn
jedoch die abgerufene Datenaufzeichnung und der eingegebene Eintrag nicht übereinstimmen,
wird der Rest der RAM-Bezeichnungswerttabelle nach anderen Bezeichnungswerten
durchsucht, die mit dem Bezeichnungswert des eingegebenen Eintrags übereinstimmen.
Da die Hash-Funktion fast eine 1:1-Abbildung von eingegebenen Wert zu Bezeichnungswert
vorsieht, wird auf den nichtflüchtigen
Speicher typischerweise nur einmal pro Suche zugegriffen. Somit
wird die Anzahl von Zugriffen auf den nichtflüchtigen Speicher minimiert, während die
Menge von erforderlichem RAM zur Implementierung der Erfindung minimiert
wird.
-
Die
obige Beschreibung der bevorzugten Ausführungsbeispiele ist vorgesehen,
um Fachleuten zu ermöglichen,
die vorliegende Erfindung herzustellen oder zu verwenden. Die verschiedenen
Modifikationen zu diesen Ausführungsbeispielen
sind für Fachleute
offensichtlich und die hier definierten generischen Prinzipien können auf
andere Ausführungsbeispiele
ohne die Verwendung der Erfindungsgabe angewendet werden. Somit
soll die vorliegende Erfindung nicht auf die hier gezeigten Ausführungsbeispiele,
sondern nur durch den Umfang der angehängten Ansprüche beschränkt sein.