PatentDe  


Dokumentenidentifikation DE69525294T2 19.09.2002
EP-Veröffentlichungsnummer 0696772
Titel Registerdatei mit Multi-tasking Unterstützung
Anmelder Conexant Systems, Inc., Newport Beach, Calif., US
Erfinder Watson, George A., Fullerton, California 92635, US
Vertreter WAGNER & GEYER Partnerschaft Patent- und Rechtsanwälte, 80538 München
DE-Aktenzeichen 69525294
Vertragsstaaten DE, FR, GB
Sprache des Dokument EN
EP-Anmeldetag 04.08.1995
EP-Aktenzeichen 951123058
EP-Offenlegungsdatum 14.02.1996
EP date of grant 06.02.2002
Veröffentlichungstag im Patentblatt 19.09.2002
IPC-Hauptklasse G06F 9/46

Beschreibung[de]
HINTERGRUND DER ERFINDUNG

Die vorliegende Erfindung bezieht sich auf die Struktur und den Betrieb von Schnellzugriff-Speicher für eine arithmetisch logische Einheit (arithmetic logic unit) (ALU) für einen Universal- oder Spezialcomputer. Insbesondere bezieht sich die Erfindung auf die Steuerung eines Register-Files, welches das temporäre Speichern von Operanden für den Zugriff durch von der ALU innerhalb einer bestimmten Aufgabe (Task) oder eines bestimmten Kontext ausgeführte Befehle vorsieht. Die Erfindung ist insbesondere, aber nicht ausschließlich, für die Verwendung in einem digitalen Signalprozessor für spezielle Anwendungen mit einer Reduced Instruction Set Computer (Computer mit reduziertem Befehlssatz) (RISC) Architektur geeignet.

Jedesmal, wenn die ALU einen Befehl ausführt, muß sie im allgemeinen auf einen Operanden zugreifen, der in einem Speicher gespeichert ist. Außerdem werden die Ergebnisse vieler Berechnungen entweder temporär oder permanent in einem Speicher gespeichert. Praktisch jede arithmetische Berechnung, die durch die arithmetisch logische Einheit des Computers ausgeführt wird, erfordert Speicherzugriffe. Daher ist die Geschwindigkeit, mit der auf einen solchen Speicher zugegriffen wird, wichtig für die Gesamtgeschwindigkeit des Betriebs des Computers.

Register-Files werden verwendet, um schnellen Zugriff auf die benötigten Operanden zu erlauben und das temporäre Speichern von Daten während der Berechnungen vorzusehen. Diese Register-Files umfassen Schnellzugriff- Speicher, in welchem Daten aus einem Abschnitt des Hauptspeichers des Computers gespeichert werden können, während eine bestimmte Aufgabe (Task) oder ein bestimmtes Unterprogramm bzw. Subroutine ausgeführt wird.

Der Zugriff auf ein Register-File ist schneller als der Zugriff auf den Hauptspeicher, teilweise weil das Register-File weniger Speicherplätze hat als die Hauptspeichereinheit. Daher liest und dekodiert der Adressierungsmechanismus viel kürzere Adressen, als dies erforderlich wäre, um die Hauptspeichereinheit zu adressieren.

Zu Beginn einer bestimmten Aufgabe (Task) oder Subroutine werden die mit dieser bestimmten Subroutine assoziierten Daten aus dem Hauptspeicher in das Register-File geladen. Anschließend, wenn der Computer die Subroutine beendet hat, werden die Daten, inklusive der Daten, die während der Ausführung der Aufgabe oder Subroutine geändert oder hinzugefügt wurden, von dem Register-File zurück in den Hauptspeicher transferiert. Das Register-File kann nun mit Daten, die mit der nächsten Subroutine assoziiert sind, gefüllt werden, die von der arithmetisch logischen Einheit benötigt oder durch diese ausgeführt werden.

Dieses Erfordernis, jedesmal, wenn eine andere Subroutine referenziert wird, Daten zwischen dem Register-File und dem Hauptspeicher hin und zurück zu transferieren, verlangsamt den Prozeß des Umschaltens zwischen Aufgaben (Tasks) oder Subroutinen. Daher wurde vorgeschlagen, ein Register-File zu verwenden, welches in zwei Abschnitte aufgeteilt ist, so daß Daten, die mit zwei Subroutinen assoziiert sind, gleichzeitig in dem Register-File gespeichert werden können. Wie allgemein vorgeschlagen, hat jeder Abschnitt eines geteilten Register-Files eine feste Größe.

In einem Computer konventioneller Architektur kann der Transfer von Daten zwischen dem Hauptspeicher und dem Register-File durch eine Speicherverwaltungseinheit (Memory Management Unit) oder eine andere Vorrichtung zur Speichersteuerung gesteuert werden.

Die Reduced Instruction Set Computer (RISC) Architektur ist als ein Mechanismus bekannt geworden, um die Ausführung von Befehlen durch den Prozessor eines Computers zu rationalisieren. In einer solchen Umgebung kann die Geschwindigkeit des Zugriffs auf den Speicher entscheidender sein als in Computern mit einer Standardarchitektur.

Eine Vorrichtung mit RISC Architektur verwendet spezielle Lade- und Speicherbefehle, um Daten zwischen dem Register-File und dem Hauptspeicher zu verschieben. Darüber hinaus wird ein spezieller Register-zu-Register Transferbefehl verwendet, um Operanden zwischen Registern des Register- Files zu verschieben.

Einer RISC Controller oder Prozessor kann allgemein Befehle in Übereinstimmung mit der in Fig. 1a dargestellten Ausführungsleitung (Execution Pipe) ausführen. Die vier Stufen der RISC Ausführungsleitung sind Befehlsaufnahme (Instruction Fetch), Operandenaufnahme (Operand Fetch) aus den Registern, Ausführung in der arithmetisch logischen Einheit (ALU) und Zugriff auf den Datenspeicher (lesen oder schreiben).

Die erste Stufe der Ausführungsleitung (Execution Pipe) ist die Befehlsaufnahme (Instruction Fetch). Die benötigten Operanden werden aus den Registern während der zweiten Stufe aufgenommen. Addierer, Shifter, und andere Operationen werden während Stufe 3 ausgeführt. Zugriff auf den Datenspeicher tritt normalerweise während Stufe 4 und später auf, falls zum Vollenden des Zugriffs erforderlich. Die RISC Befehlsausführungsleitung (Instruction Execution Pipe) kann ebenfalls fünf Stufen umfassen, um mehr Zeit für ALU Operationen und Speicherzugriff zu gewähren. Andere Operationen können während der Stufen 3 und später ausgeführt werden, abhängig vom ausgeführten Befehl.

Eine alternative Befehlsleitung (Instruction Pipe) für Multiplizieroperationen ist in Fig. 1b dargestellt. Die Multiplizier- und Addieroperation kann sich von Stufe 3 in den ersten Teil von Stufe 4 erstrecken, wobei die Akkumulierfunktion während des letzten Teils der Stufe 4 stattfindet.

Im allgemeinen wird mit jedem Takt ein Befehl gestartet, der sich durch die RISC Ausführungsleitung (Execution Pipe) mit einer Geschwindigkeit von einer Stufe pro Befehlszyklus bewegt. Falls ein Operand nicht zur erforderlichen Zeit verfügbar ist, kann eine Hardwaresperre (Hardware Interlock) die Ausführung des Befehls aufhalten, der diesen Operanden benötigt. Die Hardwaresperre kann außerdem die Befehlsausführung aufhalten, falls ein vorhergehender Befehl nicht ausreichend abgeschlossen ist.

Es sei auf das Dokument EP-0517 282 A1 verwiesen, welches ein Computersystem offenbart, das mit einer großen Zahl von Registern ausgestattet ist, die eine Zugriffszeit aufweisen, die geringer ist als die des Hauptspeichers, wobei ein registerbezeichnender Adreßteil (register designating address part), in dem das Zuweisen eines Bereichsregisters mit einer Registeradresse eines Registerbereichs als sein Wert und das Zuweisen eines Registerverschiebungswertes (register displacement value), welcher eine relative Registeradresse innerhalb des Registerbereichs ausdrückt, kombiniert wird, in jedem Befehl vorgesehen ist, so daß, selbst wenn physikalische Register vergrößert werden, das Sichern und Wiederherstellen von Registern infolge von Taskumschaltungen etc. verringert werden kann, um eine erhöhte Geschwindigkeit der Programmausführung zu erzielen. Außerdem ist ein Adreßteil zum Bezeichnen von Hauptspeicher im gleichen Befehl vorgesehen.

