-
Die
vorliegende Erfindung betrifft die Systeme, die auf Silizium oder
SoC (aus dem Angelsächsischen „System
On Chip") integriert
sind, die mindestens eine Zentralverarbeitungseinheit oder CPU („Central
Processing Unit")
aufweisen, auf der Programme ausgeführt werden können, einen
Controller mit direktem Zugang zu dem Speicher oder DMA-Controller
(„Direct
Memory Access"),
einen Speicher und eine Speicherverwaltungseinheit oder MMU („Memory
Management Unit").
-
Derartige
SoC sind zum Beispiel in elektronischen Geräten wie einem Computer mit
allgemeinem Gebrauch, einem Decodiergehäuse oder „Set-Top-Box", einem persönlichen
digitalen Assistenten oder PDA („Personal Digital Assistant"), einem tragbaren
Telefon gegenwärtig.
-
Die
vorliegende Erfindung betrifft genauer das Programmieren des DMA-Controllers
eines solchen SoC.
-
In
dem physikalischen Speicher wird jedem Anwendungsprogramm oder Benutzerprogramm
dynamisch ein Speicherraum mit variabler Größe zugeordnet. Genauer genommen
hat jedes Benutzerprogramm nur zu einem Teil der Seiten des physikalischen
Speichers Zugang. Diese Seiten bilden einen Speicherraum (eventuell
diskontinuierlich), der auf dem Niveau des Speicherbusses durch
physikalische Adressen adressiert ist, der dem Benutzerprogramm
aber über
einen Adressierraum (im Allgemeinen kontinuierlich), virtueller
Adressierraum genannt, bekannt ist, auf den das Programm mit virtuellen Adressen
zugreift. Der virtuelle Adressierraum ist dem Benutzerprogramm eigen.
Die Beziehung, die die virtuellen Adressen in dem Adressierraum
und die physikalischen Adressen in dem physikalischen Speicher verbindet,
ist in Form einer Tabelle von Übersetzungen,
Seitentabelle genannt, gespeichert, die von dem Betriebssystem verwaltet
und in dem Hauptspeicher gespeichert wird. Die letzten von der Tabellennachladeeinheit
der MMU berechneten Adressenübersetzungen
werden in einem spezifischen Cache-Speicher, TLB (aus dem Angelsächsischen „Translation
Lookaside Buffer")
genannt, gespeichert.
-
Wie
bekannt, weist jeder Eintrag („Entry” im Angelsächsischen)
der TLB, nämlich
jede Zeile, die einer Übersetzung
in der TLB entspricht, einen Adressierraumidentifikator (oder ASID
aus dem Angelsächsischen „Adress
Space IDentifer")
auf, um identische virtuelle Adressen in den verschiedenen Adressierräumen zu
unterscheiden. Jeder ASID ist jeweils eindeutig einem bestimmten
Adressierraum des Systems zugewiesen.
-
Der
DMA-Controller führt
Datentransfers zwischen dem internen Speicher des SoC und peripheren
Speichervorrichtungen (zum Beispiel Festplatten, ausgehend von Informationen,
die ihm geliefert werden) aus. Diese Informationen weisen die physikalische
Transferquellenadresse, die physikalische Transferzieladresse und
schließlich
die Größe der zu
transferierenden Speicherzone auf.
-
Gemäß dem früheren Stand
der Technik liefert ein Programm, das eine Programmierung des DMA-Controllers
zu einem DMA-Transfer
fordert, der auf dem SoC im Benutzermodus ausgeführt wird (auch Anwendungsmodus
oder nicht privilegierter Modus genannt), eine virtuelle Adresse,
die die virtuelle Adresse der Quelle des DMA-Transfers oder des Ziels
des DMA-Transfers ist, an das Betriebssystem oder OS („Operating
System"). Das OS,
das in privilegiertem Modus (auch Supervisermodus oder Kernmodus)
ausgeführt
wird, übernimmt
dabei die Kontrolle, übersetzt
die gelieferte virtuelle Adresse in eine entsprechende physikalische
Adresse. Es fordert nacheinander das Speichern der physikalischen Quellenadresse
des Transfers, die in dem Quellenregister erzielt wird, das Speichern
der Zieladresse in dem Zielregister und schließlich das Speichern der Größe in dem
Größenregister,
und dies ausgehend von der virtuellen Adresse der Register. Das
OS überwacht
dann den Transfer, der von dem DMA-Controller ausgehend von den
Informationen, die in den Registern stehen, ausgeführt wird,
und verständigt
das die Anfrage auslösende
Programm über das
Ergebnis des Transfers.
-
Die
generell verwendeten Speicheranweisungen sind des Typs: „STORE pa_src@dma_src_reg_adr", „STORE pa_dest@dma_dest_reg_adr", und „STORE
size@dmasize_reg_adr" wobei „pa_src" die physikalische
Quellenadresse ist, „pa_dest" die physikalische Zieladresse
ist, „size" die Größe der übertragenen Speicherzone
ist, „dma_src_reg_adr", „dma_dest_reg_adr" und „dma_size_reg_adr" jeweils die virtuellen
Adressen des Quellen-, Ziel- und Größenregisters sind. Die erste
oben stehende Anweisung bedeutet in natürlicher Sprache „die Information,
die der physikalischen Quellenadresse „pa_src" entspricht, speichern und zwar in das
Quellenadressregister des DMA-Controllers, dessen virtuelle Adresse „dma_src_reg_adr" lautet". Diese Anweisung
liefert daher ein virtuelles Adressargument „dma_src_reg_adr" und ein Datenargument „pa_src", das an der gelieferten
Adresse als Adressargument zu speichern ist.
-
Unter
Bezugnahme auf 1, die schematisch ein SoC-Beispiel wie oben
betrachtet darstellt, ist der Verlauf einer Programmierung des DMA-Controllers
gemäß dem früheren Stand
der Technik der Folgende: die virtuelle Adresse „dma_src_reg_adr" wird von der CPU
zu der MMU auf dem Bus virtueller Adressen VA angelegt. Die MMU übersetzt
sie in eine physikalische Adresse, prüft die Zugangsrechte zu dieser
physikalischen Adresse und legt sie dann auf den Bus physikalischer
Adressen PA an, durch den sie insbesondere dem DMA-Controller auf
dem allgemeinen Bus A bereitgestellt wird, der mit einer Anzahl Einheiten
verbunden ist, die zum Beispiel Festplattencontroller, den physikalischen
Speicher usw. enthält.
-
Parallel
dazu wird die physikalische Quellenadresse „pa_src" von der CPU an den Datenbus DAT angelegt,
ausgehend von welchem sie auf dem allgemeinen Datenbus D, der ebenfalls
mit der Anzahl Einheiten verbunden ist, angelegt wird.
-
Die
Anwendungen der Quellenadresse auf den allgemeinen Datenbus D und
der Adresse des Quellenregisters auf den allgemeinen Adressbus A erfolgen
in Abhängigkeit
von dem für
die Verwaltung des Busses ausgewählten
Protokoll. Je nach den Busverwaitungsprotokollen, wird die physikalische Adresse
des Quellenregisters zum Beispiel an den allgemeinen Adressbus A
quasi gleichzeitig mit dem Anlegen der physikalischen Quellenadresse „pa_src" auf den allgemeinen
Datenbus D angelegt, oder die Adresse des Quellenregisters wird
auf dem allgemeinen Adressbus A einen Taktgeberimpuls vor dem Positionieren
auf dem allgemeinen Datenbus D der physikalischen Quellenadresse
angelegt (für
ein Protokoll, bei dem die Adressen einen Taktgeberimpuls vor den
entsprechenden Daten positioniert werden), oder eine der Anlegungen
erfolgt auf der aufsteigenden Flanke, während die andere auf der absteigenden
Flanke erfolgt usw.
-
Die Übersetzung
wird von der MMU mit Hilfe einer Übersetzungstabelle ausgeführt.
-
Es
wurden kürzlich
mehrere Versuche unternommen, um den DMA-Controller direkt durch
ein Programm zu programmieren, das im Benutzermodus ausgeführt wird,
und nicht durch das OS. Dieser Bedarf ist insbesondere auf den sehr
großen
Anteil der Zeit zurückzuführen, die
für eine
Programmierung eines DMA-Controllers durch das OS erforderlich ist,
verglichen mit der Zeit des Transfers der Daten selbst, der von
dem DMA-Controller ausgeführt wird.
-
Eine
der angetroffenen Schwierigkeiten ist auf die Tatsache zurückzuführen, dass
die Register des DMA-Controllers mit physikalischen Adressen programmiert
werden müssen,
während
die Programme im Benutzermodus dort keinen Zugang haben und es insbesondere
aus Sicherheitsgründen nicht
wünschenswert
ist, dass sie Zugang bekommen.
-
Unterschiedliche
Lösungen
werden in den Dokumenten „User-Level DMA without
Operating System Kernel Modification" von Evangelos P. Markatos und Manolis
G. H. Katevenis, Institute of Computer Science, Science and Technology
Park of Crete, 1997 IEEE, „Protected
User-Level DMA for the Shrimp Network Interface" von M. A. Blumrich et al., Proc of
the 2nd International Symposium an High
Performance Computer Architecture, Seiten 154–165, Februar 1996, und „Integration
of Message Passing and Shared Memory in the Stanford Flash Multi-Processor" von J. Heinlein
et al., Proc. of the 6th International Conference
an Architectural Support for Programming Languages and Operating
Systems, Seiten 38–50,
1994, vorgeschlagen.
-
Gemäß diesen
Lösungen
führt man
ein implizites Adressieren (oder „Shadow Adressing") basierend auf der
Speicherungsanweisung „STORE" und dem Präfix 1 aus.
Der Nachteil dieser Lösungen
besteht darin, dass der adressierbare Speicherraum in der Praxis
um die Hälfte
verringert ist, was sehr nachteilig ist.
-
Weitere
Lösungen
werden in dem Dokument
FR 0 406
666 (STMicroelectronics) präsentiert, die den Vorteil aufweisen,
einen adressierbaren Speicherraum zu verlieren, der viel kleiner
ist als bei den oben erwähnten
Lösungen.
-
Die
in den Dokumenten
FR 0 407 763 ,
eingereicht am 12. Juli 2004, und
FR
0 408 084 , eingereicht am 21. Juli 2004 (STMicroelectronics),
dargelegten Lösungen
bewirken in der Praxis keinen Verlust an adressierbarem Speicherraum.
-
Bei
den Systemen auf Chip gemäß dem früheren Stand
der Technik, bei dem die Programmierung des DMA-Controllers von
dem OS gesteuert wurde, wird die Verwaltung der Diskontinuitäten, die in
dem physikalischen Speicherraum vorhanden sind, auf Softwarebasis
direkt von dem OS, das im privilegierten Modus funktioniert, verwaltet.
Da das OS Zugang zu den physikalischen Adressen hat, wirft diese
Verwaltung keine besonderen Probleme auf.
-
Wenn
zwei Speicherzonen durch zwei aufeinander folgende virtuelle Adressen
angegeben werden, die zwei physikalischen Adressen entsprechen,
die nicht aufeinander folgen, besteht eine Diskontinuität zwischen
diesen zwei Speicherzonen in dem physikalischen Speicherraum.
-
Die
Diskontinuitäten
erscheinen ausschließlich
in dem physikalischen Speicherraum. Es gibt keine Diskontinuität in dem
virtuellen Adressierraum.
-
Bei
bestimmten dieser Systeme auf Chip programmiert das OS den DMA-Controller,
um elementare Transfers durchzuführen,
die auf linearen Speicherstücken
ohne Diskontinuität
stattfinden. Am Ende jedes elementaren Transfers erzeugt der DMA-Controller
eine Unterbrechung, um das Ende des Transfers anzuzeigen. Das OS
programmiert ihn daher mit einem neuen linearen Speicherstück und so
weiter, bis die ganze zu transferierende, durch eine Anwendung am
Ursprung des globalen Transfers definierte Speicherzone übertragen
ist. Wenn der letzte elementare Transfer abgeschlossen ist, sendet
der DMA-Controller eine Unterbrechung an das OS, das dann die Anwendung über das
Beenden informiert.
-
Bei
bestimmten anderen dieser bekannten Systeme auf Chip tastet das
OS eine Seitentabelle des physikalischen Speicherraums ab, erzeugt
verkettete Listen, die die Diskontinuitäten anzeigen, und liefert bei
einer DMA-Programmierung
die verkettete relevante Liste an den DMA-Controller, der angepasst wurde, um
sich danach in Abhängigkeit
von dieser verketteten Liste zu programmieren (so genannter „Scatter-Gather"-Mechanismus), und
dies ohne Eingriff des OS.
-
Derartige
Techniken sind zum Beispiel in den Dokumenten
US 5 708 849 (Coke et al.) oder auch
EP 0 589 664 (IBM) erwähnt.
-
Bei
den Techniken, die das Programmieren des DMA-Controllers direkt durch ein Programm
erlauben, das im Benutzermodus ausgeführt wird und nicht mehr von
dem OS, die oben angegeben sind, ist es nicht mehr möglich, die
Lösungen
des früheren Stands
umzusetzen, um die Diskontinuität
zu verwalten, denn das OS wird für
die Programmierung nicht mehr herangezogen und das Benutzerprogramm sieht
nur einen linearen virtuellen Speicherraum.
-
Das
Dokument
US 6 615 292 beschreibt
ein Gerät,
das Datentransfers zwischen einem Peripheriegerät und dem Hauptspeicher ausführt, das
mit Hilfe logischer Quellenadressen in Zusammenhang mit dem Peripheriegerät und physikalischen
Zieladressen in dem Hauptspeicher
200 programmierbar und geeignet
ist, um zu erkennen, dass eine erste und eine zweite logische Quellenadresse,
die nacheinander geliefert werden, nicht aufeinander folgend sind.
-
Die
vorliegende Erfindung zielt darauf ab, eine Programmierlösung des
DMA-Controllers vorzuschlagen, die in dem Fall einer Programmierung
umgesetzt werden kann, die direkt durch ein Benutzerprogramm ausgeführt wird
und es erlaubt, die Diskontinuitäten
zu verwalten, die in dem physikalischen Speicherraum erscheinen.
-
Dazu
und gemäß einem
ersten Aspekt schlägt
die Erfindung ein Programmierverfahren eines DMA-Controllers in
einem System auf Chip vor, das eine Zentralverarbeitungseinheit,
eine Speicherverwaltungseinheit, die eine virtuelle Adresse in eine physikalische
Adresse gemäß einer
bestimmten Übersetzungstabelle übersetzen
kann, die ferner die Größe jeder
Seite aufweist, ein materielles Modul zum Prüfen der Kontiguität, einen
DMA-Controller, der mit einem Adressbus und einem Datenbus verbunden
ist, aufweist. Der Controller ist durch Anlegen von Programmierelementen
auf mindestens den Datenbus oder den Adressbus programmierbar, die
eine physikalische Quellenadresse, eine physikalische Zieladresse
und eine Größe der zu übertragenden Daten
aufweisen. Das System auf Chip verbindet jedes Benutzerprogramm
mit einem virtuellen Adressierraum und einem physikalischen Speicherraum, die
in Seiten organisiert sind, und derart, dass jede Adresse werthohe
Bits enthält,
die eine Seite angeben, die der Adresse zugewiesen ist.
-
Das
erfindungsgemäße Verfahren
weist die folgenden Schritte auf, die unter der Steuerung der Zentralverarbeitungseinheit
umgesetzt werden:
- – als Reaktion auf bestimmte
dedizierte Anweisungen eines Benutzerprogramms, das eine Größeninformation
und eine virtuelle Programmieradresse aus einer virtuellen Quellenadresse
und einer virtuellen Zieladresse liefert, wird die virtuelle Programmieradresse
am Eingang der Speicherverwaltungseinheit geliefert;
- – die
Speicherverwaltungseinheit übersetzt
die virtuelle Programmieradresse in eine entsprechende physikalische
Programmieradresse; und
- – mindestens
ein erster Unterblock besteht aus einem Speicherunterraum ohne Diskontinuität, der von
einer physikalischen Anfangsadresse gleich der physikalischen Programmieradresse
und einer physikalischen Endadresse gleich der physikalischen Adresse
identifiziert wird, die unmittelbar einer ersten Diskontinuität in einem
Teil des entsprechenden physikalischen Speicherraums vorausgeht,
der gemäß der Übersetzungstabelle dem
Teil des adressierbaren virtuellen Raums entspricht, der an der
virtuellen Programmieradresse anfängt und mit gleicher Größe wie die
Information mit der Größe, die
von dem Benutzerprogramm geliefert wird, wobei die erste Diskontinuität durch
das Diskontinuitätsmodul
in Abhängigkeit
von Informationen, die von der Speicherverwaltungseinheit geliefert
werden und in der Übersetzungstabelle
gespeichert sind, bestimmt wird;
- – mindestens
ein Teil der Programmierelemente, die für den DMA-Controller bestimmt
sind, wird in Abhängigkeit
von der physikalischen Programmieradresse und mindestens dem ersten
identifizierten Unterblock definiert;
- – die
Programmierelemente werden an den DMA-Controller durch Anlegen auf
mindestens den Adressbus oder den Datenbus geliefert.
-
Gemäß einem
zweiten Aspekt schlägt
die Erfindung ein System auf Chip vor, das eine Zentralverarbeitungseinheit,
eine Speicherverwaltungseinheit, die eine virtuelle Adresse in eine
physikalische Adresse gemäß einer
bestimmten Übersetzungstabelle übersetzen
kann, die ferner die Größe jeder Seite
enthält,
ein materielles Kontiguitätsprüfmodul, einen
DMA-Controller, der mit einem Adressbus und einem Datenbus verbunden
ist, aufweist. Der Controller ist durch Anlegen von Programmierelementen, die
eine physikalische Quellenadresse, eine physikalische Zieladresse
und eine Größe der zu übertragenden
Daten aufweist, auf mindestens den Datenbus oder den Adressbus programmierbar.
-
Das
erfindungsgemäße System
auf Chip weist für
jedes Benutzerprogramm einen virtuellen Adressierraum und einen
physikalischen Speicherraum auf, die in Seiten organisiert und derart
sind, dass jede Adresse werthohe Bits aufweist, die eine mit der
Adresse verbundene Seite anzeigen.
-
In
diesem System auf Chip und als Antwort auf bestimmte dedizierte
Anweisungen eines Programms, das eine Größeninformation und eine virtuelle
Programmieradresse aus einer virtuellen Quellenadresse und einer
virtuellen Zieladresse liefert, kann die Speicherverwaltungseinheit
die virtuelle Programmieradresse in eine entsprechende physikalische
Programmieradresse übersetzen;
und
- – das
materielle Kontiguitätsprüfmodul kann
mindestens einen ersten Speicherraumunterblock ohne Diskontinuität bilden,
der durch eine physikalische Anfangsadresse gleich der physikalischen
Programmieradresse und eine physikalische Endadresse gleich der
physikalischen Adresse identifiziert ist, die unmittelbar einer
ersten Diskontinuität
in einem entsprechenden physikalischen Speicherraum vorausgeht,
der gemäß der Übersetzungstabelle
dem Teil des virtuellen adressierbaren Raums entspricht, der an
der virtuellen Programmieradresse anfängt und mit einer Größe gleich
der Größeninformation,
die von dem Benutzerprogramm geliefert wird, wobei diese erste Diskontinuitätslage durch
das Diskontinuitätsmodul
in Abhängigkeit
von Informationen bestimmt wird, die von der Speicherverwaltungseinheit
geliefert werden und in der Übersetzungstabelle
enthalten sind;
und das Kontinuitätsprüfmodul kann mindestens einen
Teil der Programmierelemente, die für den DMA-Controller bestimmt
sind, in Abhängigkeit
von dieser physikalischen Programmieradresse und mindestens dem
identifizierten ersten Unterblock definieren;
und das System
auf Chip kann die Programmierelemente an den DMA-Controller durch
Anlegen auf mindestens den Adressbus oder den Datenbus liefern.
-
Weitere
Merkmale und Vorteile der Erfindung ergeben sich bei der Lektüre der folgenden
Beschreibung. Diese ist rein veranschaulichend und muss unter Bezugnahme
auf die anliegenden Zeichnungen gelesen werden, auf welchen:
-
1 eine
Darstellung eines Systems auf Chip des früheren Stands der Technik ist;
-
2 ein
System auf Chip in einer Ausführungsform
der Erfindung darstellt;
-
3 die
Konfiguration des Quellenteils PVS des virtuellen
adressierbaren Raums und des entsprechenden Quellenteils PPS in dem physikalischen Speicherraum gemäß einer
Ausführungsform
der Erfindung darstellt;
-
4 die
verschiedenen Schritte eines Prozesses zum Bestimmen der Diskontinuität gemäß der Erfindung
darstellt;
-
5 die
verschiedenen Elemente darstellt, die auf den Datenbus BD und den
Adressbus BA bei einem Programmieren eines DMA-Controllers bei einer
Ausführungsform
der Erfindung angelegt werden.
-
Bei
der unten beschriebenen Ausführungsform
wird von einem System auf Chip 1 ausgegangen, das mit einer
32-Bit- Architektur
verbunden ist, so dass eine virtuelle Adresse die Form einer Zahl hat,
die eine Seitenadresse bildet, die auf den werthohen Bits codiert
ist, oder VPN (im Angelsächsischen „Virtual
Page Number"), gefolgt
von einem Versatz (im Angelsächsischen „offset") in der Seite, codiert
auf den wertniedrigen Bits.
-
Das
System auf Chip
1, das unter Bezugnahme auf
2 beschrieben
ist, und bei dem die Erfindung gemäß der hier beschriebenen Ausführungsform
umgesetzt ist, sowie die der Programmierung dedizierten unten betrachteten
Anweisungen, entsprechen einem ähnlichen
Programmiermodus wie der, der in dem Dokument
FR 0 407 763 dargelegt ist.
-
Die
Erfindung kann jedoch in jedem System auf Chip umgesetzt werden,
das das Programmieren eines DMA-Controllers
direkt durch ein Benutzerprogramm erlaubt. Insbesondere kann es
sich um ein System auf Chip handeln, das eine „Shadow Adressing"-Technik anwendet
oder ein System, das denen der Dokumente
FR 0 406 666 oder
FR 0 408 084 entspricht.
-
Das
System auf Chip 1, das auf 2 dargestellt
ist und einer Ausführungsform
der Erfindung entspricht, weist eine Zentralverarbeitungseinheit oder
CPU 2 auf, auf der die Benutzerprogramme ausgeführt werden.
-
Das
System auf Chip 1 weist ferner ein materielles Modul („hardware") zum Kontiguitätsprüfen 3 auf,
das ein Programmieradressregister 31, ein Anfangsgrößenregister 32,
ein Quellenunterblockgrößenregister 33,
ein Zielunterblockgrößenregister 33', ein Register
der ersten virtuellen Adresse 34, ein Register der ersten
Größe 35,
ein Register der ersten physikalischen Adresse 36, ein
Register der zweiten virtuellen Adresse 37, ein Register
der zweiten Größe 38 und
ein Register der zweiten physikalischen Adresse 39 aufweist.
-
Das
System auf Chip 1 weist ferner eine MMU 4, ein
Gesamtregister 5, ein Identifikatorregister 6,
ein Pufferregister 7, vier Multiplexer 8, 8, 9' und 9'' und einen Steuerblock 10 auf.
-
Das
System auf Chip 1 weist ferner einen DMA-Controller 11 auf,
der eine Einheit 12 von Registern aufweist, die erforderlich
sind, um das Programmieren des DMA-Transfers auszuführen. Diese Einheit 12 von
Registern weist ein Größenregister 13, ein
Quellenregister 14 und ein Zielregister 15 auf. Diese
Register 13, 14, 15 der Größe, Quelle
und des Ziels können
Programmierdaten speichern, die jeweils die Größe, Quellenadresse und Zieladresse des
durchzuführenden
DMA-Transfers aufweisen.
-
Der
DMA-Controller 11 weist auch eine Zustandsmaschine 17 auf,
die ein Register der Einheit 12 auswählen und darin Programmierdaten
speichern kann. Die Zustandsmaschine 17 weist ferner ein
Atomizitätsregister 18 auf.
-
Die
MMU 4 übersetzt
wie bekannt eine virtuelle Adresse zu 32 Bits, die ihr am Eingang
geliefert wird, indem sie die Übersetzung
nur der werthohen Bits, die die Seite anzeigen, ausführt. Sie übersetzt daher
die VPN in eine physikalische Seitennummer oder PPN (im Angelsächsischen „Physical
Page Number") mit
Hilfe einer vorbestimmten Tabelle T. Die Übersetzungstabelle T definiert
ferner die Größe der physikalische
Seite, die durch die PPN angegeben wird, sowie einen virtuellen
Adressierraum, der jedem Benutzerprogramm eigen ist, mit Hilfe eines ASID.
Die MMU 4 prüft
auch, ob das Benutzerprogramm, das am Ursprung der Übersetzung
ist, wirklich die dem Zugang zu der durch die virtuelle am Eingang
gelieferte Adresse adressierten Speicherzone besitzt.
-
Ein
Adressbus BA verbindet den Multiplexer 8', den DMA- Controller 11, Peripheriegeräte DP, einen
RAM-Speicher usw.
-
Ebenso
verbindet ein Datenbus BD den Multiplexer 9', den DMA-Controller 11,
die Peripheriegeräte
DP und den RAM-Speicher.
-
Ein
Bus virtueller Adressen VA weist einen Zweig auf, der die CPU 2 mit
einem Eingang des Multiplexers 8 verbindet.
-
Ein
weiterer Zweig des Busses virtueller Adressen VA verbindet die CPU 2 mit
dem Kontiguitätsprüfmodul 3.
-
Der
Bus virtueller Adressen VA wird von der CPU 2 verwendet,
um der MMU 4 über
den Multiplexer 9 und das Kontiguitätsprüfmodul 3 virtuelle Adressen
in dem Rahmen bestimmter Programmanweisungen des DMA-Controllers 11 zu
liefern. Er wird von der CPU 2 auch verwendet, um der MMU 4 über den
Multiplexer 8 virtuelle Adressen außerhalb bestimmter Programmieranweisungen
des DMA-Controllers 11 zu liefern. Ein Ausgangsdatenbus
DATA_O verbindet die CPU 2 mit dem Kontiguitätsprüfmodul 3 und
dem Multiplexer 9, der ferner an den Multiplexer 9' angeschlossen
ist.
-
Der
Multiplexer 9 ist ferner mit dem Kontiguitätsprüfmodul 3 verbunden.
-
Das
Pufferregister 7 ist mit dem Multiplexer 9' verbunden.
-
Ein
Eingangsdatenbus DATA_I verbindet das Kontiguitätsprüfmodul 3 mit der CPU 2.
(Eigentlich können
die Busse DATA_O und DATA_I ein gleicher bidirektionaler physikalischer
Bus sein.)
-
Der
Eingang der MMU 4 ist mit dem Multiplexer 8 verbunden.
-
Der
Ausgang der MMU 4 ist mit dem Pufferregister 7,
mit dem Identifikatorregister 6 und dem Multiplexer 8' verbunden, der
mit dem Identifikatorregister 6 und dem Gesamtregister 5 verbunden
ist.
-
Der
Steuerblock 10 ist mit dem Kontiguitätsprüfblock 3 und den Multiplexern 8, 8', 9 und 9' verbunden (diese
Verbindungen sind auf 2 nicht dargestellt).
-
Der
Steuerblock 10 steuert die Multiplexer insbesondere in
Abhängigkeit
von Anweisungen, die von der CPU empfangen werden, um ausgehend
von Elementen, die am Eingang an die Multiplexer geliefert werden,
Ausgangselemente zu bilden.
-
Der
Steuerblock 10 steuert ferner das Kontiguitätsmodul 3,
um Informationen zu verarbeiten, die auf dem Adressbus VA oder dem
Datenbus DATA_O gegenwärtig
sind, wenn diese Informationen DMA-Programmierungen betreffen.
-
Die
Einheit 12 von Registern des DMA-Controllers 11 ist
mit einer physikalischen Basisunteradresse PA_DMA_BASE verbunden,
die eine Seitenadresse ist, die auf den werthohen Bits codiert ist.
-
Die
Zustandsmaschine 17 des DMA-Controllers 11 kann,
wenn sie die Gegenwart der Basisunteradresse PA_DMA_BASE in den
werthohen Bits eines Worts M, das auf dem Adressbus BA platziert
wird, erfasst, ein bestimmtes Register aus den Registern 13, 14, 15 der
Einheit 12 in Abhängigkeit
von dem aktuellen Zustand der Zustandsmaschine 17 gemäß einem
Zyklus C geordneter Zustände,
der einen „Größen"-Ausgangszustand, dann einen „Quellen"-Zustand und dann
einen „Größen"-Zustand, dann einen „Ziel"-Zustand aufweist,
auswählen.
Die Zustandsmaschine 17 speichert in dem ausgewählten Register
die Daten, die auf dem Datenbus BD sind.
-
Bei
der unten beschriebenen Ausführungsform
unter Bezugnahme auf 2 kann die Zustandsmaschine 17,
bevor sie effektiv das Register auswählt, auf dessen Adresse sie
zeigt, in einem Wort M, das auf den Adressbus BA angelegt wird und in
werthohen Bits die Unteradresse PA_DMA_BASE enthält, die 8 Bits, die auf die
Unteradresse folgen und den ASIDP des Benutzerprogramms
codieren, abfangen.
-
Wenn
die Zustandsmaschine 17 in dem Ausgangszustand ist, werden
diese 8 Bits in das Atomizitätsregister 18 gespeichert.
Die Zustandsmaschine 17 zeigt dann auf das Größenregister 13,
sie wählt das
Größenregister 13 aus
und speichert dort die Daten, die dann auf den Datenbus BD angelegt
werden.
-
Wenn
die Zustandsmaschine 17 auf das Größenregister 13 außerhalb
des Ausgangszustands zeigt, werden auf dem Quellenregister 14 oder
dem Zielregister 15 die 8 Bits, die aus dem Wort M, das auf
den Datenbus BA angelegt wird, extrahiert wurden, mit denen verglichen,
die in dem Atomizitätsregister 18 gegenwärtig sind.
-
Sind
sie nicht gleich, wird die gezeigte Registerauswahl nicht ausgeführt, und
die auf den Datenbus BD gegebenen Daten werden nicht gespeichert.
-
Sind
sie gleich, wird das gezeigte Register ausgewählt, und das Speichern der
auf den Bus BD angelegten Daten erfolgt in dem ausgewählten Register.
-
Ein
Benutzerprogramm P wird auf der CPU 2 ausgeführt, um
einen Programmiervorgang des DMA-Controllers 11 mit Hilfe
einer virtuellen Quellenadresse VA_SRC zu 32 Bits, einer virtuellen
Zieladresse VA_DEST von 32 Bits und einer Größe t0 der zu übertragenden
Speicherzone auszuführen.
-
Wie
oben erwähnt,
ist die Adresse VA_SRC eine Zahl, die werthohe Bits VPNS0 aufweist,
die eine virtuelle Seite PS0 anzeigen, und
wertniedrige Bits aufweist, die einen Versatz dS in
der virtuellen Seite PS0 anzeigen.
-
Die
Adresse, die von der Summe der Adresse VA_SRC und der Größe t0 angezeigt
wird, ist eine Zahl, die werthohe Bits VPNSn aufweist,
die eine virtuelle Seite PSn anzeigen, und
wertniedrige Bits aufweist, die einen Versatz dS' in der Seite PSn anzeigen.
-
Die
virtuelle Quellenadresse und die Größe t0 definieren einen Quellenteil
PVS des virtuellen adressierbaren Raums,
der auf 4 dargestellt ist, der sich
zwischen der virtuellen Adresse VA_SRC und der virtuellen Adresse
befindet, die von der Summe der Adresse VA_SRC und der Größe t0 angegeben
wird. Der Teil PVS erstreckt sich auf n
virtuelle, benachbarte Seiten PS0, ...,
PSn, die jeweils ihrer VPN-Nummer zugewiesen
sind: VPNS0, ..., VPNSn.
-
Der
Teil PVS weist Speicherzonen der Seite PS0 auf, deren Adresse werthohe Bits aufweist,
die gleich VPNS0 sind, und deren Versatz
größer oder gleich
dem Versatz dS ist. Der Teil PVS weist
sämtliche Seiten
PS1. bis PSn-1 auf
und weist die Speicherzonen der Seite PSn auf,
deren Adresse werthohe Bits aufweist, die gleich VPNSn sind
und deren Versatz kleiner oder gleich dem Versatz dS' ist.
-
Jede
Seite PSi li=1 bis n entspricht einer physikalischen
Seite P'Si, die einer jeweiligen PPN-Nummer (PPNi li=1 bis n) in dem physikalischen Speicherraum
zugewiesen ist. Jede PPNSi-Nummer wird von der Übersetzungstabelle
T ausgehend von der VPNSi-Nummer bestimmt.
-
Die Übersetzungstabelle
T enthält
ferner die Größe tSi jeder physikalischen Seiten P'Sn.
-
Der
Teil PVS des adressierbaren virtuellen Raums
entspricht daher einem Quellenteil PPS des physikalischen Speicherraums.
Dieser Teil PPS des physikalischen Speicherraums
umfasst die Speicherzonen der Seite P'S0, deren Adresse
werthohe Bits gleich PPNS0 aufweist, und
deren Versatz größer oder
gleich dem Versatz dS ist. Der Teil PPS weist sämtliche Seiten P'S1 bis
P'Sn-1 auf,
die jeweils den Nummern PPNS1 bis PPNSN-1 zugewiesen sind, und weist die Speicherzonen
der Seite P'Sn auf, deren Adresse werthohe Bits gleich
PPNSn aufweist, und deren Versatz kleiner
oder gleich dem Versatz dS' ist.
-
Diese
physikalischen Seiten können
sich nicht nebeneinander in dem physikalischen Speicherraum befinden.
-
Bei
der hier beschriebenen Ausführungsform weist
der Teil PPS des physikalischen Speicherraums eine Anzahl ks von Diskontinuitäten zwischen physikalischen
Seiten auf.
-
Zum
Beispiel, wie auf 3 veranschaulicht, sind die
Seiten P'S0 und P'S1 nebeneinander, während eine erste Diskontinuität DS1 zwischen den Seiten P'S1 und P'S2,
eine zweite Diskontinuität
DS2 zwischen den Seiten P'Sj und
P'Sj+1 usw.
auftritt.
-
In
gleicher Weise weist die virtuelle Zieladresse VA_DEST werthohe
Bits gleich VPND0 auf, die die virtuelle
Seite PD0 anzeigen, und weist wertniedrige
Bits auf, die einen Versatz dD auf der Seite PD0 anzeigen.
-
Die
Adresse gleich der Summe der Adresse VA_DEST und der Größe t0 weist
werthohe Bits gleich einer Nummer VPNDm auf,
die die virtuelle Seite PDm zeigt, und wertniedrige
Bits, die einen Versatz dD' in der Seite PDm anzeigen.
-
Die
virtuelle Zieladresse und die Größe t0 definieren
einen Teil PVD des adressierbaren virtuellen
Raums, der sich zwischen der virtuellen Adresse VA_DEST und der
virtuellen Adresse befindet, die durch die Summe der Adresse VA_DEST
und der Größe t0 angegeben
wird. Der Teil PVD erstreckt sich auf m
virtuellen, benachbarten Seiten PD0, PDm mit den jeweiligen VPN-Nummern VPND0, ..., VPNDm. Der Teil
PVD weist die Speicherzonen der Seite PD0 auf, deren Adresse werthohe Bits gleich
VPND0 aufweist, und deren Versatz größer oder
gleich dem Versatz dD ist. Der Teil PVD weist sämtliche Seiten PD1 bis
PDm-1 auf und enthält die Speicherzonen der Seite
PDm, deren Adresse werthohe Bits gleich
VPNDm aufweist und deren Versatz kleiner
oder gleich dem Versatz dD' ist.
-
Jede
Seite PDi ji=1 bis m entspricht einer physikalischen
Seite P'Di, die einer jeweiligen PPN-Nummer (PPNDi ji=1 bis m) in dem physikalischen Speicherraum zugewiesen
ist. Jede Nummer PPNDi wird durch die Übersetzungstabelle
T ausgehend von der Nummer VPNDi bestimmt.
-
Die Übersetzungstabelle
T enthält
ferner die Größe tDi jeder physikalischen Seite P'Di.
-
Der
Teil PVD des adressierbaren virtuellen Raums
entspricht daher einem Teil PPD des physikalischen
Speicherraums. Dieser Teil PPD des physikalischen
Speicherraums besteht aus dem Teil der Seite P'D0 über den
Versatz dD hinaus, sämtliche Seiten P'D1 bis
P'Dm-1,
und weist den Teil der Seite P'Dm vor dem Versatz dD' auf.
-
Der
Teil PPD des physikalischen Speicherraums
weist kD Diskontinuitäten zwischen physikalischen
Seiten auf.
-
Das
Benutzerprogramm P weist zwei aufeinander folgende Sequenzen Seq1
und Seq2 mit jeweils mindestens zwei Anweisungen auf, die nacheinander
ausgeführt
werden.
-
Jede
Sequenz Seq1 oder Seq2 weist jeweils die darauf folgenden Anweisungen
mit jeweiligen Argumenten auf:
- – die Anweisung „Translate" (Anweisung „T"), deren Format „Translate
(argVA; argD)" ist,
wobei „argVA" ein virtuelles Adressargument
und „argD" ein Datenargument
ist, erlaubt es insbesondere, die als Adressargument gelieferte
virtuelle Adresse in eine entsprechende physikalische Adresse umzuwandeln
und diese physikalische Adresse in dem Pufferregister 7 zu
speichern;
- – die
Anweisung „StoreDMA" (Anweisung „S"), deren Format „StoreDMA
argVA" ist, wobei „argVA" ein Argument virtueller
Adresse ist, erlaubt es insbesondere, die in dem Pufferregister 7 gespeicherte
physikalische Adresse auf den Datenbus BD anzulegen.
-
Die
erste Sequenz Seq1 weist auf:
„Translate (VA_SRC; t0)" (Anweisung „T1"), dann:
„StoreDMA
VA_SRC" (Anweisung „S1").
-
Die
zweite Sequenz Seq2 weist auf:
„Translate (VA_DEST; t0)" (Anweisung „T2"), dann:
„StoreDMA
VA_DEST" (Anweisung „S2").
-
Die
CPU 2 kann beim Ausführen
der Anweisung Translate durch ein Benutzerprogramm das gelieferte
virtuelle Adressargument (hier VA_SRC) auf den Bus platzieren, das
gelieferte Datenargument (hier t0) auf den Datenbus DATA_O geben
und den Leiter f1 auf hoch stellen.
-
Die
Quellenunterblockgrößenregister 33 und Zielunterblockgrößenregister 33' werden auf
Null gestellt.
-
Im
Anschluss an das Setzen des Leiters f1 auf hoch, steuert der Steuerblock 10 das
Kontiguitätsprüfmodul 3,
damit es die virtuelle Adresse VA_SRC speichert, die auf den Adressbus
VA in dem Programmieradressregister 31 angelegt wird, und
die Transfergröße t0, die
auf den Datenbus DATA_O in dem Anfangsgrößenregister 32 angelegt
wird.
-
Parallel
dazu wird die virtuelle Adresse VA_SRC an den Multiplexer 8 geliefert,
der von dem Steuerblock 10 gesteuert wird, um sie an die
MMU 4 zu liefern.
-
Die
MMU 4 übersetzt
das gelieferte virtuelle Adressargument VA_SRC in physikalische
Adresse PA_SRC.
-
Die Übersetzung
durch die MMU 4 wird durchgeführt, indem mit Hilfe der Übersetzungstabelle
T und ausgehend von der Nummer VPNS0 der
virtuellen Seite PS0, angezeigt durch die
virtuelle Adresse VA_SRC, die entsprechende Nummer PPNS0 der physikalischen
Seite P'S0 bestimmt wird.
-
Die Übersetzungstabelle
T definiert auch die Größe tS0 der physikalischen Seite P'S0.
-
Die
MMU 4 liefert an das Kontiguitätsprüfmodul 3 die Größe tS0 und die PPNS0-Nummer.
Das Kontiguitätsprüfmodul 3 speichert
die Größe tS0 in dem Register 35 der ersten
Größe. Es bestimmt
die physikalische Adresse PA_SRC0 des Anfangs der Seite P'S0,
die in werthohen Bits die Nummer PPNS0 und
in wertniedrigen Bits einen Versatz gleich Null aufweist, und speichert
sie in das Register 36 der ersten physikalischen Adresse.
-
Das
Kontiguitätsprüfmodul 3 bestimmt
ferner ausgehend von der zuvor empfangenen virtuellen Adresse VA_SRC
die virtuelle Adresse VA_SRC0, die dem Anfang der Seite PS0 entspricht, und registriert sie in das
Register 34 der ersten virtuellen Seitenadresse. Diese
virtuelle Adresse VA_SRC0 weist werthohe Bits gleich VPNS0 und einen Versatz gleich Null auf.
-
Dann,
sobald diese Register der ersten virtuellen Adresse 34,
ersten physikalischen Adresse 36 und ersten Größe 35 ausgefüllt sind,
wird der darauf folgende Prozess, der in
-
4 dargestellt
ist, gestartet: Das Kontiguitätsprüfmodul 3 bestimmt
eine virtuelle Adresse VA_SRC1, indem sie die Größe t0,
die in dem Register 35 der ersten Seitengröße gespeichert
ist, und die virtuelle Adresse VA_SRC0, die in dem Register 34 der
ersten virtuellen Adresse gespeichert ist, summiert. Es speichert
die virtuelle Adresse VA_SRC1 in das Register 37 der zweiten
virtuellen Adresse. Diese virtuelle Adresse VA_SRC1 ist die Adresse
des Anfangs der Seite PS1, die auf die Seite
PS0 in dem Teil des adressierbaren virtuellen
Raums PVS folgt. Diese virtuelle Adresse
VA_SRC1 weist in werthohen Bits die Nummer VPNS1 auf.
-
Das
Kontiguitätsprüfmodul 3 liefert
die in dem Register 37 der zweiten virtuellen Adresse gespeicherte
virtuelle Adresse VA_SRC1 an den Multiplexer 8, der von
dem Steuerblock 10 gesteuert wird, um sie an die MMU 4 zu
liefern.
-
Die
MMU 4 übersetzt
die gelieferte virtuelle Adresse VA_SRC1 in eine physikalische Adresse PA_SRC1,
die die Nummer PPNS1 in werthohen Bits aufweist,
mit Hilfe der Übersetzungstabelle
T und ausgehend von der Nummer VPNS1 der
virtuellen Seite, die von der virtuellen Adresse VA_SRC1 angezeigt
wird.
-
Die Übersetzungstabelle
T definiert auch die Größe tS1 der physikalischen Seite P'S1.
-
Die
MMU 4 liefert die Größe tS1 und die Nummer PPNS1 an
das Kontiguitätsprüfmodul 3.
Das Kontiguitätsprüfmodul 3 speichert
die Größe tS1 in dem Register 38 der zweiten
Größe.
-
Dann
bestimmt es die physikalische Adresse PA_SRC1, die der Adresse des
Anfangs der Seite P'S1 entspricht, die in werthohen Bits die
Nummer PPNS1 und einen Versatz gleich Null
aufweist. Es speichert die physikalische Adresse PA_SRC1 in das Register 39 der
zweiten physikalischen Adresse.
-
Das
Kontiguitätsprüfmodul 3 summiert
die Größe tS0 und die physikalische Adresse PA_SRC0 und
vergleicht die erzielte Adresse mit der physikalischen Adresse PA_SRC1.
-
Wenn
sie gleich sind, fügt
man die Größe tS0 zu der in dem Quellenunterblockregister 33 gespeicherten
Nummer hinzu. Dann ersetzt man die in dem Register 34 der
ersten virtuellen Adresse gespeicherte virtuelle Adresse VA_SRC0
durch die virtuelle Adresse VA_SRC1, die in dem Register 37 der
zweiten virtuellen Adresse gespeichert ist, die physikalische Adresse
PA_SRC0 in dem Register 36 der ersten physikalischen Adresse
durch die physikalische Adresse PA_SRC1, die in dem Register 39 der
zweiten physikalischen Adresse gespeichert ist, und die in dem Register
der ersten Größe 35 gespeicherte
Größe tS0 durch die in dem Register der zweiten
Größe 38 gespeicherte
Größe tS1.
-
Man
wiederholt diesen Prozess, bis eine Ungleichheit bei einem Vergleichsschritt
bestimmt wird oder bis der Vergleichsschritt zu dem Bestätigen der Gleichheit
zwischen einerseits der physikalischen Adresse PA_SRCn (Anfangsadresse
der Seite P'Sn) und andererseits der Summe der Größe tSn-1 und der physikalischen Adresse PA_SRCn-1
(Anfangsadresse der Seite P'Sn-1) gelangt. In diesem letzteren Fall bedeutet
das, dass keine Diskontinuität
erfasst wurde.
-
Wenn
die erste Ungleichheit zwischen einerseits einem Teil der Summe
der Größe tSj, die in dem Register 35 der ersten
Größe gespeichert
ist, und der physikalischen Adresse PA_SRCj des Anfangs der Seite
P'sj,
die in dem Register 36 der ersten physikalischen Adresse
gespeichert ist, und andererseits mit der physikalischen Adresse
PA_SRCj+1 des Anfangs der Seite P'Sj+1, die in
dem Register 39 der zweiten physikalischen Adresse gespeichert
ist, bestimmt wird, zeigt sie die Gegenwart einer ersten Diskontinuität DS1 auf, die sich zwischen den physikalischen Seiten
P'Sj und
P'Sj+1 befindet.
-
Das
Register 38 der zweiten Größe enthält daher die Größe tSj+1 der Seite P'Sj+1, das Register 34 der
ersten virtuellen Adresse enthält
die virtuelle Adresse VA_SRCj des Anfangs der ersten Seite PSj und das Register 37 der zweiten
virtuellen Adresse enthält
die virtuelle Adresse PA_SRCj+1 des Anfangs der ersten Seite PSj+1
-
Wenn
eine Ungleichheit wie oben angegeben erfasst wurde, wird ein erster
Unterblock SBS1, der keine Diskontinuität aufweist,
durch das Modul 3 bestimmt. Er beginnt an der physikalischen
Adresse PA_SRC und endet am Ende der physikalischen Seite P'Sj.
-
Das
Kontiguitätsprüfmodul 3 bestimmt
die Größe tBS1, die dem ersten Unterblock SBS1 entspricht, ausgehend von dem Versatz
ds, der durch die Adresse VA_SRC angegeben
wird, die in dem Programmieradressregister 31 gespeichert
ist, und die Summe der Seitengrößen, die
in dem Quellenunterblockgrößenregister 33 gespeichert
ist.
-
Die
so erzielte Größe tBS1 wird in diesem Register 33 gespeichert.
-
Bei
dem Seitenkonfigurationsbeispiel, das auf 4 dargestellt
ist, bestimmt das Kontiguitätsprüfmodul 3 nach
dem Feststellen einer ersten Gleichheit bei der ersten Ausführung des
Prozesses eine virtuelle Adresse VA_SRC2, indem es die Größe tS1 und die virtuelle Adresse VA_SRC1 summiert. Diese
virtuelle Adresse VA_SRC2 ist die Adresse des Anfangs der Seite
PS2, die auf die Seite PS1 in
dem Teil adressierbaren virtuellen Raums PVS folgt.
Diese virtuelle Adresse VA_SRC2 weist in werthohen Bits die Nummer
VPNS2 auf.
-
Dann
liefert das Kontiguitätsprüfmodul 3 die virtuelle
Adresse VA_SRC2 an den Multiplexer 8, der von dem Steuerblock 10 gesteuert
wird, um sie an die MMU 4 zu liefern.
-
Die
MMU 4 übersetzt
die gelieferte virtuelle Adresse VA_SRC2 in eine physikalische Adresse PA_SRC2,
die die Nummer PPNS2 in werthohen Bits aufweist,
mit Hilfe der Übersetzungstabelle
T und ausgehend von der Nummer VPNS2 der
virtuellen Seite, die von der virtuellen Adresse VA_SRC1 angezeigt
wird.
-
Die Übersetzungstabelle
T definiert auch die Größe tS2 der physikalischen Seite P'S2.
-
Die
MMU 4 liefert die Größe tS2 und die Nummer PPNS2 an
das Kontiguitätsprüfmodul 3.
-
Dieses
bestimmt die physikalische Adresse PA_SRC2, die der Adresse des
Anfangs der Seite P'S2 entspricht, die in werthohen Bits die
Nummer PPNS2 und einen Versatz gleich Null
aufweist.
-
Das
Kontiguitätsprüfmodul 3 summiert
die Größe tS1 und die physikalische Adresse PA_SRC1 und
vergleicht die erzielte Adresse mit der physikalischen Adresse PA_SRC2.
-
Sie
sind nicht gleich. Die erste Diskontinuität wird daher durch das Kontiguitätsprüfmodul 3 zwischen
den Seiten P'S1 und P'S2 aufgezeigt.
-
Der
erste Unterblock ohne Diskontinuität beginnt daher an der physikalischen
Adresse PA_SRC und endet an dem Ende der Seite P'S1.
-
Parallel
zu diesem wiederholten Kontiguitätsprüfprozess,
der von dem Modul 3 abgewickelt wird, werden die unten
beschriebenen Schritte ausgeführt.
-
Die
MMU 4 liefert die physikalische Adresse PA_SRC zum Speichern
an das Pufferregister 7. Sie extrahiert ferner aus der Übersetzungstabelle
T den ASIDP, der das Benutzerprogramm P
identifiziert, von dem die Anweisung T1 stammt, und liefert ihn
zum Speichern an das Identifikatorregister 6. In dem hier beschriebenen
Beispiel sind die ASID auf 8 Bits codiert.
-
Dann
wird ein Wort Mt1, das gleiche werthohe Bits
an der Basisunteradresse PA_DMA_BASE gefolgt von Bits aufweist,
die den Identifikator ASIDP codieren, der
von der MMU 4 im Anschluss an die Übersetzung von VA_SRC geliefert
wird, gebildet und an den Eingang des Multiplexers 8' geliefert.
-
Der
Steuerblock 10 kann als Reaktion auf das Stellen auf hoch
des Leiters f1 die Multiplexer 9 und 9' derart steuern,
dass die Daten (die Größe t0), die
dabei von der CPU 2 geliefert werden, auf den Datenbus
BD angelegt werden. Er kann ferner den Multiplexer 8' so steuern,
dass das Wort Mt1 auf den Adressbus BA angelegt
wird.
-
Die
Anlegungen auf den Bus BA und den Bus BD erfolgen unter der Kontrolle
des Steuerblocks 10 in jeweiligen Augenblicken, die miteinander
verbunden sind (zum Beispiel quasi gleichzeitig oder eines einen
Taktgeberimpuls vor dem anderen usw.) und in Abhängigkeit von dem ausgewählten Verwaltungsprotokoll
der Busse.
-
Die
Zustandsmaschine 17 des DMA-Controllers 11 befindet
sich ursprünglich
in ihrem Ausgangszustand einer DMA-Transferprogrammierung und zeigt daher
auf das Größenregister 13.
Wenn sie die Unteradresse PA_DMA_BASE in den werthohen Bits des
Worts Mt1, das auf den Adressbus BA angelegt wird,
erfasst, extrahiert sie die 8 Bits, die auf die Unteradresse folgen,
die den ASIDP codieren, und speichert sie
in dem Atomizitätsregister 18.
Dann wählt sie
das Größenregister 13 aus
und führt
dort das Speichern der Daten (die Größe t0) aus, die dann auf den
Datenbus BD angelegt werden. Sie verstellt ihren Pointer so, dass
er auf das Quellenregister 14 gemäß dem Zyklus C der Zustandsmaschine 17 zeigt.
-
Bei
der Ausführung
der zweiten Anweisung S1 „StoreDMA
VA_SRC" der Sequenz
Seq1 durch das Benutzerprogramm P, platziert die CPU 2 das
gelieferte virtuelle Adressargument (hier VA_SRC) auf den Bus VA
und stellt den Leiter f2 auf hoch. Der Multiplexer 8 empfängt die
virtuelle Adresse VA_SRC und wird von dem Steuerblock 10 gesteuert,
um die Adresse der MMU 4 zu liefern.
-
Die
MMU 4 übersetzt
das gelieferte virtuelle Adressargument VA_SRC in eine physikalische Adresse
PA_SRC gemäß der Tabelle
T, die auch den dem Benutzerprogramm P eigenen ASIDP enthält. Die
MMU 4 liefert daher den ASIDP,
der das Benutzerprogramm P identifiziert, von dem die Anweisung S1
stammt. Dieser Identifikator wird dann mit dem Identifikator verglichen,
der in dem Identifikatorregister 6 gespeichert ist, der
ausgehend von der ersten Anweisung T1, die die CPU 2 empfangen
hat, bestimmt wurde.
-
Wenn
sie gleich sind, wird ein Wort MSRC, das werthohe
Bits gleich der Unteradresse PA_DMA_BASE, die in dem Gesamtregister 5 gespeichert
ist, gefolgt von Bits aufweist, die den Identifikator ASIDP codieren, der von der MMU im Anschluss
an die Übersetzung
VA_SRC, die nach Empfang der Anweisung S1 geliefert wird, gebildet
und an den Eingang des Multiplexers 8' geliefert.
-
Wenn
sie ferner gleich sind, liefert man an den Multiplexer 9' den Inhalt
des Pufferregisters 7, das die physikalische Quellenadresse
PA_SRC gespeichert hat, die bei der Verarbeitung der Anweisung T1
durch den Verarbeitungsblock der Adressanweisung 3 gespeichert
wurde.
-
Der
Multiplexer 9' bzw.
der Multiplexer 8' wird von
dem Steuerblock 10 gesteuert, um das Anlegen auf den Datenbus
BD der physikalischen Adresse PA_SRC, die von dem Pufferregister 7 kommt,
bzw. das Anlegen des Worts MSRC auf den
Adressbus BA gemäß der Zeile
in Zusammenhang mit der Anweisung S1 der 3 zu erlauben.
-
Die
Zustandsmaschine 17 des DMA-Controllers 11 zeigt
dann auf das Quellenregister 14. Wenn sie die Unteradresse
PA_DMA_BASE in den werthohen Bits des Worts MSRC,
das auf den Adressbus BA angelegt wird, erfasst, extrahiert sie
die 8 auf die Basisunteradresse folgenden Bits, die dem Identifikator ASIDP entsprechen, und vergleicht sie mit dem
Identifikator, der in dem Atomizitätsregister 18 gespeichert
ist.
-
Wenn
die Identifikatoren gleich sind, wählt sie das Quellenregister 14 aus
und speichert dort die Information PA_SRC, die auf den Datenbus
BD angelegt wird. Sie verstellt dann ihren Pointer so, dass er auf
das Größenregister 13 gemäß dem Zyklus
C der Zustandsmaschine 17 zeigt.
-
Sollte
die Zustandsmaschine 17 eine Ungleichheit zwischen dem
in dem Atomizitätsregister 18 gespeicherten
Identifikator und dem in den Wörtern
MDEST und MSRC gegenwärtigen Identifikator
erfassen, wird eine Versagensinformation an die CPU 2 bei
einem Vorgang (hier nicht detailliert beschrieben) des Lieferns
eines Zustands in Zusammenhang mit dem Programmiervorgang des DMA-Controllers zurückgesendet.
-
Die
Verarbeitung der ersten Sequenz Seq1 zum Programmieren des DMA-Controllers 11 ist
damit beendet. Die zweite Sequenz Seq2 wird anschließend ausgeführt.
-
Wie
oben ausführlich
ausgehend von der Anweisung T1 „Translate (VA_SRC; t0)" beschrieben, platziert
die CPU 2 bei der Ausführung
der Anweisung T2 („Translate
(VA_DEST; t0)")
durch das Benutzerprogramm P das gelieferte virtuelle Adressargument
(hier VA_DEST) auf den Bus, platziert das gelieferte Datenargument
(hier die Größe t0) auf
den Bus DATA_O und stellt den Leiter f1 auf hoch.
-
Das
Kontiguitätsprüfmodul bestimmt
eine erste Kontinuität
DD1 und daher einen ersten Unterblock SBD1, der keine Diskontinuität aufweist,
indem es die Register 31, 32 und 34 bis 39 verwendet.
Das Zielunterblockgrößenregister 33' wird hingegen
an Stelle des Quellenunterblockgrößenregisters 33 verwendet.
-
Der
erste Unterblock SBD1 beginnt an der virtuellen
Adresse VA_DEST, die von dem Programm P geliefert wird, und hat
eine Größe tBD1, die in dem Zielunterblockgrößenregister 33' gespeichert
ist.
-
Sobald
der erste Quellenunterblock SBS1 und dieser
erste Zielunterblock SBD1 bestimmt sind,
vergleicht das Kontiguitätsprüfmodul 3 die
Größen tBS1 und tBD1, die
jeweils in dem Quellenunterblockgrößenregister 33 und
dem Zielunterblockgrößenregister 33' gespeichert
sind, wählt
die kleinere Größe tB1 = min (tBS1; tBD1) aus und legt sie an den Eingang des Multiplexers 9 an.
Die Größe tB1 ist die Größe eines elementaren Unterblocks
derart, dass der DMA-Controller
beim Transfer dieses elementaren Unterblocks weder eine Diskontinuität in dem
Quellenspeicherraum PPS noch in dem Zielspeicherraum
PPD antrifft.
-
Parallel
dazu und sobald die MMU 4 das virtuelle Adressargument
VA_DEST, das von dem Programm P geliefert wird, in eine physikalische
Adresse PA_DEST gemäß der Tabelle
T übersetzt
hat, die auch den ASIDP, der dem Benutzerprogramm
P eigen ist, definiert, liefert sie die physikalische Adresse PA_DEST
zum Speichern an das Pufferregister 7. Sie liefert ferner
den ASIDP, der das Benutzerprogramm P definiert,
von dem die Anweisung T2 kommt, zum Speichern an das Identifikatorregister 6.
-
Dann
wird ein Wort Mt2, das werthohe Bits gleich
der Unteradresse PA_DMA_BASE, die in dem Gesamtregister 5 gespeichert
ist, gefolgt von Bits, die den Identifikator ASIDP codieren,
der von der MMU im Anschluss an die Übersetzung von VA_DEST geliefert
wird, aufweist, gebildet und an den Eingang des Multiplexers 8' geliefert.
-
Als
Reaktion auf das Stellen des Leiters f1 auf hoch kann der Steuerblock
den Multiplexer 9 derart steuern, dass die am Eingang von
dem Kontiguitätsprüfmodul 3 gelieferte
Größeninformation
tB1 an den Multiplexer 9' geliefert wird.
Der Steuerblock 10 kann ferner den Multiplexer 9' derart steuern,
dass die am Eingang gelieferte Information tB1 von
dem Multiplexer 9' auf
den Datenbus BD angelegt wird, und um den Multiplexer 8' derart zu steuern,
dass das Wort Mt2 auf den Adressbus BA,
wie auf 3 dargestellt, angelegt wird.
-
Die
Zustandsmaschine 17 des DMA-Controllers 11 zeigt
daher auf das Größenregister 13 gemäß dem Zyklus
C. Wenn sie die Unteradresse PA_DMA_BASE in den werthohen Bits des
Worts Mt2 erfasst, das auf den Adressbus
BA angelegt wird, extrahiert sie die 8 Bits, die auf die Basisunteradresse folgen
und dem Identifikator ASIDP entsprechen,
und vergleicht sie mit dem Identifikator, der in dem Atomizitätsregister 18 gespeichert
ist.
-
Sind
sie gleich, wählt
sie das Größenregister 13 aus
und speichert die Größe tB1, die auf dem Datenbus BD steht.
-
Die
Zustandsmaschine 17 inkrementiert dann ihren Pointer derart,
dass er auf das Zielregister 15 gemäß dem Zyklus C zeigt.
-
Beim
Ausführen
der Anweisung S2 („StoreDMA
VA_DEST") durch
das Benutzerprogramm P, platziert die CPU 2 das gelieferte
Argument der virtuellen Adresse (hier VA_DEST) auf dem Bus VA und stellt
den Leiter f2 auf hoch.
-
Die
virtuelle Adresse VA_DEST wird dann von dem Multiplexer 8 an
die MMU 4 geliefert.
-
Die
MMU 4 übersetzt
die gelieferte virtuelle Adresse VA_DEST in physikalische Adresse PA_DEST
gemäß der Tabelle
T, die auch den ASIDP, der dem Benutzerprogramm
P eigen ist, definiert. Die MMU 4 liefert den ASIDP, der das Benutzerprogramm P, von dem die
Anweisung S2 stammt, identifiziert. Der ASIDP wird
dann mit dem Identifikator verglichen, der in dem Identifikatorregister 6 gespeichert
ist, der ausgehend von der Anweisung 2, die empfangen von der
CPU 2, bestimmt wurde.
-
Sind
sie gleich, wird ein Wort MDEST, das werthohe
Bits gleich der Basisunteradresse PA_DMA BASE, die in dem Gesamtregister 5 gespeichert
ist, gefolgt von Bits aufweist, die den Identifikator ASIDP codieren, der von der MMU im Anschluss
an die Übersetzung
von VA_DEST als Reaktion auf die Anweisung S2 geliefert wurde, gebildet
und an den Eingang des Multiplexers 8' geliefert.
-
Wenn
ferner die Identifikatoren gleich sind, liefert man den Inhalt des
Pufferregisters 7, das die physikalische Quellenadresse
PA_DEST speichert, an den Multiplexer 9'.
-
Und
wie bei der ersten Sequenz Seq1, wird der Multiplexer 9' bzw. der Multiplexer 8' von dem Steuerblock 10 gesteuert,
um das Anlegen der physikalischen Adresse PA-DEST, die von dem Pufferregister 7 kommt,
auf den Datenbus BD bzw. das Anlegen des Worts MDEST auf
den Adressbus BA gemäß der Zeile
in Zusammenhang mit der Anweisung S2 der 4 zu erlauben.
-
Die
Zustandsmaschine 17 des DMA-Controllers 11 zeigt
daher auf das Zielregister 15. Wenn sie die Unteradresse
PA_DMA_BASE in den werthohen Bits des Worts MDEST,
das auf dem Adressbus BA angelegt wird, erkennt, extrahiert sie
die 8 Bits, die auf die Basisunteradresse folgen und dem Identifikator ASIDP entsprechen und vergleicht sie mit dem
in dem Atomizitätsregister 18 gespeicherten
Identifikator.
-
Wenn
die Identifikatoren gleich sind, wählt sie das Zielregister 15 aus
und speichert dort die Information PA_DEST, die dann auf den Datenbus
BD angelegt wird. Sie inkrementiert danach ihren Pointer gemäß dem Zyklus
C der Zustandsmaschine 17 und kehrt auf den Ausgangszustand
des Zyklus C zurück.
-
Die
Verarbeitung der Sequenz Seq2 zum Programmieren des DMA-Controllers 11 ist
damit beendet.
-
Der
DMA-Controller ist jetzt mit den Quellendaten PA_SRC, der Größe tB1 des elementaren Unterblocks und dem Ziel
PA_DEST programmiert und wird den DMA-Transfer ausführen.
-
Die
Größe tB1, die derart definiert und an den DMA-Controller geliefert
wird, ist so, dass von dem DMA-Controller
keine Diskontinuität
zwischen physikalischen Seiten sowohl in dem Quellenteil PPS als auch in dem Zielteil PPD beim
Transfer angetroffen wird.
-
Bei
der hier betrachteten Ausführungsform vergleicht
das Kontiguitätsprüfmodul 3 ferner
die Größe t0, die
anfänglich von
dem Benutzerprogramm P geliefert wird, mit der Größe tB1, die bestimmt und an den DMA-Controller
geliefert wurde. Sollten die Größen unterschiedlich
sein, sendet das Kontiguitätsmodul
der CPU 2 über
den Datenbus DATA_I eine Informationsmeldung mit der Größe des Transfers
tB1, die tatsächlich an den DMA-Controller 11 geliefert
wird, oder die die Lage der Diskontinuitäten DS1 und
DD1, die bestimmt wurden, enthält, damit
das Benutzerprogramm P den Transfer der Elemente neuprogrammieren
kann, die infolge der Ausführung
der zwei Anweisungssequenzen Seq1 und Seq2, die oben beschrieben
wurden, nicht übertragen
werden konnten.
-
Der
Einsatz der Identifikatoren (hier der ASID in Zusammenhang mit dem
Benutzerprogramm P, das die Anweisung erzeugt hat) erlaubt es, die
Atomizität
der Anweisungen, die aufeinander folgen, zu prüfen. Diese Anordnung erlaubt
es, das Einfügen
einer Anweisung zu erkennen, die von einem Benutzerprogramm P' kommt, das nicht
das Benutzerprogramm P ist, und die für den DMA-Transfer erforderlichen
Informationen nicht zu vermischen. Das erlaubt es, die Sicherheit
des Systems gegenüber
betrügerischen
Zugangsversuchen zu dem externen Speicher über DMA-Zugänge zu verstärken. Wenn der
DMA-Controller ferner ein Multikanalcontroller ist, das heißt einer,
der parallel mehrere Registereinheiten des Typs der Einheit 12 informieren
kann, erlaubt es der Identifikator ferner, das Größenregister,
Quellenregister, Zielregister oder Statusregister aus der Einheit,
die das Programm P betrifft, auszuwählen.
-
Bei
einer weiteren Ausführungsform,
die es erlaubt, die Atomizität
der Transferelemente zu garantieren, ohne einen Identifikator, (zum
Beispiel den ASID), der in einem Register (hier das Register 6)
gespeichert ist, mit einem zu vergleichen, der von der MMU ausgehend
von einem neuen Adressargument bestimmt wird, kann das System auf
Chip das Speichern der Inhalte der Register 5, 6, 7 und 31 bis 39 bei
jedem Kontextwechsel (das heißt
bei jedem Benutzerprogrammwechsel) auslösen.
-
Bei
einer weiteren Ausführungsform
kann das Kontiguitätsprüfmodul,
wenn es die erste Programmieranweisung des DMA-Controllers von dem Benutzerprogramm
P her empfängt,
eine Speicherseite PBlocs physikalischer
Adresse PA_BLOCS in dem physikalischen Speicherraum, der dem Programm
P eigen ist, auswählen,
und dort die erste physikalische Adresse PA_SRC0 speichern, die
beim Ausführen
des Prozesses bestimmt wird.
-
Sobald
es einen ersten Quellenunterblock SBS1 mit
einer Größe tBS1 bestimmt hat, speichert das Kontiguitätsprüfmodul 3 in
dieser Speicherseite PBlocs im Anschluss
an die dort bereits stehenden Daten die Größe des dort stehenden Daten
die Größe des ersten
bestimmten Quellenunterblocks tBS1.
-
Dann
wiederholt das Kontiguitätsprüfmodul 3 den
Bestimmungsprozess von Unterblöcken
ausgehend von der Stelle, an der es gestoppt hat, um tB1 bis zum
Vergleichen der physikalischen Adresse PA_SRCn wie
unten ausführlich
beschrieben, zu bestimmen.
-
Sobald
eine neue Diskontinuität
zwischen den Seiten P'Sj und P'Sj+1' bestimmt
wird, stellt das Kontiguitätsprüfmodul 3 den
Quellenunterblockgrößenregisters 33 auf
Null zurück.
Dann ersetzt es wie zuvor den Inhalt des Registers der ersten Größe 35 durch
den (tSj+1) des Registers der zweiten Größe 38, den
Inhalt des Registers 36 der erste physikalischen Adresse
durch den (PA_SRCj+1) des Registers 39 der zweiten
physikalischen Adresse und den Inhalt des Registers 34 der
ersten virtuellen Adresse durch den (VA_SRCJ+1)
des Registers der zweiten virtuellen Adresse und wiederholt den
Prozess, bis eine neue Ungleichheit erfasst wird oder bis es zu
dem Ende des Teils PPS kommt. Es speichert
die Größe des neuen
im Anschluss an das Erfassen der neuen Diskontinuität erfassten
Unterblocks, dann die physikalische Adresse PA_SRCj+1,
die in dem Register 36 der ersten physikalischen Adresse
enthalten ist, in die Speicherseite Pblocs im
Anschluss an die dort bereits stehenden Daten.
-
Es
wird daher eine Anzahl kS Unterblöcke in dem
Teil PPS des physikalischen Speicherraums erfasst.
-
Man
erzielt daher, sobald die (ks +1) Unterblöcke durch
Diskontinuitäten
in dem Teil PPS des physikalischen Speichers
getrennt sind, isoliert wurden, eine Speicherseite PBlocs,
die die Adressen und Größen dieser
verschiedenen Unterblöcke
enthält.
-
Ebenso
erfasst man durch Abwickeln der gleichen Schritte ausgehend von
der von dem Benutzerprogramm P durch die Anweisung „T2" gelieferten virtuellen
Zieladresse eine Anzahl (kD+1) von Unterblöcken, die
durch kD Diskontinuitäten in dem Teil PPD des
physikalischen Speicherraums getrennt sind, und die Speicherseite
PBlocs enthält ferner alle Informationen
in Zusammenhang mit der Adresse und der Größe dieser (kD+1)
Unterblöcke.
-
Bei
dieser Ausführungsform
braucht man die Wörter
MSRC, Mt2 und MDEST auf dem Adressbus BA nicht zu senden
und braucht auch die Daten t0, tB1, PA_SRC und PA_DEST nicht auf dem Datenbus
BD (siehe 5) zu senden. Alle diese Informationen sind
nämlich
in der Seite PBlocs enthalten.
-
Bei
dieser Ausführungsform
sendet man dem DMA-Controller 11 die Nummer PPN der Speicherseite
PBlocs zum Beispiel, indem man sie auf den Adressbus
BA oder auf den Datenbus BD nach dem Ausführen der Anweisung S2 anlegt.
-
Es
ist daher nicht mehr erforderlich, den ASID in einem Register des
DMA-Controllers zu speichern, wie auch das Durchführen der
Vergleiche des ASID nicht mehr erforderlich ist, denn jedes Benutzerprogramm
hat seine eigene angehängte
Speicherseite PBlocs. Es gibt daher auch
keine Atomizitätsprobleme
auf der Ebene des DMA-Controllers mehr.
-
Bei
dieser Ausführungsform
kann der DMA-Controller beim Empfang dieser PPN-Nummer in der Seite
PBlocs die Daten in Zusammenhang mit den
Größen und
Positionen der verschiedenen Unterblöcke in dem Quellenteil PPS
und in dem Zielteil PPD holen und den Transfer
in Abhängigkeit
von den so festgestellten Diskontinuitäten ausführen.
-
Dieser
DMA-Controller wird zum Beispiel ausgehend von einem DMA-Controller
des Typs Scatter-Gather des früheren
Stands der Technik angepasst. Ein solcher DMA-Controller enthält keine Zustandsmaschine
mehr, denn er kann sich selbst mit den in der Seite PBlocs gegenwärtigen verketteten Listen
programmieren.
-
Diese
Ausführungsform
erlaubt es, den ursprünglich
von dem Benutzerprogramm P gesteuerten Transfer zu programmieren,
ohne dass man, wie bei der oben ausführlich beschriebenen ersten
Ausführungsform,
das Benutzerprogramm heranziehen muss, um einen Satz von Programmieranweisungen wieder
ablaufen zu lassen, wenn eine Diskontinuität angetroffen wurde.
-
Oben
wurde das Erzeugen von zwei Diskontinuitätslisten beschrieben: eine
in Zusammenhang mit Diskontinuitäten,
die in dem Quellenteil PPS gegenwärtig sind,
die andere in Zusammenhang mit Diskontinuitäten, die sich in dem Zielteil
PPD des physikalischen Speicherraums befinden.
-
In
diesem Fall muss der DMA-Controller angepasst werden, um die Größe der aufeinander
folgenden durchzuführenden
Transfers auf elementaren ununterbrochenen Unterblöcken ausgehend
von diesen zwei Listen zu bestimmen, die in der Speicherseite PBlocs definiert sind, so dass auf diesen
elementaren Unterblöcken
keine Diskontinuität
auf der Ebene des Quellenteils PPS und des Zielteils PPD angetroffen
wird (zum Beispiel ausgehend von den Größen tBS1 und
tBD1, wird eine Größe tB1 =
min (tBS1, tBD1) des
ersten elementaren Transferunterblocks bestimmt).
-
Bei
einer Variante extrahiert das Kontiguitätsmodul aus diesen zwei Diskontinuitätslisten
eine einzige Liste, die von vornherein diese elementaren Unterblöcke definiert,
die einen Elementartransfer des DMA-Controllers erlauben, und dies
ohne Antreffen einer Diskontinuität. Diese alleinige Liste wird
in der Speicherseite PBlocs (an der Stelle
der zwei ursprünglichen
Listen), deren Adresse dem DMA-Controller
geliefert wird, gespeichert.
-
Bei
den zwei oben beschriebenen Hauptausführungsmodi (Bestimmen einer
Größe tB1 des elementaren Unterblocks, die an den
DMA-Controller übertragen
wird/Erstellen einer Speicherseite PBlocs mit
der Definition von Unterblöcken
und Übertragen des
Adresse der Seite an den DMA-Controller), wurden zuerst eine oder
mehrere Diskontinuitäten
auf dem Quellenteil PPS ausgehend von Elementen mit Größe t0 und
der virtuellen Quellenadresse VA_SRC gesucht. Dann wurden eine oder
mehrere Diskontinuitäten
auf dem Zielteil PPD ausgehend von Elementen
mit Größe t0 und
der virtuellen Zieladresse VA_DEST gesucht.
-
Bei
einer Variante liefert man die drei Parameter VA_SRC, VA_DEST und
t0 an das Diskontinuitätsmodul,
das nacheinander eine Seite des Quellenraums PPS, dann eine Seite
des Zielraums PPD verarbeitet, um die Gegenwart mindestens einer
Diskontinuität
zu bestimmen.
-
Derart
wird durch Anwenden dieser Variante an die der erste Ausführungsform
die Größe tB1 des ersten elementaren Transferunterblock
sofort bestimmt (ohne eine Mindestgröße zwischen der Größe des ersten
Quellenunterblocks und des ersten Zielunterblocks auszuwählen zu
haben).
-
In
dem Fall des Anwendens der Variante an die zweite Ausführungsform
erzielt man sofort eine einzige Liste elementarer Unterblöcke, die
in Abhängigkeit
von den Diskontinuitäten
bestimmt wurden, die sowohl in dem Quellenteil PPS als
auch in dem Zielteil PPD enthalten sind,
auf welchen der DMA-Controller seine Transfers programmieren kann.
-
Die
Erfindung erlaubt daher das Verwalten von Diskontinuitätsproblemen
des physikalischen Speicherraums in dem Rahmen von DMA-Programmierungen,
die nicht von dem OS überwacht
werden. Es zieht die Speicherverwaltungseinheit heran und bietet
die Garantie, dass das Benutzerprogramm, das am Ursprung der DMA-Programmierung ist,
die physikalischen Adressen nicht manipuliert, was einen guten Schutz
vor unerlaubtem Zugriff bietet. Sie erlaubt ferner gute Leistungen
hinsichtlich der Verarbeitungsschnelligkeit.
-
Alle
oben beschriebenen Ausführungsformen
erlauben es auch, dass das Benutzerprogramm P, das den DMA-Controller
programmiert, keinen Zugang zu den Registeradressen des DMA-Controllers hat,
was ein Schutzniveau vor Speicherzugriffsverstößen sicherstellt.