DE602005003987T2 - Verfahren zur Programmierung einer System auf Chip DMA Steuerung, sowie ein System auf Chip dafür. - Google Patents

Verfahren zur Programmierung einer System auf Chip DMA Steuerung, sowie ein System auf Chip dafür. Download PDF

Info

Publication number
DE602005003987T2
DE602005003987T2 DE602005003987T DE602005003987T DE602005003987T2 DE 602005003987 T2 DE602005003987 T2 DE 602005003987T2 DE 602005003987 T DE602005003987 T DE 602005003987T DE 602005003987 T DE602005003987 T DE 602005003987T DE 602005003987 T2 DE602005003987 T2 DE 602005003987T2
Authority
DE
Germany
Prior art keywords
address
physical
virtual
size
page
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE602005003987T
Other languages
English (en)
Other versions
DE602005003987D1 (de
Inventor
Albert Martinez
William Orlando
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
STMicroelectronics SA
Original Assignee
STMicroelectronics SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by STMicroelectronics SA filed Critical STMicroelectronics SA
Publication of DE602005003987D1 publication Critical patent/DE602005003987D1/de
Application granted granted Critical
Publication of DE602005003987T2 publication Critical patent/DE602005003987T2/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Bus Control (AREA)

Description

  • 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.

Claims (10)

  1. Verfahren zum Programmieren eines DMA-Controllers in einem System auf Chip (1), das eine Zentralverarbeitungseinheit (2), eine Speicherverwaltungseinheit (4), die eine virtuelle Adresse in eine physikalische Adresse gemäß einer bestimmten Übersetzungstabelle (T) übersetzen kann, aufweist, die neben der Größe jeder Seite ein materielles Modul zum Prüfen der Kontiguität (3), einen DMA-Controller (11), der mit einem Adressbus (BA) und einem Datenbus (BD) verbunden ist, aufweist, wobei der Controller durch Anlegen von Programmierelementen, die eine physikalische Quellenadresse, eine physikalische Zieladresse und eine Größe der zu übertragenden Daten aufweisen, auf mindestens den Datenbus oder den Adressbus programmierbar ist, wobei das System auf Chip jedes Benutzerprogramm einem virtuellen Adressierraum und einem physikalischen Speicherraum zuweist, die in Seiten organisiert sind, und derart, dass jede Adresse werthohe Bits enthält, die eine Seite angeben, die der Adresse zugewiesen ist, wobei das Verfahren die folgenden Umsetzungsschritte unter der Steuerung der Zentralverarbeitungseinheit aufweist: – als Reaktion auf bestimmte dedizierte Anweisungen (T1, T2, S1, S2) eines Benutzerprogramms (P), das eine Größeninformation (t0) und eine virtuelle Programmieradresse aus einer virtuellen Quellenadresse und einer virtuellen Zieladresse (VA_SRC, VA_DEST) liefert, wird die virtuelle Programmieradresse am Eingang der Speicherverwaltungseinheit geliefert, – die Speicherverwaltungseinheit übersetzt die virtuelle Programmieradresse in eine entsprechende physikalische Programmieradresse (PA_SCR, PA_DEST), und – mindestens ein erster Unterblock (SBS1, SBD1) besteht aus einem Speicherunterraum ohne Diskontinuität, der von einer physikalischen Anfangsadresse (PA_SCR0) gleich der physikalischen Programmieradresse und einer physikalischen Endadresse gleich der physikalischen Adresse identifiziert wird, die unmittelbar einer ersten Diskontinuität (DS1, DD1) in einem Teil des physikalischen Speicherplatzes (PPS, PPD) vorausgeht, der gemäß der Übersetzungstabelle (T) dem adressierbaren virtuellen Teil des Raums (PVS, PVD) entspricht, der an der virtuellen Programmieradresse anfängt und mit gleicher Größe wie die Information mit der Größe, die von dem Benutzerprogramm (t0) geliefert wird, wobei die erste Diskontinuität durch das Diskontinuitätsmodul in Abhängigkeit von Informationen (PPN0, tS0), die von der Speicherverwaltungseinheit geliefert werden und in der Übersetzungstabelle (T) gespeichert sind, bestimmt wird und dort identifiziert ist, wo zwei physikalische Programmieradressen, die zwei aufeinander folgenden virtuellen Programmieradressen entsprechen, nicht aufeinander folgen, – mindestens ein Teil der Programmierelemente (tB1), die für den DMA-Controller bestimmt sind, wird in Abhängigkeit von der physikalischen Programmieradresse und mindestens dem ersten identifizierten Unterblock definiert, – und die Programmierelemente werden an den DMA-Controller durch Anlegen auf mindestens den Adressbus (BA) oder den Datenbus (BD) geliefert.
  2. Verfahren zum Programmieren eines DMA-Controllers nach Anspruch 1, wobei: – das Kontiguitätsprüfmodul (3) eine erste virtuelle Adresse (VA_SRCO) bestimmt, die eine Adresse des Anfangs der virtuellen Seite (PS0) ist, die von der virtuellen Programmieradresse (VA_SRC) angezeigt wird, – ein Größenwert (tS0) gleich der Größe der Seite (P'S0), die der physikalischen Programmieradresse (PA_SRC) zugewiesen ist, die von der Speicherverwaltungseinheit nach der Übersetzung der virtuellen Programmieradresse bestimmt wird, und – eine erste Gruppe von Bits (PPNS0) der physikalischen Programmieradresse, die die physikalische Seite (P'S0) und die Größe der dazugehörenden Seite (tS0) anzeigen, an das Kontiguitätsprüfmodul gesendet werden, wobei das Verfahren ferner die folgenden Schritte aufweist: a) das Kontiguitätsprüfmodul bestimmt in Abhängigkeit von der ersten Gruppe von Bits eine erste physikalische Adresse (PA_SRC0), die die Anfangsadresse der angegebenen physikalischen Seite ist, bestimmt eine zweite virtuelle Adresse (VA_SCR1) gleich der Summe der ersten gelieferten virtuellen Adresse und der ersten gelieferten Seitengröße und liefert die zweite virtuelle Adresse an die Speicherverwaltungseinheit, b) die Speicherverwaltungseinheit übersetzt die zweite virtuelle Adresse in eine entsprechende physikalische Adresse (PA_SRC1) und bestimmt einen zweiten Größenwert (tS1) gleich der Größe der Seite, die mit der physikalischen Adresse verbunden ist, c) eine zweite Gruppe von Bits (PPNS1) der physikalischen Adresse, die der Übersetzung der zweiten virtuellen Adresse entspricht und die physikalische Seite (P'S1) anzeigt, die mit dem zweiten Größenwert verbunden ist, werden an das Kontiguitätsprüfmodul geliefert, d) das Kontiguitätsprüfmodul bestimmt in Abhängigkeit von der zweiten Gruppe von Bits eine zweite physikalische Adresse (PA_SRC1), die die Anfangsadresse der angegebenen physikalischen Seite (P'S1) ist, vergleicht die zweite physikalische Adresse mit der Summe der ersten physikalischen Adresse (PA_SRC0) und dem ersten Größenwert (tS0), um mindestens eine Ungleichheit zwischen der zweiten physikalischen Adresse und der Summe festzustellen; und die Schritte a) bis d) werden wiederholt, indem die erste virtuelle Adresse durch die zweite virtuelle Adresse ersetzt wird, die erste Seitengröße durch die zweite Seitengröße und die erste physikalische Adresse durch die zweite physikalische Adresse, zumindest so lange wie die zweite physikalische Adresse gleich der Summe der ersten physikalischen Adresse und dem ersten Seitengrößenwert ist, – wenn eine erste Ungleichheit festgestellt wird, gibt sie eine erste Diskontinuität an, und der erste Unterblock (SBS1) besteht aus dem Speicherraum ohne Diskontinuität, der sich zwischen einerseits der physikalischen Adresse (PA_SRC), die durch Übersetzen der virtuellen Programmieradresse (VA_SRC), die von den Anweisungen geliefert wurde, und andererseits der physikalischen Adresse gleich der Summe liegt, die an der zweiten physikalischen Adresse, der ersten physikalischen Adresse und dem ersten Seitengrößenwert als ungleich erkannt wurde.
  3. Verfahren zum Programmieren eines DMA-Controllers nach einem der vorhergehenden Ansprüche, gemäß welchem man als Reaktion auf die bestimmten dedizierten Anweisungen eines Benutzerprogramms (P), das eine erste virtuelle Programmieradresse gleich der virtuellen Quellenadresse (VA_SRC) und eine zweite virtuelle Programmieradresse gleich der virtuellen Zieladresse (VA_DEST) liefert: – einerseits einen ersten Quellenunterblock (SBS1) und einen ersten Zielunterblock (SBD1) bildet, die jeweilige Unterblockgrößen (tBS1, tBD1) aufweisen, – die Programmierelemente, die an den DMA-Controller geliefert wurden, die physikalische Quellenadresse, die physikalische Zieladresse und eine Übertragungsgröße (tB1), die gleich der kleineren aus Quellenunterblockgröße und Zielunterblockgröße ist, umfassen.
  4. Verfahren zum Programmieren eines DMA-Controllers nach einem der vorhergehenden Ansprüche, bei dem eine Information ferner an das Benutzerprogramm gesendet wird, wobei die Information mindestens ein Datum der Lage im virtuellen Speicherraum der ersten Diskontinuität oder eine Transfergröße aufweist, die an den DMA-Controller geliefert wird, wenn die Größe von der von dem Benutzerprogramm gelieferten Größe unterschiedlich ist.
  5. Verfahren zum Programmieren eines DMA-Controllers nach einem der Ansprüche 1 bis 3, bei dem – man eine Gruppe aus Quellenunterblöcken und Quellenzielblöcken bildet, wobei jeder Unterblock aus einem Unterspeicherraum besteht, der jeweils zwischen einer benachbarten Quellengrenze und Zielgrenze liegt, wobei die Quellengrenze und die Zielgrenze Folgendes sind: – die physikalischen Quellen- und Zieladressen, die von dem Benutzerprogramm geliefert werden, – physikalische Adressen, die von den Lagen der Diskontinuitäten abgeleitet werden, die in dem Quellenteil (PPS) und dem Zielteil (PDS) des physikalischen Speicherraums, durch das Diskontinuitätsmodul (3) in Abhängigkeit von Informationen (PPNSI, PPNDI, tSI, tDI), die von der Speicherverwaltungseinheit geliefert werden, bestimmt werden und – die physikalische Adresse gleich der Übersetzung durch die Speicherverwaltungseinheit der Summe der virtuellen Quellenadresse und Zieladresse und der Größeninformation (t0), die von dem Benutzerprogramm (P) geliefert werden, wobei jeder Unterblock mit einer physikalischen Unterblockanfangsadresse und einer Unterblockgröße verbunden ist, – man in einer gegebenen Seite (PBlöcke), die einer physikalischen Seitenadresse zugewiesen ist, Daten, die in Abhängigkeit von den physikalischen Blockanfangsadressen und Unterblockgrößen, die jeweils der Quellen- und Zielunterblockgruppe zugewiesen sind, bestimmt werden, speichert und – die an den DMA-Controller gelieferten Programmierelemente durch Anlegen auf den Adressbus (BA) und Datenbus (BD) die physikalische Seitenadresse enthalten, – und der DMA-Controller in Abhängigkeit von den in der Seite gespeicherten Daten programmiert wird.
  6. System auf Chip (1), das eine zentrale Verarbeitungseinheit (2), eine Speicherverwaltungseinheit (4), die eine virtuelle Adresse in eine physikalische Adresse gemäß einer bestimmten Übersetzungstabelle (T) übersetzen kann, die ferner die Größe jeder Seite enthält, ein materielles Kontiguitätsprüfmodul (3), einen DMA-Controller (11), der mit einem Adressbus (BA) und einem Datenbus (BD) verbunden ist, aufweist, wobei der Controller durch Anlegen von Programmierelementen auf mindestens den Datenbus oder den Adressbus programmierbar ist, die eine physikalische Quellenadresse, eine physikalische Zieladresse und eine Größe der zu übertragenden Daten enthalten, wobei das System auf Chip für jedes Benutzerprogramm (P) einen virtuellen Adressierraum und einen physikalischen Speicherraum aufweist, die in Seiten organisiert sind, und derart, dass jede Adresse werthohe Bits enthält, die eine Seite anzeigen, die der Adresse zugewiesen ist, und bei dem als Reaktion auf bestimmte dedizierte Anweisungen (T1, T2, S1, S2) eines Benutzerprogramms (P), das eine Größeninformation (t0) oder eine virtuelle Programmieradresse, nämlich eine virtuelle Quellenadresse und eine virtuelle Zieladresse (VA_SRC, VA_DEST) liefert: – die Speicherverwaltungseinheit die virtuelle Programmieradresse in eine entsprechende physikalische Programmieradresse (PA_SRC, PA_DEST) übersetzen kann, und – das materielle Kontiguitätsprüfmodul (3) mindestens einen ersten Speicherraumunterblock ohne Diskontinuität (SBS1, SBD1), der von einer physikalischen Anfangsadresse (PA_SRC0) identifiziert wird, die gleich der physikalischen Programmieradresse ist, und einer physikalischen Endadresse gleich der physikalischen Adresse, die einer ersten Diskontinuität (DS1, DD1) in einem Teil des physikalischen Speicherraums (PPS, PPD) vorausgeht, der gemäß der Übersetzungstabelle (T) dem Teil des virtuellen adressierbaren Raums (PVS, PVD) entspricht, der an der virtuellen Programmieradresse beginnt und mit gleicher Größe wie die Größeninformation, die von dem Benutzerprogramm (t0) geliefert wird, bilden kann, wobei die erste Diskontinuitätslage von dem Diskontinuitätsmodul in Abhängigkeit von Informationen (PPN0, ts0) bestimmt wird, die von der Speicherverwaltungseinheit geliefert werden und in der Übersetzungstabelle (T) enthalten sind und da identifiziert wird, wo zwei physikalische Programmieradressen, die zwei aufeinander folgenden virtuellen Programmieradressen entsprechen, nicht aufeinander folgend sind, und das Kontiguitätsprüfmodul (3) mindestens einen Teil der Programmierelemente (tB1), die für den DMA-Controller bestimmt ist, in Abhängigkeit von der physikalischen Programmieradresse und mindestens dem ersten identifizierten Unterblock definieren kann, – und das System auf Chip dem DMA-Controller durch Anlegen auf mindestens den Adressbus (BA) oder den Datenbus (BD) die Programmierelemente liefern kann.
  7. System auf Chip (1) nach Anspruch 6, bei dem: – das Kontiguitätsprüfmodul (3) eine erste virtuelle Adresse (VA_SCR0) bestimmen kann, die die Anfangsadresse der virtuellen Seite (PS0) ist, die von der virtuellen Programmieradresse (VA_SRC) angegeben ist, und einen Größenwert (tS0) gleich der Größe der Seite (P'S0) bestimmen kann, die der physikalischen Programmieradresse (PA_SRC) zugewiesen ist, die von der Speicherverwaltungseinheit nach der Übersetzung der virtuellen Programmieradresse geliefert wird, und bei dem die Speicherverwaltungseinheit eine erste Gruppe von Bits (PPNS0) der physikalischen Programmieradresse liefern kann, die die physikalische Seite (P'S0) und die Größe der dazugehörenden Seite (tS0) dem Kontiguitätsprüfmodul anzeigen kann, wobei das System auf Chip derart eingerichtet ist: a) dass das Kontiguitätsprüfmodul in Abhängigkeit von der ersten Gruppe von Bits eine erste physikalische Adresse (PA_SRC0) bestimmen kann, die die Anfangsadresse der angegebenen physikalischen Seite ist, und eine zweite virtuelle Adresse (VA_SRC1) gleich der Summe der ersten gelieferten virtuellen Adresse und der ersten gelieferten Seitengröße bestimmen kann, und die zweite virtuelle Adresse zu der Speicherverwaltungseinheit liefern kann, b) dass die Speicherverwaltungseinheit die zweite virtuelle Adresse in eine entsprechende physikalische Adresse (PA_SRC1) übersetzen kann, um einen zweiten Größenwert (tS1) gleich der Größe der Seite zu bestimmen, die der physikalischen Adresse zugewiesen ist, und eine zweite Gruppe von Bits (PPNS1) der physikalischen Adresse liefern kann, die der Übersetzung der zweiten virtuellen Adresse entspricht und die dazugehörende physikalische Seite (P'S1) und dem Kontiguitätsprüfmodul den zweiten Größenwert anzeigt, c) dass das Kontiguitätsprüfmodul in Abhängigkeit von der zweiten Gruppe von Bits eine zweite physikalische Adresse (PA_SRC1) bestimmen kann, die die Anfangsadresse der angegebenen physikalischen Seite (P'S1) ist, um die zweite physikalische Adresse mit der Summe der ersten physikalischen Adresse (PA_SRC0) und dem ersten Größenwert (tS0) zu vergleichen, um mindestens eine Ungleichheit zwischen der zweiten physikalischen Adresse und der Summe zu erfassen, und wobei das Kontiguitätsmodul und die Speicherverwaltungseinheit die erste virtuelle Adresse durch die zweite virtuelle Adresse, die erste Seitengröße durch die zweite Seitengröße und die erste physikalische Adresse durch die zweite physikalische Adresse ersetzen können, und die in a), b) und c) angegebene Verarbeitung mindestens so lange wiederholen können, wie die zweite physikalische Adresse gleich der Summe der ersten physikalischen Adresse und des ersten Seitengrößenwerts ist, – und dass das Kontiguitätsprüfmodul, wenn eine erste Ungleichheit erkannt wird, die eine erste Diskontinuität anzeigt, einen ersten Speicherraumunterblock (SBS1) ohne Diskontinuität bilden kann, der zwischen einerseits der physikalischen Adresse (PA_SRC), die durch Übersetzen virtuellen Programmieradresse (VA_SRC), die von den Anweisungen geliefert wird, erzielt wird, und andererseits der physikalischen Adresse enthalten ist, die gleich der Summe ist, die an der zweite physikalischen Adresse gleich der Summe liegt, die an der zweiten physikalischen Adresse, der ersten physikalischen Adresse und dem ersten Seitengrößenwert als ungleich erfasst wurde.
  8. System auf Chip (1) nach einem der Ansprüche 6 und 7, bei dem als Reaktion auf die dedizierten bestimmten Anweisungen eines Benutzerprogramms (P), das eine erste virtuelle Programmieradresse gleich der virtuellen Quellenadresse (VA_SRC) und eine zweite virtuelle Programmieradresse gleich der virtuellen Zieladresse (VA_DEST) liefert: – das Kontiguitätsprüfmodul (3) einerseits einen ersten Quellenunterblock (SBS1) und einen ersten Zielunterblock (SBD1) bilden kann, die jeweilige Unterblockgrößen (tBS1, tBSD1) aufweisen, – die dem DMA-Controller gelieferten Programmierelemente, die physikalische Quellenadresse, die physikalische Zieladresse und eine Transfergröße (tB1) gleich der Größe des Unterblocks aufweisen, der zwischen der Größe des Quellenunterblocks und der Größe des Zielunterblocks der kleinere ist.
  9. System auf Chip (1) nach einem der Ansprüche 6 bis 8, bei dem das Kontiguitätsprüfmodul (3) ferner eine Information an das Benutzerprogramm senden kann, wobei die Information mindestens ein Datum enthält, das die Lage der ersten Diskontinuität in dem virtuellen Speicherraum oder die Transfergröße ist, die dem DMA-Controller geliefert wird, wenn die Größe von der Größe unterschiedlich ist, die von dem Benutzerprogramm geliefert wird.
  10. System auf Chip (1) nach einem der Ansprüche 6 bis 8, bei dem – das Kontiguitätsprüfmodul jeweils eine Gruppe Quellenunterblöcke und Zielunterblöcke bilden kann, wobei jeder Unterblock aus einem Speicherunterraum besteht, der zwischen zwei benachbarten Quellengrenzen liegt, jeweils einer Quellen- und einer Zielgrenze, wobei die Quellengrenze und die Zielgrenze jeweils wie folgt sind: – die physikalische Quellenadresse und Zieladresse, die von dem Benutzerprogramm geliefert werden, – physikalische Adressen, die aus den Lagen der Diskontinuitäten abgeleitet werden, die in dem Quellenteil (PPS) und dem Zielteil (PDS) des physikalischen Speicherraums von dem Diskontinuitätsmodul (3) in Abhängigkeit von Informationen (PPNSI, PPNDI, tSI, tDI), die von der Speicherverwaltungseinheit geliefert wurden, bestimmt werden, und – die physikalische Adresse gleich der Übersetzung durch die Speicherverwaltungseinheit der Summe der virtuellen Quellenadresse und Zieladresse und der Größe (t0), die von dem Benutzerprogramm (P) geliefert werden, wobei jedem Unterblock eine physikalische Unterblockanfangsadresse und einer Unterblockgröße zugewiesen ist, – wobei das Kontiguitätsprüfmodul (3) ferner in einer gegebenen Seite (PBlöcke), die einer physikalischen Seitenadresse zugewiesen ist, Daten speichern kann, die in Abhängigkeit von den physikalischen Blockanfangsadressen und Unterblockgrößen bestimmt werden, die jeweils der Gruppe von Quellenunterblöcken und zielunterblöcken zugewiesen sind, und wobei die an den DMA-Controller durch Anlegen auf den Adressbus (BA) und Datenbus (BD) gelieferten Programmierelemente die physikalische Seitenadresse enthalten, und sich der DMA-Controller in Abhängigkeit von den in der Seite gespeicherten Daten programmieren kann.