In Übereinstimmung mit der vorliegenden Erfindung wird ein Verfahren zur Verwaltung bzw. Organisation eines Register-Files, wie in Anspruch 1 und 2 dargelegt, und ein Register-File, wie in Anspruch 6 (4) dargelegt, vorgesehen. Bevorzugte Ausführungsbeispiele der Erfindung sind in den abhängigen Ansprüchen offenbart.

ZUSAMMENFASSUNG DER ERFINDUNG

Die vorliegende Erfindung ist, wie beansprucht, ein Register-File und das Verfahren zur Verwaltung bzw. Organisation eines solchen Register-Files.

In einem Computer mit einem Speicher und einer arithmetisch logischen Einheit (Arithmetic Logic Unit) (ALU) zum Durchführen von arithmetischen Operationen auf Operanden gemäß Programmbefehlen umfaßt ein Register-File in Übereinstimmung mit der Erfindung eine Vielzahl von Registern, die an den Speicher und die ALU gekoppelt sind zum temporären bzw. zeitweisen Speichern von Operanden, die von der ALU genutzt werden. Jedes Register hat einer eindeutige absolute Adresse.

Das Register-File umfaßt zusätzlich einen Mechanismus zum Bestimmen eines ersten Satzes von Registern beginnend mit einer ersten Basisadresse und eines zweiten Satzes von Registern beginnend mit einer zweiten Basisadresse. Der erste Satz von Registern umfaßt einen ersten Satz von globalen Registern, beginnend mit einer ersten globalen Basisadresse, und einen ersten Satz von lokalen Registern, beginnend mit einer ersten lokalen Basisadresse. Der zweite Satz von Registern umfaßt einen zweiten Satz von globalen Registern, beginnend mit einer zweiten globalen Basisadresse und einen zweiten Satz von lokalen Registern, beginnend mit einer zweiten lokalen Basisadresse.

Das Register-File enthält ferner einen Adressierungsmechanismus. Der Adressierungsmechanismus umfaßt die Fähigkeit zum Lesen einer relativen Adresse von einem Befehl, die Fähigkeit zum Bestimmen, ob die relative Adresse ein Register aus dem ersten Registersatz oder ein Register aus dem zweiten Registersatz identifiziert, und die Fähigkeit zum Berechnen der absoluten Adresse des Registers, welches adressiert wird, aus der relativen Adresse. Falls das Register, welches adressiert wird, in dem ersten Satz von globalen Registern ist, verwendet die Berechnung zusätzlich die erste globale Basisadresse, und falls das Register, welches adressiert wird, in dem ersten Satz von lokalen Registern ist, verwendet die Berechnung zusätzlich die erste lokale Basisadresse. Falls das Register, welches adressiert wird, in dem zweiten Satz von globalen Registern ist, verwendet die Berechnung die zweite globale Basisadresse, und falls das Register, welches adressiert wird, in dem zweiten Satz von lokalen Registern ist, verwendet die Berechnung die zweite lokale Basisadresse.

In Übereinstimmung mit einem Aspekt der Erfindung können die Mittel zum Bestimmen zu anderen Zeiten eine andere Vielzahl von Registern in dem Register-File als den ersten Satz von Registern bestimmen, wobei die andere Vielzahl von Registern absolute Adressen aufweisen, die mit einer dritten Basisadresse beginnen. Die Mittel zum Adressieren berechnen dann die absolute Adresse des Registers, welches adressiert wird, aus der relativen Adresse und der dritten Basisadresse.

Das Verfahren zur Verwaltung bzw. Organisation des Register-Files gemäß der Erfindung umfaßt das Bestimmen eines ersten Satzes von Registern, bestehend aus Registern mit absoluten Adressen beginnend mit einer ersten Basisadresse, und das Bestimmen eines zweiten Satzes von Registern, bestehend aus Registern mit absoluten Adressen beginnend mit einer zweiten Basisadresse. Das adressieren eines Registers des Register-Files umfaßt das Lesen einer relativen Adresse aus einem Adreßfeld in einem Befehl und das Bestimmen, ob diese relative Adresse ein Register des ersten Registersatzes oder des zweiten Registersatzes identifiziert. Falls die relative Adresse ein Register des ersten Satzes identifiziert, wird die Adresse des Registers, auf welches zugegriffen wird, aus der relativen Adresse und der ersten Basisadresse berechnet. Falls die relative Adresse ein Register des zweiten Satzes identifiziert, wird die Adresse des Registers, auf welches zugegriffen wird, aus der relativen Adresse und der zweiten Basisadresse berechnet.

Die Vorrichtung zur Verwaltung bzw. Organisation des Register-Files und das Verfahren der Erfindung ermöglichen die effiziente Verwendung von Registern in einem Register-File.

Die vorliegende Erfindung ermöglicht das Zuordnen mehrerer Registersätze mit jeweils beliebiger Größe und Anordnung innerhalb des Register-Files zu verschiedenen Aufgaben (Tasks) und Kontexten.

Die vorliegende Erfindung erlaubt es, die Größe jeden zugeordneten Registersatzes einfach zu ändern.

Die vorliegende Erfindung ermöglicht eine einfache Neuzuordnung von Registern innerhalb einer Aufgabe (Task) oder zu verschiedenen Aufgaben (Tasks).

Die vorliegende Erfindung ermöglicht einen Neuzuordnung von Registern, die mit einer bestimmten Aufgabe (Task) assoziiert sind, für eine maximale Auslastung der Register des Register-Files.

Die Vorrichtung zur Verwaltung bzw. Organisation des Register-Files und das Verfahren der Erfindung ermöglichen zusätzlich, daß mehr als eine Aufgabe (Task) unverzögerten Zugriff auf Register in dem Register-File hat, um unverzögertes Umschalten des Kontextes bei Calls bzw. Aufrufen, Traps bzw. Programmunterbrechungen, Exceptions bzw. Ausnahmen und Returns bzw. Rücksprüngen zu unterstützen.

Die Erfindung ermöglicht ferner einen Systemspeicherstack bzw. Systemstapelspeicher, der zu einer neuen Stackposition in dem Register-File umgeschaltet werden kann, um sehr schnelles Umschalten für Multitasking zu ermöglichen.

Die Vorrichtung und das Verfahren der Erfindung ermöglichen ferner automatisches und inkrementelles Sichern und Wiederherstellen von Daten des Datenspeichers, um einen Überlauf des Register-Files (Register File Overflow) effizient zu unterstützen.

KURZBESCHREIBUNG DER ZEICHNUNGEN

Fig. 1a und 1b sind Timing-Diagramme für eine Ausführungsleitung (Execution Pipe) eines Prozessors mit einer RISC Architektur.

Fig. 2 ist ein Blockdiagramm eines Ausführungsbeispiels eines in Übereinstimmung mit einer RISC Architektur entworfenen Signalprozessors, in welchem die Erfindung angewendet werden kann.

Fig. 3 stellt ein mit einem Speicher und einer arithmetisch logischen Einheit verbundenes Register-File gemäß der Erfindung konzeptuell dar.

Fig. 4 stellt ein für eine Multitasking-Umgebung vorbereitetes Register-File gemäß der Erfindung dar.

Fig. 5 stellt die Adressierung eines Singletask-Abschnitts eines gemäß der Erfindung ausgestalteten Register-Files dar.

Fig. 6 stellt ein Ausführungsbeispiel eines für eine Singletask-Umgebung ausgestalteten Register-Files dar.

Fig. 7 stellt die Adressierung mehrerer Fenster eines Singletask-Abschnitts eines gemäß der Erfindung ausgestalteten Register-Files dar.

Fig. 8 stellt ein weiteres Schema für die Adressierung eines Register-Files in Übereinstimmung mit der Erfindung dar.

Fig. 9 stellt die Adressierung von lokalen Benutzerregistern und lokalen Supervisor-Registern eines Register-Files in Übereinstimmung mit der Erfindung dar.

DETAILLIERTE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSBEISPIELE

In einem bevorzugten Ausführungsbeispiel ist das Register-File der vorliegenden Erfindung besonders nützlich in einem Controller oder einem Signalprozessor, der mit einem Reduced Instruction Set Computer (Computer mit reduziertem Befehlssatz) (RISC) entworfen wurde. Aus diesem Grund wird eine derartige Umgebung kurz beschrieben.

Ein Blockdiagramm des Kernstücks einer Einheit mit RISC Architektur, in welcher das Register-File der Erfindung eingegliedert werden kann, wird in Fig. 2 gezeigt. Die dargestellte Einheit kann einen Controller oder einen digitalen Signalprozessor implementieren. Die Einheit umfaßt eine Befehlsausführungseinheit 21, ein Register-File 23, eine arithmetisch logische Einheit (ALU) 25, einen Datenspeicher 27 und einen Programmspeicher 29.

Die ALU 25 umfaßt eine Multiplizier/Akkumuliereinheit (multiply/accumulate unit) (MAC) 31, bestehend aus einem Multiplizierer, einem Addierer, vier Akkumulatoren und einem Skalierer.

Befehle werden im Programmspeicher 29 gespeichert. Solche Befehle sind im allgemeinen in der Lage, zwei Quelloperanden und einen Zieloperanden zu spezifizieren. Jeder Befehl kann eine Länge von 32 Bit aufweisen. Die Befehlsausführungseinheit 21 dekodiert die aus dem Programmspeicher gelesenen Befehle und steuert verschiedene Operationen, während die Befehle die Ausführungsleitung (Execution Pipe) durchlaufen.

Operanden werden in Registern und im Datenspeicher gespeichert. Registeroperanden sind am leichtesten aus dem Registerraum (register space) erhältlich, der das Register-File 23, Streamerdatenregister 33 und Akkumulatoren umfaßt. Zusätzliche Register im erweiterten Registerraum können ebenfalls umfaßt sein. Auf diese Register kann nur durch einen begrenzten Satz von Befehlen zugegriffen werden. Der Registerraum und der erweiterte Registerraum bilden den vollen Registerraum. Das Register-File 23 nimmt primär skalare Operanden auf und berücksichtigt sowohl globale als auch lokale Umgebungen. Die Streamerregister 33 erlauben Zugriff auf Matrixoperanden (array operands) im Speicher, als ob es Register im Registerraum wären. Die Akkumulatorregister dienen der Speicherung für die Ergebnisse der MAC Einheit 31 der ALU 25. Diverse weitere Register können interne und ausgewählte Eingabe/Ausgabe Register umfassen, die einen komfortablen Zugriff erfordern.

Arithmetische, logische und Shiftbefehle werden in der ALU 25 ausgeführt. Operanden werden aus dem Registerraum entnommen und Ergebnisse werden in den Registerraum zurückgeschrieben. Operanden können innerhalb des vollen Registerraums unter Verwendung von Verschiebebefehlen (move instructions) transferiert werden. Die Ergebnisse von Multiplizierbefehlen sind für Akkumulatorregister bestimmt. Diese Akkumulatorregister haben eine erweiterte Länge, um ein volles Produkt und Guardbits zum Berücksichtigen von Überläufen mehrerer Akkumulationen vorzuhalten.

Operanden können zwischen dem Registerraum und dem Datenspeicher 27 mittels Lade- und Speicherbefehlen oder mittels automatischer Speicherzugriffshardware, die als Streamer bezeichnet wird, befördert werden. Die Speicheradressen für Lade- und Speicherbefehle kommen aus dem Register-File 23 (einige aus dem vollen Registerraum) und können als Teil der Ausführung des Lade- oder Speicherbefehls modifiziert werden. Speicheradressen für die Streamer werden durch Streamer-Indexregister geliefert, welche in den Indexmodifiziereinheiten 35 modifiziert werden.

Obgleich die Details der bevorzugten Ausführungsbeispiele im Zusammenhang mit dem Register-File 23 beschrieben werden, werden jene mit Fachkenntnis erkennen, daß die Erfindung ebenfalls in den Streamerregistern 33, den Akkumulatoren und anderen Registerumgebungen Anwendung finden kann, um eine unverzögerte Umschaltung für Aufgaben (Tasks) und Kontexte innerhalb dieser Register vorzusehen.

Information kann in dem Datenspeicher 27 beispielsweise in 32-bit Worten gespeichert sein. In dem Registerraum können die Operanden ebenfalls als 32-bit Worte gespeichert sein. Falls erforderlich, werden Operanden entsprechend der Datentypumwandlungen, die in den Lade/Speicherbefehlen oder den Streamerkontextregistern spezifiziert sind, erweitert oder abgeschnitten, wenn sie vom oder in den Speicher geladen werden. Datenworte mit anderen Längen können natürlich ebenfalls verwendet werden.

Bedingte Verzweigungen (PC relative Adresse), Sprünge (absolute Adresse), Calls, Traps und Returns werden bedingt nach einem Verzögerungszyklus (delay cycle) ausgeführt, in welchem ein "delay slot" Befehl selektiv entsprechend der durch den Befehl gelieferten Optionen ausgeführt werden kann.

Die in Fig. 2 dargestellte RISC Signalprozessoreinheit weist separate Räume für die Speicherung von Informationen auf: Speicherraum und Registerraum. Die Einheit umfaßt separate Busse 41, 43 für Programmspeicher und Datenspeicher (mitunter als Harvard-Architektur bezeichnet). Allerdings können die Adreßräume des Programmspeichers und des Datenspeichers als separat oder als vermischt für spezifische Implementierungen der Einheit betrachtet werden. Das Beibehalten separater Busse innerhalb der Einheit ermöglicht den gleichzeitigen Zugriff auf Speicherblöcke. Allerdings können beide Busse verwendet werden, um den gleichen Adreßraum zu adressieren, und die gleiche Information ist über jeden Bus zugänglich.

Ein Bus 41 für Programmspeicher und Busse 43 für Datenspeicher und zusätzliche Hilfsspeicher können umfaßt sein. Der Bus für Programmspeicher beginnt in der Befehlsausführungseinheit und wird für Befehle und Verzweigungstabellen verwendet. Der Bus für Datenspeicher wird von Lade- und Speicherbefehlen oder Streamern für das Transferieren von Daten zwischen den Registern und dem Datenspeicher verwendet.

Register-File

Das Register-File 23 sieht Speicherplatz für Operanden im Registerraum für einen schnelleren Zugriff durch die ALU vor. Jedes Register des Register- Files kann die gleiche Größe wie die im Datenspeicher gespeicherten Datenworte aufweisen, so daß jedes Register ein Datenwort speichern kann. Jedes Register des Register-Files hat eine eindeutige absolute Adresse. Praktisch jede Anzahl an Registern kann in dem Register-File enthalten sein. Verschiedene Ausführungsbeispiele können beispielsweise von 32 oder weniger bis über 2000 Register in dem Register-File aufnehmen.

Mit Bezug auf Fig. 3, ein Register-File 23, welches gemäß der Erfindung konstruiert ist, wird via Datenbusse 43 an die arithmetisch logische Einheit (ALU) 25 und den Hauptdatenspeicher 27 angebunden. Daten können aus der Hauptdatenspeichereinheit 27 gelesen und in den Registern des Register- Files für schnellen Zugriff durch die ALU gespeichert werden. Zusätzlich können die Ergebnisse der durch die ALU ausgeführten Operationen temporär in dem Register-File für zukünftige Verwendung durch die ALU gespeichert werden, ohne daß die Notwendigkeit besteht, diese (Ergebnisse) zurück in den Hauptdatenspeicher zu transferieren. Schließlich können die in dem Register- File gespeicherten Daten inklusive der Daten, die durch die Operationen der ALU geändert oder hinzugefügt wurden, in die Hauptspeichereinheit zurückgeschrieben werden, wenn der schnelle Zugriff des Register-Files nicht länger benötigt wird, oder wenn der Raum in dem Register-File für andere Operationen benötigt wird.

Gemäß der vorliegenden Erfindung berechnet ein Adressierungsmechanismus 45 des Register-Files die absolute Adresse eines gewünschten Registers innerhalb des Register-Files aus einer Basisadresse und einer relativen Adresse, die aus einem Adreßfeld des durch die ALU 25 ausgeführten Befehls gelesen wird. Der Adressierungsmechanismus 45 bestimmt gesonderte Register für jede Aufgabe (Task) oder jeden Kontext innerhalb einer Aufgabe (Task). Ein jeder solcher Satz von Registern umfaßt die Register, die Adressen beginnend mit einer gesonderten Basisadresse aufweisen. Wenn ein Befehl innerhalb oder gehörend zu dieser Aufgabe (Task) oder diesem Kontext durch die ALU ausgeführt und eine relative Adresse vom Adreßfeld des Befehls gelesen wird, berechnet der Adressierungsmechanismus des Register-Files die absolute Adresse des gewünschten Registers aus der relativen Adresse und der Basisadresse des Register-Files für die mit dieser Aufgabe (Task) oder diesem Kontext assoziierten Register. Auf dieses Register kann anschließend zugegriffen werden.

Mit Bezug auf Fig. 4 wird eine beispielhafte Aufteilung des Register-Files 23 für eine beliebige Anzahl von Aufgaben (Tasks) dargestellt. Obgleich in der vorliegenden Beschreibung separate Aufgaben (Tasks) als verschiedene Routinen ausgeführt durch eine einzige ALU betrachtet werden, können solche separaten Aufgaben (Tasks) separate, durch gleichzeitig arbeitende, verschiedene ALUs ausgeführte Routinen sein.