DE602005003987T 2004-07-23 2005-07-05 Verfahren zur Programmierung einer System auf Chip DMA Steuerung, sowie ein System auf Chip dafür. Active DE602005003987T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0408202 2004-07-23
FR0408202 2004-07-23

Publications (2)

Publication Number Publication Date
DE602005003987D1 DE602005003987D1 (de) 2008-02-07
DE602005003987T2 true DE602005003987T2 (de) 2008-12-11

Family

ID=34947971

Family Applications (1)

Application Number Title Priority Date Filing Date
DE602005003987T Active DE602005003987T2 (de) 2004-07-23 2005-07-05 Verfahren zur Programmierung einer System auf Chip DMA Steuerung, sowie ein System auf Chip dafür.

Country Status (3)

Country Link
US (1) US7464198B2 (de)
EP (1) EP1619589B1 (de)
DE (1) DE602005003987T2 (de)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7596100B2 (en) * 2004-11-12 2009-09-29 Brocade Communications Systems, Inc. Methods, devices and systems with improved zone merge operation by caching prior merge operation results
US7502872B2 (en) * 2005-05-23 2009-03-10 International Bsuiness Machines Corporation Method for out of user space block mode I/O directly between an application instance and an I/O adapter
US7552240B2 (en) 2005-05-23 2009-06-23 International Business Machines Corporation Method for user space operations for direct I/O between an application instance and an I/O adapter
US20060265525A1 (en) * 2005-05-23 2006-11-23 Boyd William T System and method for processor queue to linear block address translation using protection table control based on a protection domain
US7502871B2 (en) * 2005-05-23 2009-03-10 International Business Machines Corporation Method for query/modification of linear block address table entries for direct I/O
US7464189B2 (en) * 2005-05-23 2008-12-09 International Business Machines Corporation System and method for creation/deletion of linear block address table entries for direct I/O
US7577761B2 (en) * 2005-08-31 2009-08-18 International Business Machines Corporation Out of user space I/O directly between a host system and a physical adapter using file based linear block address translation
US20070168567A1 (en) * 2005-08-31 2007-07-19 Boyd William T System and method for file based I/O directly between an application instance and an I/O adapter
US7500071B2 (en) 2005-08-31 2009-03-03 International Business Machines Corporation Method for out of user space I/O with server authentication
US7657662B2 (en) * 2005-08-31 2010-02-02 International Business Machines Corporation Processing user space operations directly between an application instance and an I/O adapter
US20070162647A1 (en) * 2005-12-19 2007-07-12 Via Technologies, Inc. System and Method for Performing Scatter/Gather Direct Memory Access Transfers
JP4994103B2 (ja) * 2007-05-08 2012-08-08 パナソニック株式会社 アドレス変換メモリアクセス機構を備える半導体装置
US8397046B2 (en) * 2009-03-26 2013-03-12 Hitachi, Ltd. Method and apparatus for deploying virtual hard disk to storage system
US8255475B2 (en) * 2009-04-28 2012-08-28 Mellanox Technologies Ltd. Network interface device with memory management capabilities
US8924685B2 (en) * 2010-05-11 2014-12-30 Qualcomm Incorporated Configuring surrogate memory accessing agents using non-priviledged processes
US8645663B2 (en) 2011-09-12 2014-02-04 Mellanox Technologies Ltd. Network interface controller with flexible memory handling
US9143467B2 (en) 2011-10-25 2015-09-22 Mellanox Technologies Ltd. Network interface controller with circular receive buffer
US9256545B2 (en) 2012-05-15 2016-02-09 Mellanox Technologies Ltd. Shared memory access using independent memory maps
US8761189B2 (en) 2012-06-28 2014-06-24 Mellanox Technologies Ltd. Responding to dynamically-connected transport requests
US8745276B2 (en) 2012-09-27 2014-06-03 Mellanox Technologies Ltd. Use of free pages in handling of page faults
US9639464B2 (en) 2012-09-27 2017-05-02 Mellanox Technologies, Ltd. Application-assisted handling of page faults in I/O operations
US8914458B2 (en) 2012-09-27 2014-12-16 Mellanox Technologies Ltd. Look-ahead handling of page faults in I/O operations
US10095433B1 (en) * 2012-10-24 2018-10-09 Western Digital Technologies, Inc. Out-of-order data transfer mechanisms for data storage systems
US9298642B2 (en) 2012-11-01 2016-03-29 Mellanox Technologies Ltd. Sharing address translation between CPU and peripheral devices
US10102382B1 (en) * 2013-03-14 2018-10-16 Lawrence Livermore National Security, Llc Intrinsic use control for system and use controlled component security
US9146678B2 (en) * 2013-04-29 2015-09-29 International Business Machines Corporation High throughput hardware acceleration using pre-staging buffers
US9727503B2 (en) 2014-03-17 2017-08-08 Mellanox Technologies, Ltd. Storage system and server
US9696942B2 (en) 2014-03-17 2017-07-04 Mellanox Technologies, Ltd. Accessing remote storage devices using a local bus protocol
US10120832B2 (en) 2014-05-27 2018-11-06 Mellanox Technologies, Ltd. Direct access to local memory in a PCI-E device
US10031857B2 (en) 2014-05-27 2018-07-24 Mellanox Technologies, Ltd. Address translation services for direct accessing of local memory over a network fabric
US10148581B2 (en) 2016-05-30 2018-12-04 Mellanox Technologies, Ltd. End-to-end enhanced reliable datagram transport
US10394711B2 (en) * 2016-11-30 2019-08-27 International Business Machines Corporation Managing lowest point of coherency (LPC) memory using a service layer adapter
US11979340B2 (en) 2017-02-12 2024-05-07 Mellanox Technologies, Ltd. Direct data placement
US10516710B2 (en) 2017-02-12 2019-12-24 Mellanox Technologies, Ltd. Direct packet placement
US10210125B2 (en) 2017-03-16 2019-02-19 Mellanox Technologies, Ltd. Receive queue with stride-based data scattering
US11252464B2 (en) 2017-06-14 2022-02-15 Mellanox Technologies, Ltd. Regrouping of video data in host memory
US10367750B2 (en) 2017-06-15 2019-07-30 Mellanox Technologies, Ltd. Transmission and reception of raw video using scalable frame rate
FR3070514B1 (fr) * 2017-08-30 2019-09-13 Commissariat A L'energie Atomique Et Aux Energies Alternatives Controleur d'acces direct en memoire, dispositif et procede de reception, stockage et traitement de donnees correspondants
US11940933B2 (en) 2021-03-02 2024-03-26 Mellanox Technologies, Ltd. Cross address-space bridging
US11934333B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Storage protocol emulation in a peripheral device
US11934658B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Enhanced storage protocol emulation in a peripheral device
US11726666B2 (en) 2021-07-11 2023-08-15 Mellanox Technologies, Ltd. Network adapter with efficient storage-protocol emulation

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4849875A (en) 1987-03-03 1989-07-18 Tandon Corporation Computer address modification system with optional DMA paging
EP0447145B1 (de) 1990-03-12 2000-07-12 Hewlett-Packard Company Durch Anwender festgelegter direkter Speicherzugriff mit Anwendung von virtuellen Adressen
US5890220A (en) 1991-02-05 1999-03-30 Hitachi, Ltd. Address conversion apparatus accessible to both I/O devices and processor and having a reduced number of index buffers
JPH05216809A (ja) 1992-02-06 1993-08-27 Nec Corp Dma転送方式
GB2270780A (en) * 1992-09-21 1994-03-23 Ibm Scatter-gather in data processing systems.
US5708849A (en) * 1994-01-26 1998-01-13 Intel Corporation Implementing scatter/gather operations in a direct memory access device on a personal computer
US5887190A (en) 1995-05-15 1999-03-23 Nvidia Corporation System for determining from a command storing in a storage circuit an application program which has initiated the command to determine an input/output device address
US5685011A (en) * 1995-05-15 1997-11-04 Nvidia Corporation Apparatus for handling failures to provide a safe address translation in an improved input/output architecture for a computer system
US5623692A (en) * 1995-05-15 1997-04-22 Nvidia Corporation Architecture for providing input/output operations in a computer system
US5758182A (en) * 1995-05-15 1998-05-26 Nvidia Corporation DMA controller translates virtual I/O device address received directly from application program command to physical i/o device address of I/O device on device bus
US5721947A (en) * 1995-05-15 1998-02-24 Nvidia Corporation Apparatus adapted to be joined between the system I/O bus and I/O devices which translates addresses furnished directly by an application program
US5659798A (en) * 1996-02-02 1997-08-19 Blumrich; Matthias Augustin Method and system for initiating and loading DMA controller registers by using user-level programs
US6219725B1 (en) * 1998-08-28 2001-04-17 Hewlett-Packard Company Method and apparatus for performing direct memory access transfers involving non-sequentially-addressable memory locations
JP3446653B2 (ja) * 1999-03-26 2003-09-16 日本電気株式会社 データ転送装置
US6766383B1 (en) * 1999-09-27 2004-07-20 Conexant Systems, Inc. Packet-based direct memory access
US6353867B1 (en) * 2000-01-14 2002-03-05 Insilicon Corporation Virtual component on-chip interface
JP2002342259A (ja) * 2001-05-21 2002-11-29 Hitachi Ltd Dmaコントローラおよびdmaコントローラ自動生成装置
JP2003076498A (ja) * 2001-09-05 2003-03-14 Hitachi Ltd ディスク記憶装置
US7617333B2 (en) * 2003-01-21 2009-11-10 Nextio Inc. Fibre channel controller shareable by a plurality of operating system domains within a load-store architecture
US8832346B2 (en) * 2003-06-16 2014-09-09 Nvidia Corporation Data packing and unpacking engine
US7225316B2 (en) * 2003-11-17 2007-05-29 Intel Corporation Memory mapping apparatus, systems, and methods
FR2871908A1 (fr) * 2004-06-18 2005-12-23 St Microelectronics Sa Procede et programme d'ordinateur de traitement d'une adresse virtuelle pour la programmation d'un controleur de dma et systeme sur puce associe