Wie in Fig. 4 dargestellt wird ein erster Satz von Registern 51 für eine erste Aufgabenumgebung (Task Environment) vorgesehen bzw. zugeordnet. Dieser Satz von Registern können jene Register mit absoluten Adressen zwischen einer ersten Basisadresse (d. h. lokale Basis 1) und einer ersten maximalen Adresse (d. h. lokale Basis 2) sein. Ein zweiter Satz von Registern 52 mit absoluten Adressen beginnend mit einer zweiten Basisadresse (lokale Basis 2) ist für eine zweite Aufgabenumgebung (Task Environment) vorgesehen usw. bis zum n-ten Satz von Registern 53 für die n-te Aufgabenumgebung (Task Environment). Der n-te Satz von Registern kann Adressen beginnend mit einer n-ten Basis Adresse (lokale Basis n) haben.

Wie aus der weiteren Beschreibung des Register-Files, konstruiert und betrieben gemäß der Erfindung, deutlich werden wird, ist die Anzahl der Aufgabenumgebungen (Task Environments), die in dem Register-File unterstützt werden können, im wesentlichen beliebig, und kann sich sogar zu verschiedenen Zeiten während des Betriebs der Einheit abhängig von den Anforderungen des Programms ändern. Es wird ebenfalls deutlich werden, daß die Anzahl der Register in jedem Satz ebenfalls im wesentlichen beliebig ist und für jeden Satz verschieden sein kann. Darüber hinaus kann sich die Anzahl der einem Satz zugewiesenen Register mit der Zeit ändern. Die Registersätze müssen nicht notwendigerweise unmittelbar aneinander angrenzend sein.

Innerhalb jeder Aufgabenumgebung (Task Environment) des Register-Files können separate Gruppierungen von Registern für globale Operanden und lokale Operanden vorgesehen werden. Ein globaler Operand ist ein Operand, auf den von verschiedenen Kontexten innerhalb der Aufgabe (Task) zugegriffen werden kann. Ein lokaler Operand ist ein Operand, der nur für einen spezifischen Kontext innerhalb der Aufgabe (Task) maßgeblich ist. Die Gruppierungen von Registern für lokale Operanden sehen Einrichtungen für das nahezu unmittelbare Umschalten des Kontexts für Calls, Exceptions, Traps und Returns vor. In Fig. 4 sind die globalen Register für jede Aufgabe (Task) jene, die Adressen beginnend mit der korrespondierenden globalen Basisadresse aufweisen (d. h. "globale Basis 1" für Aufgabe 1, "globale Basis 2" für Aufgabe 2, etc.). Die lokalen Register für jede Aufgabe sind jene Register, die absolute Adressen beginnend mit der korrespondierenden lokalen Basisadresse aufweisen (d. h. "lokale Basis 1", "lokale Basis 2" etc.).

Fig. 5 stellt einen beispielhaften Satz von Registern dar, die einer bestimmten Aufgabe innerhalb des in Fig. 4 dargestellten Register-Files für Multitasking bzw. den Betrieb mit mehreren Aufgaben zugewiesen sind. Dieser Satz von Registern umfaßt jene Register zwischen einer Basisadresse RFL und einer maximalen Adresse RFG+31.

In dem dargestellten bevorzugten Ausführungsbeispiel gibt es 32 globaler Register, die der Aufgabe (Task) zugewiesen sind. Jedes globaler Register hat eine Kapazität von 32 Bits. Das globale Basisregister hat eine absolute Adresse von RFG, und die globalen Register umfassen jene Register zwischen der globalen Basisadresse RFG und einer maximalen Adresse von RFG+31. Die 32 globalen Register können dann Adressen relativ zur globalen Basisadresse von GR0 bis GR31 aufweisen. Die relative Adresse GR0 korrespondiert mit der absoluten Register Adresse RFG. Daher kann die absolute Adresse eines jeden globalen Registers erhalten werden, indem eine Berechnung unter Verwendung der globalen Basisadresse und einer relativen Adresse, die von einem Befehlsfeld gelesen wird, ausgeführt wird. Beispielsweise kann die relative Adresse "i", die von dem Befehlsfeld gelesen wird, zur globalen Basisadresse RFG addiert werden, um die absolute Adresse "a" des Registers, welches adressiert wird, zu erhalten:

a = i + RFG.

Die absolute Adresse für das Basisregister der globalen Register (RFG) kann eine elf Bit Register Adresse sein. Allerdings sind die niederwertigsten drei Bits vorzugsweise immer 0, so daß sich das globale Basisregister in Blöcken von 8 Registern erhöht und die Adresse in acht Bits gespeichert werden kann.

In einer Singletask-Umgebung bzw. Umgebung mit einer Aufgabe mit nur einem Satz globaler Register können die 32 globalen Register fest sein, wie dies in Fig. 6 dargestellt ist. Das globale Register mit der Adresse "0" (GR0) kann in jeder Bitposition mit einer 0 fest verdrahtet sein, so daß es stets als eine "0" gelesen wird und nicht modifiziert werden kann. Das globale Register mit der Adresse "1" (GR1) kann als der Speicherstackzeiger (memory stack pointer) reserviert sein. Bestimmte Befehle können implizit darauf zugreifen. Die globalen Register (GR0-GR31) können durch Felder in den Befehlen direkt adressiert werden.

Jeder einer Aufgabe zugewiesene Satz von Registern umfaßt außerdem lokale Register. Die lokalen Register werden für das temporäre bzw. zeitweise Speichern der Programmzähler-Rücksprungadresse (Program Counter Return Address), Statusregister, Systemstackzeiger (System Stack Pointer), übergebenen Parameter und Zwischenoperanden verwendet.

Jeder Satz lokaler Register weist ein lokales Basisregister mit einer lokalen Basisadresse auf. Fig. 5 stellt die lokalen Register als jene Register dar, die Adressen zwischen der lokalen Basisadresse RFL und der maximalen Adresse RFG-1 aufweisen. Praktisch jede Anzahl von Registern kann in jedem Satz von lokalen Registern enthalten sein. Beispielsweise können 64 Register mit jeweils einer Kapazität von 32 Bit enthalten sein. In der Multitasking- Umgebung müssen die verschiedenen lokalen Registersätze aufgrund des relativen Adressmechanismus der Erfindung weder von der gleichen Größe sein noch konstant bleiben, da die relative Position und die Größe durch einfaches Ändern der absoluten Basisadresse für den Satz (RFL) oder durch Ändern der absoluten Basisadresse für den globalen Registersatz, welche die obere Begrenzung des Registersatzes bestimmt (RFG), geändert werden kann.

Innerhalb des lokalen Registersatzes für die Aufgabe (Task) können ein oder mehrere Untergruppen oder Fenster 61 von lokalen Registern bestimmten Kontexten innerhalb der Aufgabe (Task) zugewiesen werden. Eine solche Untergruppe kann jene Register umfassen, die absolute Adressen beginnend mit einer Untergruppen-Basisadresse RFB aufweisen. Die Untergruppen- Basisadresse RFB in der Multitasking-Umgebung kann eine elf Bit (11 Bit) Adresse sein, deren niederwertigstes Bit Null ist. Dies ermöglicht das Speichern der Adresse in 10 Bits und stellt sicher, daß sich die Register- Untergruppe in Paaren von Registern erhöht. In der in Fig. 6 gezeigten Singletask-Umgebung kann eine sechs Bit (6 Bit) Adresse für RFB ausreichend sein. Das niederwertigste Bit kann ebenfalls Null sein.

Die Untergruppen-Basisadresse RFB liefert einen Offset für das Registerfenster vom unteren Ende des Register-Files. Diese Untergruppen-Basisadresse muß innerhalb des als lokale Register der Aufgabe (Task) zugewiesenen Bereichs sein. Beispielsweise zeigt die Darstellung 32 Register mit absoluten Adressen zwischen der absoluten Adresse RFB und RFB+31 als eine bestimmte Untergruppe. Daher kann jedes Register innerhalb der Untergruppe von 32 Registern adressiert werden, indem die lokale relative Adresse (LR0- LR31) von dem Befehlsfeld gelesen und eine Berechnung ausgeführt wird, um die absolute Adresse des Registers zu erhalten, die diese relative Adresse und die Untergruppen-Basisadresse RFB involviert. Diese Untergruppe wird zu einem "Fenster" von Registern, die relativ zu dem Basisregister RFB adressiert werden können. Dieses Fenster von Registern kann während Calls, Exceptions, Traps und Returns nach oben oder unten verschoben werden, um einen Systemstack zu bilden. Dieser Verschiebung oder Verlagerung des Register-Fensters kann durch einfaches Ändern der Untergruppen-Basisadresse RFB erreicht werden.

In einer bevorzugten Form umfaßt die Berechnung das Addieren der relativen Adresse (z. B. "i") zu der Untergruppen-Basisadresse RFB. Eine relative Adresse 0 (lokales Register LR0) greift dann auf das Register mit der absoluten Adresse RFB zu. Falls diese Summe i + RFB kleiner als RFG (die absolute Adresse für das Basisregister der globalen Register) ist, wird das lokale Register mit einer absoluten Adresse ("a") adressiert, die gleich dieser Summe ist. Daher:

a = i + RFB.

Falls die Summe jedoch größer als oder gleich RFG ist, würde die resultierende absolute Adresse ein Register identifizieren, das bereits als globales Register bestimmt ist. Daher ist in den Adressierungsmechanismus eine Logik eingebaut, so daß die Untergruppe oder das Fenster vom oberen Ende des lokalen Registersatzes zum unteren Ende des lokalen Registersatzes "umgreift". Falls die Summe i + RFB größer als oder gleich RFG ist, dann entspricht die absolute Adresse der Summe minus der absoluten Adresse des Basisregisters des globalen Registers (RFG) plus das Basisregister für den Satz von lokalen Registern (RFL). Daher:

a = i + RFB - RFG + RFL.

Dieser Mechanismus ermöglicht das "Umgreifen" der Untergruppen von lokalen Registern vom oberen Ende des Satzes von lokalen Registern zum unteren Ende, um das Eindringen in die globalen Register zu vermeiden und um die Register des Register-Files mit maximaler Effizienz auszunutzen. Das Fenster von Registern kann daher irgendwo innerhalb des lokalen Satzes von Registern festgelegt werden, indem einfach eine geeignete Untergruppen- Basisadresse RFB bestimmt wird.

Mehr als ein Fenster (oder eine Untergruppe) von Registern kann zu einem Zeitpunkt für verschiedene Kontexte innerhalb einer Aufgabe (Task) bestimmt sein. Jede Untergruppe weist eine eigene eindeutige Untergruppen- Basisadresse RFB auf. Diese können aufgrund der durch die Adressierung der Register relativ zu einer Basisadresse gewährleisteten Flexibilität unabhängig festgelegt werden. In einigen Fällen kann es sogar wünschenswert sein, überlappende Untergruppen zu haben. Ein solches Überlappen ermöglicht den Zugriff auf die überlappenden Register in separaten Kontexten, so daß bestimmte Operanden auf einfache Weise gemeinsam benutzt werden können.

Eine beispielhafte Anordnung einer Aufgabenumgebung (Task Environment) mit zwei zugeordneten Untergruppen von lokalen Registern ist in Fig. 7 dargestellt. Dargestellt ist eine erste Untergruppe 71, wie sie z. B. einem ersten Kontext zugeordnet oder für einen ersten Kontext bestimmt sein könnte, die die Register mit Adressen beginnend mit einer ersten Untergruppen-Basisadresse RFB1 umfaßt. Dargestellt ist eine zweite Register-Untergruppe 72, wie sie z. B. für einen zweiten Kontext innerhalb der Aufgabe (Task) bestimmt sein könnte, die die Register mit Adressen beginnend mit einer zweiten Untergruppen-Basisadresse RFB2 umfaßt. Zusätzliche Untergruppen oder Fenster können nach Bedarf innerhalb der Aufgabe (Task) bestimmt werden. Außerdem können mehrere Untergruppen in den anderen Aufgabenumgebungen des für mehrere Aufgaben (Tasks) eingerichteten Register-Files festgelegt werden.

Eine Möglichkeit, die Fenster in einer Singletask-Umgebung zu organisieren, besteht darin, eine Stapel-Anordnung (Stacking Arrangement) überlappender Fenster zu bilden.

Ein Systemstack bzw. Systemstapel(speicher) kann unter Verwendung der lokalen Register des Register-Files 23 und des Stacks bzw. Stapel(speichers) des Datenspeichers im Datenspeicher 27 implementiert werden. Das lokale Register-File-Fenster (Untergruppe von Registern) 61 (Fig. 5) kann das aktuelle obere Ende des Stack-Gebiets sein. Die anderen lokalen Register, welche vorhergehende Daten enthalten, umfassen den nächsten Abschnitt des Stacks, und die ältesten Inhalte befinden sich in Stack des Datenspeichers. Calls, Traps und Exceptions können das Fenster (die Register-Untergruppe) 61 weiter schalten und Rücksprunginformationen (return information) in den neuen LR0 (und LR1) speichern. Rücksprünge stellen das Fenster an dessen vorhergehenden Position unter Verwendung der Rücksprunginformationen wieder her.

Der Betrieb des Systemstack kann erfolgen, in dem in LR0 die Verschiebung zu RFB und die Programmzähler-Rücksprungadresse (Program Counter Return Address) eingefügt wird. Zusätzlich kann die Adresse des Statusregisters in LR1 gespeichert werden, und die Register für die Übergabe von Parametern und Zwischenoperanden sind die lokalen Untergruppen-Register mit relativen Adressen LR2 und größer. Der Zeiger für diesen Systemstack ist die Untergruppen-Basisregisteradresse RFB, die durch mit Calls, Exceptions, Traps und Returns assoziierten Verschiebungen modifiziert werden kann.

Jedes Register-Fenster oder Untergruppe kann innerhalb des lokalen Registersatzes für diese Aufgabe verschoben werden, indem einfach die Untergruppen-Basisadresse RFB für diese Untergruppe geändert wird. Die Befehlsausführung bleibt davon unbeeinflußt, weil sie auf Basis relativer Adressen innerhalb des Fensters arbeitet, welche konstant bleiben. Um ein Register-Fenster zu verschieben, kann eine neue Untergruppe von Registern bestimmt werden, die absolute Adressen beginnend mit einer neuen Untergruppen-Basisadresse RFB aufweisen. Dann wird, um ein Register in dem verschobenen Fenster zu adressieren, die aus dem Adreßfeld des Befehls gelesene relative Adresse zu der neuen Untergruppen-Basisadresse addiert, um die absolute Adresse des Registers zu erhalten, auf welches zugegriffen werden soll.

Darüber hinaus kann ein kompletter Registersatz für eine ausgewählte Aufgabenumgebung verschoben werden, indem eine neue Basisadresse RFL für diese Aufgabe bestimmt wird. Da die Berechnung der absoluten Adressen von Registern des globalen Satzes von Registern direkt von einer Berechnung der globalen Basisadresse RFG abhängt, sollte die neue RFG ebenfalls spezifiziert werden.

Dieser beiden Verschiebe-Merkmale ermöglichen die Konfiguration des Register-Files für eine maximale Effizienz bei der Verwendung der Register. Zum Beispiel könnte ein Register-Fenster, das vergrößert werden muß, in einen Abschnitt des Register-Files verschoben werden, welches mehr verfügbare Register aufweist. Oder ein Register-Fenster kann verschoben werden, um der Vergrößerung eines angrenzenden Fensters Rechnung zu tragen. Eine ähnliche Verschiebung kompletter Registersätze, die separaten Aufgaben zugewiesen sind, erhöht die Fähigkeit weiter, die Register des Register-Files effizient zu verwenden.

In der in den Fig. 4, 5 und 7 dargestellten Multitasking-Anordnung kann die lokale Registerbasisadresse RFL eine elf Bit (11 Bit) Adresse sein. Die niederwertigsten drei Bits sind vorzugsweise immer Null (0), so daß sich die lokale Registerbasis in Blöcken von 8 Registern erhöht und die Adresse in acht Bits gespeichert werden kann. Jede Register-Fenster-Untergruppen- Basisadresse RFB ist ebenfalls eine 11 Bit Adresse.

Vorzugsweise ist das niederwertigste Bit der Adresse RFB stets Null (0), 50 daß sich die Register-Fenster-Basis in Paaren von Registern erhöht und die Adresse in zehn Bits gespeichert werden kann.

In einem in Fig. 6 dargestellten Singletask-Ausführungsbeispiel mit 64 lokalen Registern wird die absolute Adresse für das Basisregister der Untergruppe von lokalen Registern (RFB) vorzugsweise als eine sechs Bit Adresse ausgedrückt. Das niederwertigste Bit der Adresse ist vorzugsweise immer 0, so daß sich das lokale Register 0 (LR0) stets bei einer geraden absoluten Adresse befindet.

Eine Register-File-Reserve bzw. Register-File-Reservierung kann verwendet werden, um lokale Register zur Verwendung durch das aktuelle Programm zu reservieren, um zu verhindern, daß diese durch eine Exception bzw. Ausnahme oder Trap bzw. Programmunterbrechung überschrieben werden. Diese Register-File-Reserve kann mit RFR bezeichnet werden und kann beispielsweise zwischen 4 und 34 lokalen Registern reservieren. Die Register-File- Reserve RFR kann ein 5 Bit Adreßmodifizierer (address modifier) sein, dessen niederwertigstes Bit stets 0 ist. Daher reserviert RFR eine gerade Anzahl von Registern und kann in 4 Bits gespeichert werden. Genauer, RFR reserviert Register LR0 bis LR(RFR+3), wobei RFR = 0, 2, 4, ... 30. Wenn der Reservewert RFR zu Untergruppen-Basisadresse RFB addiert wird, ist die resultierende Adresse immer gerade, falls sowohl RFR als auch RFB eine feste Null in der niederwertigsten Bitposition aufweisen.