Also Published As

Publication number Publication date
US7464198B2 (en) 2008-12-09
US20060168365A1 (en) 2006-07-27
EP1619589B1 (de) 2007-12-26
DE602005003987D1 (de) 2008-02-07
EP1619589A1 (de) 2006-01-25

Similar Documents

Publication Publication Date Title
DE602005003987T2 (de) Verfahren zur Programmierung einer System auf Chip DMA Steuerung, sowie ein System auf Chip dafür.
DE602005002691T2 (de) Verfahren zur Programmierung einer System auf Chip DMA Steuerung, sowie ein System auf Chip dafür.
DE69724572T2 (de) Verfahren und Vorrichtung zur Vorladung von verschiedenen vorgegebenen Adressenübersetzungsattributen
DE3607889C2 (de)
DE60010907T2 (de) Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter
DE3011552C2 (de)
DE69823180T2 (de) Speicherzugangsschutz
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE69721590T2 (de) Ein bereichsbasiertes seiten-table-walk-bit verwendendes verfahren sowie vorrichtung
EP1393184B1 (de) Vorrichtung und verfahren zum ermitteln einer physikalischen adresse aus einer virtuellen adresse unter verwendung einer hierarchischen abbildungsvorschrift mit komprimierten knoten
DE3151745C2 (de)
DE69732181T2 (de) Verfahren und gerät zum zwischenspeichern von systemverwaltungsinformationen mit anderen informationen
DE1774296B2 (de) Restruktuierbare Steuereinheit für elektronische Digitalrechner
DE102006024655A1 (de) Speicherkarte und Speichersteuereinheit
DE2455047A1 (de) Datenverarbeitungssystem
DE2517276A1 (de) Datenverarbeitungssystem
DE2360303C2 (de) Datenverarbeitungsanlage mit Adreßübersetzung für Ein-/Ausgabekanäle
DE2441754A1 (de) Prozessor-datenuebertragungssteueranordnung sowie verfahren zur steuerung der datenuebertragung eines prozessors
DE2164793A1 (de) Verfahren und Datenverarbeitungsanlage zur Steuerung einer Vielzahl von Eingabe/ Ausgabe-Einheiten mittels eine Zentraleinheit
DE112021003094T5 (de) System und verfahren zum planen von gemeinsam nutzbaren pcie-endpunktvorrichtungen
DE112004001652T5 (de) Vektorieren eines Interrupt oder einer Ausnahme bei Wiederaufnahme des Betriebes einer virtuellen Maschine
DE2926351A1 (de) Look-ahead-speicheradressen- steuereinrichtung
DE2134816A1 (de) Einrichtung zur adressenuebersetzung
DE3936339C2 (de) DMA-Controller
DE3650782T2 (de) Anordnung von Cachespeicherverwaltungseinheiten

Legal Events

Date Code Title Description
8364 No opposition during term of opposition