In Fig. 5 ist die Position des reservierten Registers 62 angegeben. In dem dargestellten Ausführungsbeispiel ist der Wert von RFR größer als die Anzahl der Register in der Untergruppe von Registern, die dem aktuellen Programm zugewiesen sind.

Ein Befehl zur Reservierung (reserve instruction) trägt einen neuen Wert für RFR ein und sichert automatisch vorhergehende Daten, falls vorhanden, aus den lokalen Registern, die für den Speicherstack im Datenspeicher 27 reserviert sind. Der Befehl zur Reservierung kann außerdem eine Exception- Freigabe festlegen und den Speicherstackzeiger umordnen, indem ein vorzeichenloses 8-Bit-Feld zum Speicherstackzeiger im globalen Register mit der relativen Adresse GR1 addiert wird. Nach einem Call, einer Exception oder einem Trap sollte der erste Befehl in dem Unterprogramm ein Befehl zur Reservierung sein.

Ein Call-Befehl bzw. Aufruf-Befehl kann ein Verschiebungsfeld (Displacement Field) (RFD) enthalten, welches zum Modifizieren der Untergruppen- Basisregisteradresse RFB verwendet wird, um das Register-File-Fenster oder die Untergruppe zu verlegen. Die neue Untergruppen-Basisregisteradresse kann berechnet werden, indem zur alten absoluten Basisregisteradresse die Verschiebung RFD+2 addiert wird. Daher:

Neue RFB = Alte RFB + RFD + 2

Die Zwei wird zu der Verschiebung addiert, um die Rücksprunginformation in den lokalen Registern LR0 und LR1 automatisch zu schützen.

Der Verschiebungswert RFD kann, wie auch der Register-File Reservierungswert RFR, ein 5 Bit Adreßmodifizierer sein, dessen niederwertigstes Bit stets 0 ist, so daß er in 4 Bits gespeichert werden kann. Alternativ kann in Umgebungen, in welchen kleineren Register-File-Sätze zu verwenden sind und daher kleinere Verschiebungswerte erwartet werden, das Verschiebungsfeld RFD ein 4 Bit Wert sein, der zu den vier niederwertigsten veränderbaren Bits der absoluten Basisregisteradresse RFB addiert werden kann.

Falls der Verschiebungswert RFD größer als der File-Register Reservierungswert RFR ist, besteht für einige Register die Gefahr, daß sie überschrieben werden. Daher ist beim Zugriff auf derartige Register Vorsicht geboten. Der Verschiebungswert RFD, der Register-File Reservierungswert RFR und die Rücksprungadresse (return address) für den Programmzähler (program counter) werden in dem Ort des Register-Files gespeichert, der durch das neue Basisregister mit der lokalen relativen Adresse LR0 adressiert wird.

Wenn die ALU auf eine Exception bzw. Ausnahme stößt oder ein Trap-Befehl bzw. Programmunterbrechungs-Befehl ausgeführt wird, wird der Register-File Reservierungsmodifizierer RFR verwendet, um die Untergruppen- Basisregisteradresse RFB zu modifizieren, um das Register-File-Fenster zu verlegen. Der Reservierungswert RFR wird zu der lokalen Untergruppen- Fenster-Basisadresse RFB beim Einstellen der neuen Untergruppen-Basisadresse addiert, um das lokale Fenster hinter die geschützten Register zu verschieben. Die neue absolute Basisregisteradresse wird aus der alten Basisregisteradresse berechnet, indem der Wert der Reservierungs- Verschiebung RFR plus zwei addiert wird. Daher:

Neue RFB = Alte RFB + RFR + 2

Der alte RFR Wert und die Rücksprungadresse für den Programmzähler werden in dem neuen LR0 gespeichert. Das Statusregister wird in dem neuen LR1 gespeichert. Ein durch die ALU ausgeführter Rücksprung-Befehl restauriert die lokale Untergruppen-Fenster-Register Adresse RFB auf ihren vorhergehenden Wert, indem die Verschiebung RFD+2 (falls ein Aufruf-Rücksprung - call return) oder, falls der Rücksprung von einer Exception oder einer Trap erfolgt, der Register-File Reservierungswert RFR+2 von ihr subtrahiert wird. In beiden Fällen werden der Reservierungswert, der Programmzähler und Statusregister (falls ein Exception- oder Trap-Rücksprung) wiederhergestellt.

Die zusätzliche "2", die zu den Verschiebungen RFR und RFD addiert wird, schützt automatisch die Rücksprunginformation, die in den Registern mit den relativen Adressen LR0 und LR1 gespeichert ist.

Ein Autospeichern-Modus (autosave modus) kann für das Laden der Inhalte lokaler Register in den Datenspeicherstack bzw. Datenspeicherstapel vorgesehen werden, um diese durch den Reservierungs-Befehl geschützten Register freizugeben. Ein Auto-Wiederherstellen-Modus ermöglicht das Wiederherstellen gespeicherter bzw. geretteter Registerinhalte zurück in die lokalen Register aus dem Datenspeicherstack während eines Rücksprung-Befehls. Lokale Register sollten nur gespeichert beziehungsweise gerettet oder wiederhergestellt werden, wenn die Gefahr besteht, daß sie überschrieben werden, und dann nur, falls das Autospeichern-Modus-Bit in dem Statusregister gesetzt ist.

Ein Register-File Speicherregister mit einer Adresse RFS kann als ein Zeiger verwendet werden, der die lokalen Register mit den ältesten Daten von denen mit den neueren Daten teilt. Dieses Register kann die absolute Register-File- Adresse des nächsten zu speichernden lokalen Registers enthalten, oder die einer oberhalb des nächsten wiederherzustellenden lokalen Registers. Daher teilen die Inhalte des Registers RFS die Register, die bereits gespeichert bzw. gerettet wurden und daher überschrieben werden können, von jenen, die nicht überschrieben werden sollten. Wenn die ALU in einem Kontext operiert, der auf eine Untergruppe von Registern mit absoluten Adressen zugreift, die mit RFB beginnen, stellt die Logik des Register-Files sicher, daß die Register, auf die zugegriffen werden soll, keine Daten enthalten, die nicht überschrieben werden sollen. Dieses Kriterium wird erfüllt, falls die Untergruppe von Registern, auf die zugegriffen werden soll, plus die durch RFR reservierten Registern alle unterhalb des durch die Inhalte des Registers RFS identifizierten Registers sind.

Falls die Register-File-Speicherregister-Adresse RFS größer als die absolute Untergruppen-Fenster-Adresse RFB ist, dann werden die lokalen Register als "sicher" vor Überschreibung betrachtet, falls die Register-File-Speicherregister-Adresse RFS größer als die Fenster-Basisadresse RFB plus der Reservierungswert RFR plus 3 ist. Daher sind die Register, auf die zugegriffen wird, sicher, falls:

RFS > RFB + RFR + 3.

Falls allerdings RFS kleiner oder gleich RFB ist, dann sind die lokalen Register, auf die zugegriffen wird, sicher, falls:

RFS + RFG - RFL > RFB + RFR + 3.

Die letztere Berechnung berücksichtigt das "Umgreifen" des lokalen Registerfensters auf das untere Ende der dieser Aufgabe (Task) zugewiesenen Register.

Eine Datenspeicher-Stackadresse bzw. Datenspeicher-Stapeladresse kann in einem Register mit einer absoluten Adresse RFM gespeichert werden. Diese Datenspeicher-Stackadresse zeigt auf die Daten am oberen Ende des Speicherstacks bzw. Speicherstapels im Datenspeicher. Die Inhalte des Registers RFM können eine 32 Bit Adresse sein.

Während eines Befehls zur Reservierung können lokale Register automatisch in den Datenspeicherstack gespeichert bzw. gerettet werden, bis das Sicherheitskriterium erfüllt ist. Während eines Rücksprung wird zunächst ein Verzögerungs-Schlitz-Befehl (delay slot instruction) ausgeführt, als nächstes wird dann die Fenster-Basisadresse RFB wiederhergestellt und dann werden die lokalen Register automatisch von dem Datenspeicherstack wiederhergestellt, bis das Sicherheitskriterium erfüllt ist.

Wenn die Modi Autospeichern und Auto-Wiederherstellen verwendet werden, werden lokale Register-File Adreßberechnungen in einer "modulo" Weise ausgeführt, so daß die Registeradresse kleiner als RFG bleibt und nicht kleiner als RFL wird. Das bedeutet, daß die Quantität (RFG - RFL) von der Berechnung subtrahiert wird, um zu bewirken, daß die Adresse auf das untere Ende des lokalen Registersatzes "umgreift", falls eine Adreßberechnung einen Wert größer als oder gleich RFG liefert. Falls eine Adreßberechnung ein Ergebnis kleiner als RFL liefert, dann wird die Quantität (RFG - RFL) zu der Berechnung addiert, um zu bewirken, daß die Adresse auf das obere Ende des lokalen Registersatzes "umgreift".

Einer der signifikanten Vorteile eines in Übereinstimmung mit der Erfindung konstruierten und verwalteten Register-Files besteht darin, daß die ALU praktisch unverzögert zwischen Kontexten oder sogar zwischen Aufgaben (Tasks) umschalten kann. Das Umschalten von Aufgaben (Task Switching) kann erreicht werden, indem an eine Routine zur Umschaltung von Aufgaben (Task Switching Routine) übergeben wird.

Ein Trap-Befehl bzw. ein Befehl zur Programmunterbrechung sollte verwendet werden, falls ein zukünftiger Rücksprung zu der alten Aufgabe gewünscht ist.

Eine Trap verschiebt die Rücksprunginformation auf den Systemstack bzw. Systemstapel der neuen Aufgabe.

Die Routine zur Umschaltung von Aufgaben speichert die Werte RFM, RFG, RFL, RFS und RFB, falls ein Rücksprung zu der alten Aufgabe gewünscht ist, und lädt anschließend diese Register mit den Informationen über die neue Aufgabe. Der Datenspeicher-Stackzeiger bzw. Datenspeicher-Stapelzeiger im Register RFM wird als separates 32-bit Wort gespeichert und wiederhergestellt. Die lokalen und globalen Basisadressen RFL und RFG können gemeinsam unter Verwendung eines Wortes gespeichert und wiederhergestellt werden. Dies ist möglich, da sie jeweils elf Bits lang sind. Daher passen sie in je eine Hälfte des 32 Bit Wortes. Die Speicheradresse RFS und die Basis für das lokale Register-Untergruppen-Fenster RFB können gemeinsam unter Verwendung eines weiteren Wortes gespeichert werden. Diese Adressen sind ebenfalls elf Bits, so daß sie in je eine Hälfte des 32 Bit Wortes passen.

Falls automatisches Speichern und Wiederherstellen der lokalen Register zum Speicher nicht notwendig ist, müssen zum Umschalten von Aufgaben lediglich die lokale Basisadresse RFL und die globale Basisadresse RFG für den mit der Aufgabe assoziierten Satz von Registern neu geladen werden. Die Register-File Basisadresse RFB für einen bestimmten Kontext kann ebenfalls für den bestimmten Kontext innerhalb der adressierten Aufgabe modifiziert werden.

Jene mit Fachwissen werden ein weiteres Schema der Adressierung eines Register-Files, welches in Fig. 8 dargestellt ist, besonders nützlich finden. Die unteren 32 Adressen können für globale Register ("G") verwendet werden, und die oberen Adressen für lokale Register ("L"). Das Register-File sollte eine zusammenhängende Adressierung aufweisen, und keine Lücken werden zwischen der Zuordnung der globalen Register und den lokalen Registern auftreten. Dies berücksichtigend kann auf globale Register nunmehr als lokale Register zugegriffen werden, indem das Basisregister einfach innerhalb des globalen Adreßbereichs positioniert wird. Auf diese Weise kann ein Teil der unteren 32 Register als lokale Register anstatt als globale Register zugeordnet werden. Die Neuzuweisung sollte so positioniert werden, daß die höheren globalen Register ersetzt werden.

Fig. 9 stellt eine weitere Adressierung des Register-Files dar, die besonders für die lokale Adressierung für Benutzer und Supervisor bzw. Leiter geeignet ist. Falls der Adreßraum 90 globale Register 94 bezeichnet, dann können die unteren 32 globalen Register 94 adressiert werden. Falls der Adreßraum 90 allerdings lokale Register 95 anzeigt, dann wird ein Modus-Bit 91 (in einem Statusregister) verwendet, um zu bestimmen, ob es als lokales Benutzerregister oder als lokales Supervisor-Register gedacht ist. Dann kann auf das lokale Register, unabhängig davon, ob es Supervisor oder Benutzer ist, auf Basis der relativen Adresse innerhalb des lokalen Abschnitts des Adreßraumes 90 zugegriffen werden. Es sei darauf hingewiesen, daß sowohl die Benutzerregister als auch die Supervisor-Register ihre entsprechenden RFBU 96 (Register File Base User, Benutzer-Register-File-Basis) und RFBS 97 (Register File Base Supervisor, Supervisor-Register-File-Basis) haben, um auf das Zielregister basierend auf der relativen Adresse zugreifen zu können.

Obgleich die jeweiligen Ausführungsbeispiele der Erfindung vorstehend mit Bezug auf eine bestimmte Umgebung beschrieben und ihre Verwendung mit Bezug auf eine bestimmte Umgebung dargestellt wurden, werden Jene mit Fachwissen erkennen, daß zahlreiche Modifikationen durchgeführt werden können und daß die Erfindung in vielen anderen Umgebungen eingesetzt werden kann.

Es sei darauf hingewiesen, daß die Ziele und Vorteile der Erfindung mittels jeder in den Gegenständen der folgenden Zusammenfassung der Erfindung und den beigefügten Patentansprüchen dargestellten kompatiblen Kombination(en) erreicht werden können.


Anspruch[de]

1. Verfahren zur Verwaltung bzw. Organisation eines Register-Files (23), welches eine Vielzahl von Registern aufweist, von denen jedes eine eindeutige absolute Adresse hat, wobei das Verfahren folgendes aufweist:

Zuweisen eines ersten Registersatzes (51), der mit einer Basisadresse beginnt, an eine erste Aufgabe (task), wobei der erste Registersatz einen ersten Satz von globalen Registern, der mit einer ersten globalen Basisadresse beginnt, und einen ersten Satz von lokalen Registern, der mit einer ersten lokalen Basisadresse beginnt, umfaßt;

Zuweisen einer ersten Untergruppe (61) des ersten Satzes von lokalen Registern an einen ersten Kontext innerhalb der ersten Aufgabe, wobei die erste Untergruppe (61) mit einer ersten Kontextbasisadresse anfängt;

Zuweisen eines zweiten Registersatzes (52) an eine zweite Aufgabe, der mit einer zweiten Basisadresse beginnt, wobei der zweite Registersatz (52) einen zweiten Satz von globalen Registern, der mit einer zweiten globalen Basisadresse beginnt, und einem zweiten Satz von lokalen Registern, der mit einer zweiten lokalen Basisadresse beginnt, umfaßt;

Adressieren eines der globalen Register des ersten Registersatzes (51) durch Lesen einer ersten relativen Adresse aus einem Adressfeld eines ersten Befehls zugehörig zu der ersten Aufgabe, Bestimmen, daß die erste relative Adresse ein globales Register identifiziert, das der ersten Aufgabe zugewiesen ist, und Berechnen der absoluten Adresse für das globale Register aus der ersten globalen Basisadresse und der ersten relativen Adresse;

Adressieren eines ersten lokalen Registers, wobei das erste lokale Register in der ersten Untergruppe der Register ist, und zwar durch Lesen einer zweiten relativen Adresse aus dem Adressfeld eines Adressfeldes eines zweiten Befehls, Bestimmen, daß der zweite Befehl zugehörig ist zu dem ersten Kontext innerhalb der ersten Aufgabe, und Berechnen der zweiten absoluten Adresse für das erste lokale Register aus der ersten Kontextbasisadresse und der zweiten relativen Adresse; und

Adressieren eines zweiten lokalen Registers, wobei das zweite lokale Register innerhalb der zweiten Untergruppe von Registern ist, und zwar durch Lesen einer dritten relativen Adresse aus dem Adressfeld eines dritten Befehls, Bestimmen, daß der dritte Befehl zu dem zweiten Kontext der ersten Aufgabe zugehörig ist, und Berechnen der absoluten Adresse für das zweite lokale Register aus der zweiten Kontextbasisadresse und der dritten relativen Adresse;

wieder Zuweisen eines dritten Registersatzes (53) an die erste Aufgabe, der mit einem dritten Registersatz beginnt, der mit einer dritten Basisadresse beginnt, wobei der dritte Registersatz (53) einen dritten Satz von globalen Registern, der mit einer dritten globalen Basisadresse beginnt, und einen dritten Satz von lokalen Registern, der mit einer dritten lokalen Basisadresse beginnt, umfaßt;

wieder Zuweisen einer dritten Untergruppe von Registern innerhalb des dritten Registersatzes (53) zu dem ersten Kontext innerhalb der ersten Aufgabe, wobei die dritte Untergruppe mit einer dritten Kontextbasisadresse beginnt;

wieder Zuweisen einer vierten Untergruppe von Registern innerhalb des dritten Registersatzes (53) zu dem zweiten Kontext innerhalb der ersten Aufgabe, wobei die vierte Untergruppe mit einer vierten Untergruppe beginnt, die mit einer vierten Kontextbasisadresse beginnt;

Adressieren eines zweiten der globalen Register des dritten Registersatzes (53) durch Lesen einer vierten relativen Adresse aus einem Adressfeld eines fünften Befehls, der zu der ersten Aufgabe gehört, Bestimmen, daß das Adressfeld des fünften Befehls ein globales Register, das der ersten Aufgabe zugewiesen ist, identifiziert, und Berechnen der absoluten Adresse für das zweite globale Register aus der dritten globalen Basisadresse und der vierten relativen Adresse;

Adressieren eines dritten lokalen Registers, wobei das dritte lokale Register innerhalb der dritten Registeruntergruppe liegt, und zwar durch Lesen einer fünften relativen Adresse aus einem Adressfeld eines sechsten Befehls, Bestimmen, daß der sechste Befehl zu dem ersten Kontext der ersten Aufgabe gehört, und Berechnen der absoluten Adresse für das dritte lokale Register aus der dritten Kontextbasisadresse und der fünften relativen Adresse;

Adressieren eines vierten lokalen Registers, wobei das vierte lokale Register innerhalb der vierten Untergruppe der Register liegt, und zwar durch Lesen einer sechsten relativen Adresse aus einem Adressfeld eines siebten Befehls, der zu dem zweiten Kontext der ersten Aufgabe gehört, Bestimmen, daß das vierte lokale Register in der vierten Untergruppe der Register liegt, durch Lesen von einem Adressfeld eines siebten Befehls, der zu dem zweiten Kontext der ersten Aufgabe gehört, und Berechnen der absoluten Adresse für das vierte lokale Register aus der vierten Kontextbasisadresse und der sechsten relativen Adresse.

2. Das Verfahren nach Anspruch 1, das zusätzlich folgendes aufweist:

nachfolgendes Zuweisen einer dritten Untergruppe des ersten Registers (51), beginnend mit einer dritten Kontextbasisadresse zu einem ersten Kontext der ersten Aufgabe; und

Adressieren eines dritten lokalen Registers, wobei das dritte lokale Register in der dritten Untergruppe des ersten Registersatzes (51) liegt, und zwar durch Lesen einer vierten relativen Adresse aus dem Adressfeld eines vierten Befehls, Bestimmen, daß der vierte Befehl zu dem ersten Kontext der ersten Aufgabe gehört, und Berechnen der absoluten Adresse für das dritte lokale Register aus der vierten relativen Adresse und der dritten Kontextbasisadresse.

3. Das Verfahren nach Anspruch 1, das zusätzlich aufweist:

Zuweisen einer dritten Untergruppe von Registern innerhalb des zweiten Satzes von lokalen Registern zu einem ersten Kontext innerhalb der zweiten Aufgabe, wobei die dritte Untergruppe mit einer dritten Kontextbasisadresse beginnt;

Adressieren eines der Register des zweiten Satzes von globalen Registern, wobei das Adressieren folgendes aufweist:

Lesen einer vierten relativen Adresse aus einem Adressfeld eines achten Befehls;

Bestimmen, daß das Adressfeld des achten Befehls ein globales Register identifiziert, das der zweiten Aufgabe zugewiesen ist;

Berechnen der absoluten Adresse für das globale Register des zweiten Satzes aus der zweiten globalen Basisadresse und der vierten relativen Adresse; und

Adressieren eines der lokalen Register des zweiten Satzes von lokalen Registern, wobei das Adressieren folgendes aufweist:

Lesen einer vierten relativen Adresse aus einem Adressfeld eines neunten Befehls;

Bestimmen, daß der neunte Befehl zu dem ersten Kontext der zweiten Aufgabe gehört; und

Berechnen der absoluten Adresse für das lokale Register des zweiten Satzes aus der dritten Kontextbasisadresse und der fünften relativen Adresse.

4. Register-File, das in einem Computer mit einem Speicher (27) und einer arithmetisch logischen Einheit (arithmetic logic unit) (ALU) betrieben wird zum Durchführen von arithmetischen Operationen auf Operanden gemäß Programmbefehlen, wobei das Register-File (23) folgendes aufweist:

eine Vielzahl von Registern, die an den Speicher und die ALU (25) gekoppelt sind zum zeitweisen Speichern von Operanden, die von der ALU (25) genutzt werden, wobei jedes der Register der (Vielzahl von Registern) eine eindeutige absolute Adresse hat;

Mittel zum Bestimmen eines ersten Satzes der Register, wobei der erste Satz Register umfaßt mit absoluten Adressen, die mit einer ersten Basisadresse beginnen, wobei der erste Registersatz (51) einen ersten Satz von globalen Registern, beginnend mit einer ersten globalen Basisadresse, und einen ersten Satz von lokalen Registern, beginnend mit einer ersten lokalen Basisadresse, umfaßt;

Mittel zum Bestimmen eines zweiten Satzes der Register, wobei der zweite Satz Register aufweist mit absoluten Adressen, die mit einer zweiten Basisadresse beginnen, wobei der zweite Registersatz (52) einen zweiten Satz von globalen Registern, beginnend mit einer zweiten lokalen Basisadresse, und einem zweiten Satz von lokalen Registern, beginnend mit einer zweiten lokalen Basisadresse, umfaßt;

Mittel zum Adressieren eines Registers des Register-Files, wobei die Adressierungsmittel folgendes aufweisen;

Mittel zum Lesen einer relativen Adresse von einem Befehl, Mittel zum Bestimmen, ob die relative Adresse ein Register aus dem ersten Satz von globalen Registern, dem ersten Satz von lokalen Registern, dem zweiten Satz von globalen Registern und dem zweiten Satz von lokalen Registern identifiziert;

Mittel zum Berechnen der absoluten Adresse des Registers, das von der relativen Adresse und der ersten globalen Basisadresse adressiert wird, wenn die relative Adresse ein Register des ersten Satzes von globalen Registern identifiziert, oder der ersten lokalen Basisadresse, wenn die relative Adresse ein Register aus dem ersten Satz von lokalen Registern identifiziert; oder

der zweiten globalen Basisadresse, wenn die relative Adresse ein Register des zweiten Satzes von globalen Registern identifiziert;

oder der zweiten lokalen Basisadresse, wenn die relative Adresse ein Register des zweiten Satzes von lokalen Registern identifiziert;

wobei die Mittel zum Bestimmen, ob sich die relative Adresse auf ein Register des ersten Registersatzes (51) oder ein Register des zweiten Registersatzes (52) bezieht, Mittel aufweist zum Bestimmen, ob die ALU (25) eine erste Aufgabe oder eine zweite Aufgabe bearbeitet, wobei die Bestimmungsmittel zusätzlich Mittel aufweisen zum Bestimmen einer ersten lokalen Untergruppe beginnend mit einer ersten lokalen Untergruppenbasisadresse und einer zweiten lokalen Untergruppe oder (von) Registern beginnend mit einer zweiten lokalen Untergruppenbasisadresse innerhalb des ersten Satzes von lokalen Registern, und wobei die Mittel zum Bestimmen, ob die ALU (25) eine erste Aufgabe oder eine zweite Aufgabe bearbeitet, zusätzlich bestimmen, ob die ALU (25) einen ersten Kontext oder einen zweiten Kontext bearbeitet, wenn die ALU (25) eine erste Aufgabe bearbeitet;

Mittel zum Bestimmen eines dritten Registersatzes (53) beginnend mit einem dritten Registersatz, der mit einer dritten Basisadresse beginnt, wobei der dritte Registersatz (53) einen dritten Satz von globalen Registern beginnend mit einer dritten globalen Basisadresse und einem dritten Satz von lokalen Registern beginnend mit einer dritten lokalen Basisadresse umfaßt; und

Mittel zum Adressieren eines zweiten globalen Registers des dritten Registersatzes (53), und zwar durch Lesen einer vierten relativen Adresse aus einem Adressfeld eines fünften Befehls, der zu einer ersten Aufgabe gehört, Bestimmen, daß das Adressfeld des fünften Befehls ein globales Register, das der ersten Aufgabe zugewiesen ist, identifiziert, und Berechnen der absoluten Adresse für das zweite globale Register aus der dritten globalen Basisadresse und der vierten relativen Adresse.







IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com