DE69328320T2 - Vorrichtung und Verfahren zur Datenübertragung zu und von einem Wirtrechnersystem - Google Patents

Vorrichtung und Verfahren zur Datenübertragung zu und von einem Wirtrechnersystem

Info

Publication number
DE69328320T2
DE69328320T2 DE69328320T DE69328320T DE69328320T2 DE 69328320 T2 DE69328320 T2 DE 69328320T2 DE 69328320 T DE69328320 T DE 69328320T DE 69328320 T DE69328320 T DE 69328320T DE 69328320 T2 DE69328320 T2 DE 69328320T2
Authority
DE
Germany
Prior art keywords
adapter
host
memory
index
host system
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.)
Expired - Lifetime
Application number
DE69328320T
Other languages
English (en)
Other versions
DE69328320D1 (de
Inventor
Chmielecki, Jr
Itkowsky, Jr
G Paul Koning
Kadangode K Ramakrishnan
Douglas M Washabaugh
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.)
Enterasys Networks Inc
Original Assignee
Cabletron Systems Inc
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 Cabletron Systems Inc filed Critical Cabletron Systems Inc
Application granted granted Critical
Publication of DE69328320D1 publication Critical patent/DE69328320D1/de
Publication of DE69328320T2 publication Critical patent/DE69328320T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • G06F5/12Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
    • 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/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • G06F13/124Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
    • G06F13/128Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine for dedicated transfers to a network
    • 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/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/06Indexing scheme relating to groups G06F5/06 - G06F5/16
    • G06F2205/064Linked list, i.e. structure using pointers, e.g. allowing non-contiguous address segments in one logical buffer or dynamic buffer space allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/12Indexing scheme relating to groups G06F5/12 - G06F5/14
    • G06F2205/126Monitoring of intermediate fill level, i.e. with additional means for monitoring the fill level, e.g. half full flag, almost empty flag

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)

Description

  • Die Erfindung bezieht sich auf einen Kommunikationsadapter oder eine Eingabe/Ausgabe-Controllervorrichtung zum Transferieren von Daten zwischen einem Host-System und einem Netzwerk oder einer Peripherievorrichtung.
  • HINTERGRUND DER ERFINDUNG
  • In einem Datenverarbeitungssystem werden Kommunikationsadapter und I/O-Controller vorgesehen, um Daten zwischen einem Host-System und einem Netzwerk oder einer Peripherievorrichtung zu transferieren. Der Speicher und der Prozessor des Host-Systems sind mit dem Adapter oder dem Controller durch ein System oder einen I/O-Bus oder durch ein Netzwerk gekoppelt.
  • Mit dem Schnellerwerden von Zentraleinheiten in Host-Systemen hat sich die Differenz zwischen der Geschwindigkeit von Prozessorvorgängen, die lokale Register oder einen Cache- Speicher betreffen, und der Geschwindigkeit von Zugriffen zwischen dem Prozessor des Host-Systems und dem Hauptspeicher oder Peripherievorrichtungen vergrößert. Damit Datenverarbeitungssysteme die schnelleren Prozessoren besser verwenden können, besteht folglich ein Bedarf, um wirksamere Verfahren zum Transferieren von Daten zwischen dem Host- System und Netzwerken oder Peripherievorrichtungen vorzusehen.
  • Um die Performanz zu verbessern, verwenden die meisten Hochleistungsadapter und Hochleistungscontroller einen Direktspeicherzugriff (DMA = direct memory access), um Daten zu transferieren. Die Verwendung von DMA garantiert jedoch selbst keine hohe Performanz. Ein Hochleistungsadapter oder ein Hochleistungscontroller sollte den Zeitbetrag minimieren, mit dem ein System oder I/O-Bus während eines Transfers von Daten zwischen den Adapter oder Controller und dem Host- System verwendet wird, sollte die Arbeitsmenge verringern, die von dem Host-System ausgeführt werden muß, und sollte ferner eine wirksame Implementierung des DMA vorsehen.
  • Ein Modell für DMA-Transfers zwischen einem Host-Speicher und I/O-Controller wird von H. Michael Wenzel in IEEE P1212 CSR Architecture Specification in "CSR Architecture (DMA Framework): Recommended DMA Architectures", Teil III-A, Entwurf 1.38 (5. Juli 1990) beschrieben.
  • In diesem Modell, das für Transfers verwendet werden kann, die solche Systembusse wie Futurebus+, SCSI und SerialBus betreffen, werden kreisartige Warteschlange zum Kommunizieren von Information zwischen dem Adapter oder Controller und dem Prozessor in dem Host-System vorgesehen. Eine kreisartige Warteschlange ist eine Software-Array-Struktur von Nachrichtenspeicherstellen. Auf die Elemente in kreisartigen Warteschlangen wird in einer First-In-First-Out-Reihenfolge zugegriffen, und eine jeweilige kreisartige Warteschlange wird verwendet, um Nachrichten in nur einer Richtung, von einem einzigen Erzeuger bzw. Producer des Warteschlangenelements zu einem spezifischen Verbraucher bzw. Consumer des Warteschlangenelements weiterzuleiten.
  • Jeder kreisartigen Warteschlange sind zwei getrennte Indizes zugeordnet, nämlich ein Producerindex und ein Consumerindex. Der Producerindex zeigt auf ein ausgewähltes Element in der kreisartigen Warteschlange, das geschrieben wurde oder geschrieben ("produced")werden wird. Der Consumerindex zeigt auf ein ausgewähltes Element in der kreisartigen Warteschlange, das gelesen ("consumed") wurde oder gelesen werden wird. Während Elemente zu der Warteschlange hinzugefügt und nachfolgend entfernt werden, wird der Consumerindex kontinuierlich den Producerindex um das kreisartige Elementen-Array jagen.
  • Eine kreisartige Warteschlange kann als eine Busschnittstelle zwischen einem Host-Speicher in einem Host-System und einem Kommunikationsadapter oder I/O-Controller verwendet werden. Vorzugsweise ist die gesamte kreisartige Warteschlange in physisch angrenzenden Speicherstellen in dem Host-Speicher positioniert. Der Kommunikationsadapter oder der I/O- Controller ist mit einem Satz von Steuerfeldern in seinem Speicher versehen. Die Steuerfelder beschreiben die Stelle der kreisartigen Warteschlangen in einem Host-Speicher und den Wert des Producerindex und/oder des Consumerindex.
  • Es gibt mehrere gleichwertige Wege, in denen eine kreisartige Warteschlange implementiert wird. Beispielsweise können die besonderen Warteschlangenelemente, auf die durch die Producer- und Consumerindizes gezeigt wird, in unterschiedlichen Weisen definiert werden. Typischerweise wird der Producerindex entweder auf das nächste Warteschlangenelement, das geschrieben werden wird, oder auf das letzte Warteschlangenelement, das geschrieben wurde, zeigen. Ebenso ist der Consumerindex im allgemeinen als entweder auf das nächste Warteschlangenelement, das gelesen werden wird, oder auf das letzte Warteschlangenelement, das gelesen wurde, zeigend definiert.
  • Durch Vergleichen der Producer- und Consumerindizes für eine jeweilige kreisartige Warteschlange, kann eine Vorrichtung bestimmen, ob die kreisartige Warteschlange leer ist (wobei das Schreiben von mehr Elementen in die Warteschlange erforderlich ist, bevor irgendwelche zusätzlichen Warteschlangenelemente gelesen werden können) oder voll ist (wobei das Lesen von mehr Elementen aus der Warteschlange erforderlich ist, bevor irgendwelche zusätzliche Warteschlangenelemente geschrieben werden können).
  • Um ohne weiteres zwischen einer Warteschlange, die voll ist, und einer Warteschlange, die leer ist, zu unterscheiden, wird es bevorzugt, wenn mindestens eine Stelle in der kreisartigen Warteschlange immer leer gelassen wird. Auf diese Art wird ein neues Element nie in die kreisartige Warteschlange an eine Stelle geschrieben, die direkt einer Stelle folgt, in der das nächste zu lesende Element gespeichert ist. Wenn das nächste zu lesende Element immer das gleiche wie das nächste zu schreibende Element ist, ist als Ergebnis die Warteschlange leer. Im Gegensatz dazu, wenn immer das nächste zu schreibende Element direkt dem nächsten zu lesenden Element folgt, ist die Warteschlange voll.
  • Es gibt mehrere Gründe, warum es vorteilhaft ist, Indizes anstelle von Adressenzeigern, die spezifisch kennzeichnen, wo ein besonderes Warteschlangenelement im Host-Speicher gespeichert ist zu verwenden, um auf die kreisartige Warteschlange zuzugreifen. Indizes sind leicht automatisch zu aktualisieren, und sie sind zweckmäßig zum Behalten von parallelen Kopien interner Zustandsinformationen, die auf jedes Warteschlangenelement bezogen ist. Ferner ist ein Index kompakter als ein Adressenzeiger und kann normalerweise aus einem einzigen Byte bestehen. Ohne Rücksicht auf den Bereich und die Größe der Adressenwerte, die den Speicherstellen der Elemente in einer Warteschlange entsprechen, werden die Indizes für die Warteschlange nur eine Größe aufweisen.
  • Es gibt relativ einfache Algorithmen zum Schreiben von Elementen in die kreisartige Warteschlange und zum Lesen von Elementen aus der kreisartigen Warteschlange. Wenn die Warteschlange beispielsweise eine Gesamtmenge von "N"- Elementen enthält (N ist eine positive ganze Zahl) und der Producerindex auf die nächste Stelle in der kreisartigen Warteschlange zeigt, in die ein Element geschrieben werden wird, dann wird in der Stelle in der Warteschlange, auf die durch den Producerindex gezeigt wird, ein neues Warteschlangenelement geschrieben ("gefüllt"), und der Producerindex wird inkrementiert (modulo N), um auf die nächste Stelle in der Warteschlange zu zeigen. Wenn der Consumerindex auf die letzte Stelle in der kreisartigen Warteschlange zeigt, aus der ein Element gelesen wurde, dann wird das nächste Warteschlangenelement, das aus der Warteschlange entfernt wird, aus der Stelle in der Warteschlange gelesen ("geleert"), die direkt der Stelle folgt (Modulo N), auf die der Consumerindex zeigt, und der Consumerindex wird inkrementiert (Modulo N), um auf die Stelle in der Warteschlange zu zeigen.
  • Einige der Vorteil beim Verwenden von kreisartigen Warteschlangen sind die Synchronisierungsmechanismen, die sie für einen Speicherzugriff vorsehen. Dem Producer der Warteschlangenelement wird nur erlaubt, den Producerindex zu aktualisieren, wenn er die Warteschlange auffüllt (ein Element hineinschreibt). Ebenso wird dem Consumer der Warteschlangenelemente nur erlaubt, den Consumerindex zu aktualisieren, wann immer er die Warteschlange leert (ein Element ausliest). Daher gibt es keine Konfusion hinsichtlich dessen, welche Warteschlangenelemente verfügbar sind (nämlich leere Stellen sind dem Producer und volle Stellen sind dem Consumer verfügbar), und welche Warteschlangenelemente von jeder Vorrichtung gelesen werden können oder auf die von jeder Vorrichtung geschrieben werden kann.
  • Verschiedene Sorgen hinsichtlich eines Zwischenspeicherns (caching) treten zu Zeiten auf, wenn ein Kommunikationsadapter oder ein I/O-Controller nicht Cache- kohärent mit dem Host-System ist, oder wenn der Kommunikationsadapter oder der I/O-Controller daran gehindert wird, bei dem Cache-Koheränz-Protokoll des Host-Systems teilzunehmen. In diesen Konfigurationen muß die Software Zugriffe auf den Host-Speicher durch den Prozessor in dem Host-System bzw. durch den Kommunikationsadapter oder I/O- Controller verfolgen.
  • Wenn ein Prozessor in dem Host-System auf Information in dem Host-Speicher zugreift, greift typischerweise der Prozessor auf eine zwischengespeicherte (cached) Kopie zu. Wenn ein Kommunikationsadapter oder ein I/O-Controller auf Information aus den gleichen Stellen im Host-Speicher zugreift, greift der Adapter oder Controller direkt auf die Host- Speicherstellen zu, anstelle auf eine Kopie der in dem Cache des Host-Prozessors gespeicherten Information zuzugreifen. Folglich müssen Vorkehrungen getroffen werden, um ein Fehllesen der Information oder ein irrtümliches Überschreiben der Information zu verhindern.
  • Ein Fehllesen von Informationen kann auftreten, wenn der Host-Prozessor auf in seinem Cache gespeicherte Information zugreift, wenn aktualisiertere Werte der gleichen Information in dem Host-Speicher vorliegen. Daher muß zu Zeiten, zu denen der Host-Prozessor auf diese Informationen zugreift, die Software sicherstellen, daß die an den Prozessor zurückgegebenen Werte die in dem Host-Speicher residierenden aktualisierten Werte und nicht die vorher in seinem Cache gespeicherten Werte sind. Folglich muß eine Anzahl von Zyklen von dem Prozessor belegt werden, um sicherzustellen, daß aktuelle Information in seinem Cache enthalten ist. Ferner kann ein Überschreiben von in den Host-Speicher durch den Kommunikationsadapter oder I/O-Controller geschriebenen Information zu Zeiten auftreten, zu denen der Host-Prozessor die in seinem Cache gespeicherte Information in den Host- Speicher zurückschreibt ("flushes").
  • Diese Arten von logischen Gefahren beim Zugreifen auf die Elemente, auf die durch die Producer- und Consumerindizes gezeigt wird, kann minimiert werden, wenn eine kreisartige Warteschlange verwendet wird, und es eine einzige Schreibvorrichtung und eine einzige Lesevorrichtung für die Elemente in der Warteschlange gibt. Wenn der Prozessor in dem Host-System beispielsweise der einzige Producer von Elementen in der Warteschlange und der Kommunikationsadapter oder I/O- Controller der einzige Consumer von Elementen in der Warteschlange ist, dann wird nur der Prozessor Elemente in die Warteschlange schreiben, und nur der Kommunikationsadapter oder I/O-Controller wird Elemente aus der Warteschlange lesen. Ferner kann weder der Host-Prozessor noch der Kommunikationsadapter oder I/O-Controller auf ein bestimmtes Element in der Warteschlange zugreifen, es sei denn, daß dieses Element ausschließlich von ihm "besessen" wird. Daher sind "volle" Stellen, die von dem Producer geschriebene Elemente enthalten, nur für den Consumer verfügbar, und solche Stellen werden nachfolgend nur dem Producer verfügbar sein, nachdem die Elemente in diesen Stellen durch den Consumer gelesen wurden ("geleert").
  • Bei Implementierungen, bei denen viele Schreibvorrichtungen auf Warteschlangen zugreifen können, wird ein Signalgebungs- System (Semaphore System), Eigentum-Bits oder irgendein gleichwertiger Mechanismus vorgesehen, um zu signalisieren, welches der vielen Schreibvorrichtungen die Erlaubnis besitzt, um auf das Warteschlangenelement zuzugreifen. Bei diesen vielen Schreibvorrichtungsimplementierungen verschlechtert jedoch die Notwendigkeit, Signalgeber oder Eigentum-Bits zu prüfen und zu aktualisieren, die Performanz des Datenverarbeitungssystems.
  • Bei Datenverarbeitungssystemen, bei denen es eine einzige Schreibvorrichtung und eine einzige Lesevorrichtung gibt, müssen keine Signalgeber oder Eigentum-Bits zwischen dem Host-Prozessor, der der Producer der Warteschlangenelemente ist, und dem Kommunikationsadapter oder I/O-Controller, der der Consumer der Warteschlangenelemente ist, ausgetauscht werden. Wenn die kreisartige Warteschlange richtig verwendet wird, besteht keine Gefahr, daß eine Vorrichtung Werte überschreiben wird, die von dem Producer geschrieben wurden, bevor diese Werte durch den Consumer gelesen wurden.
  • Bei diesen Einzel-Schreibvorrichtung- und Einzel- Lesevorrichtung-Datenverarbeitungssystemen kann jedoch ein potentielles Problem infolge eines Caching zu Zeiten auftreten, zu denen der Host-Prozessor (Producer) den Wert eines in seinem Cache gespeicherten kreisartigen Warteschlangenelements ändert. Wenn der Host-Prozessor dann seinen Producerindex vor einem Rückschreiben seines Cache in den Host-Speicher ("flushing") inkrementiert, wird die dem geänderten Warteschlangenelement entsprechende Warteschlangenstelle von dem Adapter oder Controller als voll angesehen, obgleich das neue Warteschlangenelement noch nicht in den Host-Speicher geschrieben wurde. Folglich kann der Kommunikationsadapter oder I/O-Controller das Warteschlangenelement (oder mit dem Warteschlangenelement verbundene Datenstrukturen) lesen, bevor die Cache-Zeile geschrieben ist ("flushed"), und kann auf alte Informationen zugreifen, die durch den Host-Prozessor ersetzt wird. Die "Cache-Zeile" ist die Breite eines Cache (typischerweise 16 bis 64 Byte), die von dem Host-Prozessor eingebracht wird, wenn er Daten aus dem Host-Speicher liest. Wenn der Host- Prozessor irgendeinen Eintrag in seinem Cache ändert, ersetzt der Host-Prozessor nachfolgend den entsprechenden Eintrag im Host-Speicher durch Rückschreiben ("flushing") der gesamten Cache-Zeile in den Host-Speicher.
  • Dieses potentielle Problem des Adapters oder Controllers beim Lesen eines ungültigen Warteschlangenelements (oder mit dem Warteschlangenelement verbundener Datenstruktur) aus dem Host-Speicher, nachdem das entsprechende Warteschlangenelement durch einen neu erzeugten Eintrag in dem Cache des Host-Prozessors ersetzt wurde, kann vermieden werden. Zu Zeiten, zu denen ein neues Warteschlangenelement von dem Host-Prozessor geschrieben (produziert) wird, sollte der Host-Prozessor (Producer) den Producerindex nur nach einem Rückschreiben seiner den neu erzeugten Eintrag enthaltenden Cache-Zeile in den Host inkrementieren. Auf diese Art wird der Kommunikationsadapter oder der I/O- Controller alte Einträge nicht aus dem Host-Speicher lesen, und es werden nur die Werte von Warteschlangenelementen in dem Host-Speicher, die vorher von dem Host-Prozessor geschrieben und von dem Adapter oder Controller gelesen wurden, als ein Ergebnis eines Cache-Flush in den Host- Speicher ersetzt.
  • Ein weiteres Merkmal des kreisartigen Warteschlangenmodells ist die Fähigkeit, auf Elemente in Blöcken zuzugreifen und Elemente in Blöcken zu übertragen. Wenn der Consumer beispielsweise ein Kommunikationsadapter oder ein I/O- Controller ist, der weit hinter einem als Producer dienenden Prozessor, zurückfällt, wird ein Vergleich der Producer- und Consumerindizes angeben, wieviele Warteschlangenelemente zu dem Kommunikationsadapter oder I/O-Controller in einem einzigen Block zu übertragen sind. Indem einfach die Producer- und Consumerindizes gelesen und verglichen werden, bestimmt der Producer, wieviele leere Stellen in der Warteschlange zum Schreiben aktuell verfügbar sind, und der Consumer bestimmt, wieviele volle Stellen noch nicht gelesen wurden.
  • Bei einer kreisartigen Warteschlange können die Elemente verwendet werden, um Nachrichten darzustellen, die auf einem System oder einem I/O-Bus oder Netzwerk gesendet werden. Die Warteschlangenelemente können selbst Daten und Befehle enthalten oder können anstelledessen Zeiger auf Puffern enthalten, die in dem Host-Speicher angebracht sind. Zusätzlich zu Daten, können Warteschlangenelemente (oder die Puffer, auf denen durch Warteschlangenelemente gezeigt wird) Information enthalten, die eine Transaktionsinitiierung, eine Transaktionsbeendigung, Befehle von dem Host-System an den Kommunikationsadapter oder I/O-Controller oder asynchrone Statusanzeigen von dem Kommunikationsadapter oder I/O- Controller an das Host-System darstellen.
  • Eine Kommunikation zwischen einem Prozessor in dem Host- System und einem Kommunikationsadapter oder I/O-Controller ist bezüglich der Erzeugung (production) und des Gebrauchs bzw. Verbrauchs (consumption) von Puffern im wesentlichen asymmetrisch. Der Host-Prozessor initiiert die meisten Transaktionen, liefert den verknüpften Pufferplatz im Host- Speicher und arbeitet im allgemeinen als ein Master gegenüber den Kommunikationsadapter oder I/O-Controller. Eine Transaktion erfolgt im allgemeinen in der unten beschriebenen Art und Weise.
  • Zuerst reserviert der Host-Prozessor eine Anzahl von Puffern im Host-Speicher für den Transfer von Daten zu und/oder von dem Kommunikationsadapter oder I/O-Controller. Zweitens sendet der Host-Prozessor eine Transaktionsinitiierungsnachricht an den Kommunikationsadapter oder I/O-Controller. Dies kann durch Schreiben der Nachricht in eine Befehlswarteschlange im Host- Speicher implementiert werden. (Bei einem anderen Ansatz kann die Nachricht direkt in ein Steuer- und Statusregister des Kommunikationsadapters oder I/O-Controllers geschrieben werden). Drittens triggert der Host-Prozessor den Kommunikationsadapter oder I/O-Controller, wenn die Transaktionsinitiierungsnachricht über eine Befehlswarteschlange gesendet wird, um die Befehlswarteschlange zu verwalten.
  • Viertens wird, wenn die Transaktionsinitiierungsnachricht über die Befehlswarteschlange gesendet wird, die Transaktionsinitiierungsnachricht dann durch den Kommunikationsadapter oder I/O-Controller von seiner Befehlswarteschlange gelesen, und nachrichtenbezogene Ereignisse werden zur Verarbeitung durch den Kommunikationsadapter oder I/O-Controller eingeplant. Fünftens kopiert während einer Ereignisverarbeitung durch den Kommunikationsadapter oder I/O-Controller der Kommunikationsadapter oder der I/O-Controllerblock Daten an oder von dem Host-Speicher.
  • Sechstens sendet der Kommunikationsadapter oder I/O- Controller eine Transaktionsbeendigungsnachricht an den Host- Prozessor durch Schreiben der Nachricht in eine Befehlsantwortwarteschlange für den Host-Prozessor. Siebtens triggert der Kommunikationsadapter oder I/O-Controller den Host-Prozessor, um seine Befehlsantwortwarteschlange zu bedienen. Achtens wird die Transaktionsbeendigungsnachricht durch den Host-Prozessor von seiner Befehlsantwortwarteschlange gelesen. Neuntens befreit der Host-Prozessor die Puffer im Host-Speicher, die vorher reserviert wurden, und liefert von dem Kommunikationsadapter oder I/O-Controller empfangene Daten und den Status an ein Anwendungsprogramm.
  • Nachdem ein neues Warteschlangenelement durch den Host- Prozessor geschrieben wurde, der der Producer der Warteschlangenelemente ist, liest der Kommunikationsadapter oder I/O-Controller, der der Consumer der Warteschlangenelement ist, das neue Warteschlangenelement. Der Kommunikationsadapter oder I/O-Controller aktualisiert dann seinen Consumerindex und schreibt den aktualisierten Consumerindex in den Host-Speicher. Nachdem der Kommunikationsadapter oder I/O-Controller Operationen an dem neuen Warteschlangenelement beendet und seinen aktualisierten Consumerindex in den Host-Speicher geschrieben hat, sendet der Kommunikationsadapter oder I/O-Controller einen Interrupt an den Prozessor des Host-Systems.
  • Bei Datenverarbeitungssystemen, die ein relativ schnelles Host-System und einen relativ schnellen Host-Prozessor aufweisen, sind, insbesondere wenn eine große Anzahl von kurzen Nachrichten zwischen dem Host-System und dem Adapter oder Controller transferiert werden, der Aufwand für eine Interrupt-Verarbeitung sehr hoch. Dies kann bei Implementierungen der Fall sein, bei denen ein Kommunikationsadapter verwendet wird, um eine Schnittstelle zwischen dem Host-System und einem Netzwerk, wie beispielsweise einem Token-Ring-Netzwerk bereitzustellen, verwendet wird.
  • Die Performanz dieser Datenverarbeitungssysteme kann durch Verringern der Anzahl von Interrupts verbessert werden, wodurch die Anzahl von Malen, mit denen die Betriebsvorgänge des Hochgeschwindigkeitsprozessors suspendiert werden müssen, um einen Interrupt zu bedienen, verringert wird. Ein Weg, um die Anzahl von Interrupts zu verringern, besteht für das Host-System darin, längere Bündel (bursts) von Daten als Antwort auf einen Interrupt zu verarbeiten, und für den Adapter oder Controller darin, ein Senden unnötiger Interrupts zu vermeiden.
  • Bei diesen Datenverarbeitungssystemen ist es oft zweckmäßig, Daten zwischen dem Host-System und dem Adapter oder Controller in relativ langen Bündeln zu transferieren. Beispielsweise muß ein Knoten in einem Token-Ring-Netzwerk auf ein Token warten, bevor der Knoten Datenpakete auf dem Netzwerk transferieren kann. Folglich besteht eine Tendenz viele Datenpakete (Paketzüge) auf dem Netzwerk in einem einzigen Bündel zu transferieren.
  • Unter diesen Umständen besteht ein Weg, bei dem ein Adapter oder Controller ein Senden unnötiger Interrupts vermeiden kann, darin, nur einen einzigen Interrupt zu senden, wenn viele Datenpakete zwischen dem Host-System und dem Adapter oder Controller in einem einzigen Bündel transferiert werden können. Wenn das Host-System gebeten wird, den Interrupt zu verwalten, ist es für das Host-System wünschenswert, einen gesamten Paketzug anstelle eines einzigen Datenpakets zu verarbeiten.
  • Unglücklicherweise kann der Adapter oder Controller nicht entscheiden, ob ein zusätzlicher Interrupt des Host-Systems notwendig ist (z. B. als Reaktion auf den Empfang eines zusätzlichen Datenpakets durch den Adapter oder Controller), es sei denn, daß der Adapter oder Controller Information erhält oder empfängt, die angibt, wieviel Arbeit von dem Host-System durchgeführt wurde. Demgemäß ist es wünschenswert, ein Datenverarbeitungssystem vorzusehen, bei dem der Adapter oder Controller bestimmen kann, ob Warteschlangenelemente (oder mit den Warteschlangenelementen verknüpfte Datenstrukturen), die durch den Adapter oder Controller verarbeitet wurden, nachfolgend durch das Host- System verarbeitet wurden.
  • Um die Zeitmenge zu minimieren, während derselben ein System oder ein I/O-Bus oder Netzwerk während eines Datentransfers zwischen dem Adapter oder Controller und dem Host-System verwendet wird, und um die Arbeitsmenge zu verringern, die durch das Host-System durchgeführt werden muß, ist es wünschenswert, die Anzahl von Interrupts, die von dem Adapter oder Controller an das Host-System gesendet werden, auf eine minimale Menge zu beschränken.
  • Die EP-0267974 offenbart eine Steuerschnittstelle zwischen einer Datenverarbeitungseinheit und Eingabe/Ausgabevorrichtungen in denen Speicherplatz für die Datentransfers durch zwei kontinuierlich laufende Transfermechanismen bereitgestellt wird, eine für eingehenden und eine für ausgehenden Verkehr, die eine Reihe von durch Zeiger gesteuerte Puffer umfaßt, die angeben, welche Puffer voll und welche Puffer leer sind.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Eine Aufgabe der Erfindung besteht darin, mindestens einige der mit dem Stand der Technik verbundenen Probleme zu bewältigen.
  • Es ist daher wünschenswert, einen verbesserten Kommunikationsadapter oder eine verbesserte Eingabe/Ausgabe- Controllervorrichtung zum Transferieren von Daten zwischen einem Host-System und einem Netzwerk oder einer Peripherievorrichtung bereitzustellen. Es würde vorteilhaft sein, eine Vorrichtung und ein Verfahren vorzusehen, in denen Warteschlangen verwendet werden, um Information zwischen dem Kommunikationsadapter oder Eingabe/Ausgabe-Controller und dem Host-System zu transferieren.
  • Der Kommunikationsadapter oder der Eingabe/Ausgabe-Controller sollte imstande sein, Warteschlangenelemente aus dem Host- Speicher zu lesen (consume), und Daten zu und von Datenpuffern im Host-Speicher zu schreiben und zu lesen, ohne den Prozessor in dem Host-System unnötigerweise zu unterbrechen. Der Kommunikationsadapter oder der Eingabe/Ausgabecontroller darf jedoch nicht auf eine Art implementiert werden, die das Senden eines Interrupts an das Host-System zu Zeiten verhindert, zu denen ein Interrupt erforderlich ist.
  • Zusätzliche Aufgaben und Vorteile der Erfindung werden teilweise in der folgenden Beschreibung dargelegt und werden teilweise aus der Beschreibung offensichtlich sein, oder können durch Praktizieren der Erfindung gelernt werden. Die Aufgaben und Vorteile der Erfindung können mittels der Instrumentalitäten und Kombinationen, die insbesondere in den beigefügten Ansprüchen aufgezeigt sind, verwirklicht und erhalten werden.
  • Um die Aufgaben zu lösen und in Übereinstimmung mit den Zwecken der Erfindung, wie sie hierin verkörpert und allgemein beschrieben sind, wird eine Vorrichtung und ein Verfahren zum Transferieren von Daten in einem Datenverarbeitungssystem vorgesehen, wie sie in den Ansprüchen 1 und 12 definiert ist. Gemäß einer Ausführungsform umfaßt ein Datenverarbeitungssystem ein Host- System mit einem Host-Speicher und einem Host-Prozessor und eine mit dem Host-System gekoppelte Vorrichtung, die einen Paketspeicher aufweist. Daten werden zu und/oder von einer Anzahl von Puffern in den Host-Speicher transferiert. Eine Anzahl von Deskriptoren ist in dem Host-Speicher in einer Warteschlange gespeichert, um anzugeben, wo verfügbare Puffer in dem Host-Speicher gespeichert sind. Ein in dem Host- Speicher gespeicherter Producerindex zeigt auf einen ausgewählten Deskriptor in der Warteschlange.
  • Die von der Vorrichtung ausgeführten Funktionen umfassen: Speichern von Daten in dem Paketspeicher; Speichern eines Consumerindex, der auf einen ausgewählten Deskriptor in der Warteschlange zeigt; Empfangen eines Producerindex von dem Host-System; Vergleichen des Producerindex mit dem Consumerindex, um zu bestimmen, ob irgendwelche Puffer in dem Host-Speicher für Transfers von Daten zwischen dem Paketspeicher und dem Host-Speicher verfügbar sind; Lesen eines Deskriptors aus der Warteschlange in dem Host-Speicher, der angibt, wo der nächste verfügbare Puffer in dem Host- Speicher gespeichert ist; Transferieren von Daten zwischen dem Paketspeicher und dem nächsten verfügbaren Puffer in dem Host-Speicher zu Zeiten, wenn Puffer in dem Host-Speicher für Transfers von Daten zwischen dem Paketspeicher und dem Host- Speicher verfügbar sind; Aktualisieren des Consumerindex als Reaktion auf das Transferieren von Daten zwischen dem Paketspeicher und dem Host-Speicher, um auf einen weiteren ausgewählten Deskriptor in der Warteschlange zu zeigen; Setzen eines Interrupt-Arm-Bits, um die Vorrichtung zu befähigen, das Host-System zu unterbrechen; und Unterbrechen des Host-Systems nach dem Transferieren von Daten zwischen dem Paketspeicher und dem Host-Speicher zu Zeiten, zu denen das Interrupt-Arm-Bit gesetzt ist.
  • Gemäß der Erfindung umfaßt das Datenverarbeitungssystem einen Beendigungsindex, Bei einer bevorzugten Ausführungsform umfassen die von der Vorrichtung ausgeführten Funktionen: Empfangen eines Beendigungsindex von dem Host-System; Vergleichen des Beendigungsindex mit dem aktualisierten Consumerindex, um zu bestimmen, ob der Host-Prozessor eine Verarbeitung als Reaktion auf einen Transfer von Daten zwischen dem Paketspeicher und dem Host-Speicher beendet hat; und Unterbrechen des Host-Systems nach dem Transferieren von Daten zwischen dem Paketspeicher und dem Host-Speicher zu Zeiten, zu denen der Host-Prozessor eine Verarbeitung als Reaktion auf den Transfer von Daten zwischen dem Paketspeicher und dem Host-Speicher nicht beendet hat.
  • Die beigefügten Zeichnungen, die in diese Beschreibung aufgenommen sind und einen Teil derselben bilden, veranschaulichen bevorzugte Ausführungsformen der Erfindung und erläutern zusammen mit der Beschreibung der Erfindung die Prinzipien der Erfindung.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Fig. 1 ist ein Blockdiagramm einer bevorzugten Ausführungsform einer Vorrichtung zum Praktizieren der Erfindung.
  • Fig. 2 ist ein Diagramm von Datenstrukturen in einem Host- Speicher zum Implementieren einer kreisartigen Warteschlange von Datendeskriptoren.
  • Fig. 3 ist ein Diagramm von Datenstrukturen in einem Host- Speicher zum Implementieren eines Beendigungsindex in Verbindung mit einer kreisartigen Warteschlange von Datendeskriptoren.
  • Fig. 4 ist ein schematisches Diagramm einer bevorzugten Ausführungsform einer Logik zum Erzeugen eines Interrupts.
  • BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORM
  • Nun wird auf eine gegenwärtig bevorzugte Ausführungsform der Erfindung ausführlich Bezug genommen, wobei ein Beispiel derselben in den beigefügten Zeichnungen dargestellt ist.
  • Eine bevorzugte Ausführungsform einer Vorrichtung zum Transferieren von Daten in einem Datenverarbeitungssystem ist in Fig. 1 gezeigt. Wie hierin dargestellt, ist die Vorrichtung ein Kommunikationsadapter, der allgemein durch die Ziffer 10 dargestellt ist. Das Datenverarbeitungssystem umfaßt einen Systembus 12, der mit der Vorrichtung direkt gekoppelt sein kann, oder ein I/O-Bus oder ein Netzwerk (nicht gezeigt) kann anstelle des Systembusses direkt mit der Vorrichtung gekoppelt sein. Vorzugsweise transferiert der Systembus 12 Daten gemäß den Busspezifikationen für Futurbus+. Ein Host-System 11 umfaßt einen Host-Speicher 13 und einen Host-Prozessor 15, die mit dem Systembus 12 gekoppelt sind.
  • Das Datenverarbeitungssystem kann ferner ein mit der Vorrichtung gekoppeltes Netzwerk 14 umfassen. Verschiedene Arten von weiträumigen und lokalen Netzwerken, einschließlich eines beliebigen Paket-Datennetzwerks, können mit dem Kommunikationsadapter 10 gekoppelt sein. Beispiele umfassen ein Token-Ring-Netzwerk oder ein Ethernet-Netzwerk.
  • Ein Netzwerk mit besonderer Anwendbarkeit ist das Fiber Distributed Data Interface (FDDI), das ein American National Standard für einen 100 Megabit pro Sekunden Token-Ring mit einem optischen Fasermedium ist. Die Merkmale von FDDI- Netzwerken werden ausführlich von Floyd E. Ross in "FDDI-A Tutorial", IEEE Communications Magazine, Band 24, Nr. 5, Seiten 10-17 (Mai 1986) beschrieben.
  • Information wird auf einem FDDI-Ring-Netzwerk in Frames mit einem Vier- oder Fünf-Gruppencode übertragen, wobei jede Fünfbit-Codegruppe ein Symbol genannt wird. Jedes Byte entspricht zwei Symbolen oder zehn Bits. Die Art des Timing beschränkt Datenframes auf eine maximale Länge von 4.500 Bytes (d. h. 9.000 Symbole oder 45.000 Bits).
  • Gemäß der bevorzugten Ausführungsform wird ein Paketspeicher 16 zum Speichern von Daten vorgesehen. Vorzugsweise wird Speicher für eine kreisartige Warteschlange, bei der die Warteschlangenelemente Übertragungsdatendeskriptoren sind, Speicher für eine kreisartige Warteschlange, bei der die Warteschlangenelemente Empfangsdatendeskriptoren sind, Speicher für Übertragungsdatenpuffer zum Speichern von Übertragungsdaten und Speicher für Empfangsdatenpuffer zum Speichern von Empfangsdaten reserviert.
  • Eine bevorzugte Ausführungsform des Kommunikationsadapters umfaßt Mittel zum Transferieren von Daten zwischen dem Paketspeicher und dem Netzwerk. Wie hierin dargestellt, wird eine Kommunikation mit einem FDDI-Netzwerk durch FDDI-Optik und FDDI-Verbindern in einem FDDI-Sender 18 und einem FDDI- Empfänger 20 durch eine Elastizitätspuffer- und physische Linkverwaltung (ELM) 22 und durch einen Medienzugangssteuergatearray (MAC = media access control 24) vorgesehen. Ein Assoziativspeicher (CAM = content addressable memory) 26 arbeitet in Verbindung mit dem MAC 24 und speichert gültige Netzwerkadressen.
  • Ein Framespeichercontroller 26 ist schnittstellenmäßig mit dem MAC 24 verbunden. Der Framespeichercontroller 28 ist in einem Paketspeicher-DMA-Controllergatearray 30 eingebaut. Der Framespeichercontroller 28 wird ein Paket von Empfangsdaten von dem Netzwerk 14 in eine Empfangsdatenwarteschlange im Paketspeicher 16 plazieren. Ebenso wird ein Paket von Übertragungsdaten in einer Übertragungsdatenwarteschlange im Paketspeicher 16 durch den Framespeichercontroller 28 an das MAC 24 übertragen.
  • Zu Zeiten, zu denen der Framespeichercontroller 28 ein Paket von Empfangsdaten in eine Empfangsdatenwarteschlange im Paketspeicher 16 plaziert, wird ein Paketspeicherempfangsdatendeskriptor, der ein Paketspeicherempfangsdatenpuffer kennzeichnet, in dem Paketspeicher durch den Framespeichercontroller gespeichert. Bei einer bevorzugten Ausführungsform wird der Paketspeicherempfangsdatendeskriptor von dem MAC 24 durch den Framespeichercontroller empfangen und umfaßt ein Feld, das die Anfangsadresse des entsprechenden Empfangsdatenpuffers in Paketspeicher angibt. Der Paketspeicherempfangsdatendeskriptor kann ferner ein Feld aufweisen, das die Anzahl von Empfangsdatenpuffern entsprechend dem Paket spezifiziert, obgleich wie hierin dargestellt, ein einzelner Paketspeicherempfangsdatenpuffer zum Speichern jedes Pakets von Empfangsdaten vorgesehen ist. Der Paketspeicherempfangsdatendeskriptor umfaßt ferner weitere Felder, die die Länge in Bytes des entsprechenden Empfangsdatenpuffers im Paketspeicher oder die Länge in Bytes des Pakets von Empfangsdaten angibt (zu Zeiten, wenn ein einzelner Paketspeicherempfangsdatenpuffer zum Speichern eines Pakets von Empfangsdaten vorgesehen ist). Weitere Felder können Framestatusbits, einen Framestatuszählwert und einen Empfangsbeendigungscode zum Angeben, ob das Frame erfolgreich empfangen wurde, und zum Liefern von zusätzlichen Information über den Empfang des Pakets umfassen.
  • Zu Zeiten, zu denen der Framespeichercontroller 28 ein Paket von Übertragungsdaten von dem Paketspeicher 16 an das MAC 24 sendet, wird ein Paketspeicherübertragungsdatendeskriptor, der ein Paketspeicherübertragungsdatenpuffer kennzeichnet, von dem Framespeichercontroller verwendet. Bei einer bevorzugten Implementierung wird der Paketspeicherübertragungsdatendeskriptor durch den Paketspeicher 16 bereitgestellt und umfaßt Felder, die dem Framespeichercontroller 28 die Anfangsadresse des entsprechenden Übertragungsdatenpuffers im Paketspeicher und die Länge des Pakets von Übertragungsdaten in Bytes angeben.
  • Der Adapter 10 ist ausgestaltet, um Überläufe (ovoruns) und Unterläufe (underflows) während des Empfangs und der Übertragung von Datenpaketen zu verhindern. Wie vorher beschrieben wurde, weisen Datenframes, die von einem FDDI- Netzwerk empfangen werden, eine maximale Länge von 4.500 Byte auf. Die in einem Paketspeicher 16 für Paketspeicherempfangsdatendeskriptoren und Paketspeicherempfangsdatenpuffer reservierte Speichermenge ist beträchtlich größer als das größte mögliche Paket, das durch den Adapter 10 empfangen werden kann. Bevor der MAC 24 ein Paket von Empfangsdaten von dem Netzwerk 14 akzeptiert, ist eine ausreichende Menge von Platz in einem leeren Empfangsdatenpuffer im Paketspeicher 16 verfügbar, um ein Paket maximaler Größe zu speichern, und die Stelle des erforderlichen Platzes im Paketspeicher 16 wird unter Verwendung eines Paketspeicherempfangsdatendeskriptors gekennzeichnet. Vor einem Senden eines Pakets von Übertragungsdaten von dem Framespeichercontroller an den MAC 24 muß außerdem ein vollständiges Paket in Übertragungsdatenpuffern im Paketspeicher 16 verfügbar sein und die Übertragungsdatenpuffer im vollen Paketspeicher werden durch Paketspeicherübertragungsdatendeskriptoren gekennzeichnet.
  • Der Kommunikationsadapter 10 kann viel der Steuer- und Statusinformation eliminieren, die typischerweise zwischen einem Kommunikationsadapter oder I/O-Controller und dem Host- System transferiert wird. Beispielsweise schreibt bei einer bevorzugten Ausführungsform, wenn ein Paket von Übertragungsdaten, das ausgehend von dem Host-System empfangen wurde, von dem Adapter 10 an das Netzwerk 14 gesendet wird, der Adapter keine Statusinformation hinsichtlich der Übertragung des Pakets von Übertragungsdaten zurück in das Host-System. Der Adapter ist ausgestaltet, um das Auftreten von Überläufen und Unterläufen zu verhindern, und andere Arten von Fehlern bei der Übertragung von einem Paket von Übertragungsdaten vom Host-System 11 an das Netzwerk 14 werden selten sein.
  • Wenn ein Kommunikationsadapter ein Empfangsdatenpaket an ein Host-System transferiert, wird typischerweise das Empfangsdatenpaket während einer Anfangstransaktion transferiert, und ein Empfangspaketdeskriptor, der bestimmte Aspekte des Empfangsdatenpakets beschreibt, wird nachfolgend von dem Adapter an das Host-System während einer separaten Transaktion gesendet.
  • Es ist vorteilhaft, die Anzahl von Transaktionen zu verringern, die erforderlich ist, um ein bestimmtes Empfangsdatenpaket vom Adapter 10 an das Host-System 11 zu transferieren. Um einen I/O-Vorgang unter Verwendung einer separaten Transaktion durchzuführen muß im allgemeinen der Adapter 10 erst einen Zugang zum Systembus 12 anfordern (was einer Arbitrierung durch den Adapter 10 erfordern kann, gefolgt von einer Latenzperiode), bevor dem Adapter 10 Zugriff auf den Systembus 12 erteilt wird. Während der tatsächlichen Transaktion wird der Adapter 10 zusätzlich zum Senden von Daten auf dem Systembus 12 ferner Adressen- und Steuerinformation an das Host-System 11 bereitzustellen haben.
  • Bei einer bevorzugten Ausführungsform der Erfindung macht der Adapter 10 keine Verwendung eines I/O-Vorgangs während einer separaten Transaktion, um dem Host-System 11 ein Empfangspaketdeskriptor bereitzustellen, und stellt keinen Empfangspaketdeskriptor an das Host-System nach einem vorherigen Transferieren des entsprechenden Empfangsdatenpakets an das Host-System zur Verfügung. Wenn ein Paket von Empfangsdaten von dem Netzwerk 14 an den Paketspeicher 16 transferiert wird, wird Informationen, die in Feldern in dem Paketspeicherempfangsdatendeskriptor (z. B. die Länge in Bytes des Pakets von Empfangsdaten, Framestatusbits, ein Framestatuszählwert und ein Empfangsbeendigungscode, der angibt, ob daß Frame erfolgreich empfangen wurde, und zusätzliche Informationen über den Empfang des Pakets liefert) vom MAC 24 empfangen. Diese Paketlängen- und Statusinformation wird von dem Adapter 10 an das Host-System 11 während der gleichen Transaktion, die verwendet wird, um das Empfangsdatenpaket zu transferieren, in einem Paketdeskriptor am Anfang jedes Pakets von Empfangsdaten, die zu dem Host-System 11 transferiert werden, weitergeleitet.
  • Um dem Host-System 11 eine genaue Paketlänge und Statusinformation bereitzustellen, muß der Adapter 10 keinen zusätzlichen Empfangspaketdeskriptor erzeugen und weiterleiten, nachdem ein vollständiges Empfangsdatenpaket vom Netzwerk 14 empfangen und an das Host-System 11 transferiert wurde. Wie vorher erläutert wurde, ist der Adapter 10 ausgestaltet, um das Auftreten von Über- und Unterläufen zu verhindern. Da diese Fehlerarten nicht auftreten werden, ist eine genaue Paketlänge und Statusinformation in den Feldern in dem Paketspeicherempfangsdatendeskriptor enthalten, und diese Information ist verfügbar, wenn der Adapter 10 beginnt, das Empfangsdatenpaket vom Paketspeicher 16 an das Host-System 11 zu transferieren.
  • Diese Merkmale des Adapters 10 helfen beim Minimieren des Zeitbetrags, währenddessen der Systembus während eines Datentransfers zwischen dem Adapter und dem Host-System verwendet wird, und reduziert die Arbeitsmenge, die von dem Host-System während eines Normalbetriebs ausgeführt werden muß. Obgleich vom Host-System 11 verlangt werden kann, programmierte I/O-Vorgänge in verschiedenen separaten Transaktionen während einer Initialisierung des Adapters 10 oder als Reaktion auf Fehler durchzuführen, sind diese Ereignisse nicht häufig genug, um eine minimale Auswirkung auf die Performanz des Host-Systems 11 und den Systembus 12 aufzuweisen.
  • Gemäß der bevorzugten Ausführungsform werden Daten zwischen dem Paketspeicher und Puffern in dem Host-Speicher vorzugsweise via dem DMA transferiert. Der Adapter 10 umfaßt einen Mikroprozessor 32. Die in dem Host-Speicher 13 gespeicherten Übertragungsdaten werden jedoch in eine Übertragungsdatenwarteschlange im Paketspeicher geschrieben und vom Frame-Speicher-Controller 28 an den MAC 24 gesendet, alles ohne irgendeine Intervention durch den Mikroprozessor 32. Ebenso wird ein Empfangsdatenpaket in eine Empfangsdatenwarteschlange im Paketspeicher 16 durch den Frame-Speicher-Controller 28 plaziert und in den Host- Speicher 13 ohne Intervention durch den Mikroprozessor geschrieben.
  • Bei einer bevorzugten Ausführungsform des Datenverarbeitungssystems werden kreisartige Warteschlangen von der Art, die vorher erläutert wurden und die von H. Michael Wenzel für die IEEE P1212 CSR Achitecture Specification in "CSR Architecture (DMA Framework): Recommended DMA Architectures", Teil III-A, Entwurf 1.38 (5. Juli 1990) beschrieben sind, für DMA-Transfers zwischen dem Host-Speicher 13 und dem Adapter 10 vorgesehen.
  • Gemäß der Erfindung enthält der Host-Speicher 13 eine Anzahl von Empfangspuffern und Übertragungspuffern. Diese Puffer müssen nicht von einer festen Größe oder an irgendeiner bestimmten Stelle im Host-Speicher sein. Das Host-System 11 ist der Producer und ordnet leere Puffer zum Empfangen von Daten und volle Puffer zum Übertragen von Daten zu.
  • In dem Host-Speicher der bevorzugten Ausführungsform werden Empfangs-Deskriptoren in einer Empfangswarteschlange gespeichert, um anzugeben, wo leere Empfangspuffer im Host- Speicher gespeichert sind. Übertragungs-Deskriptoren sind in dem Host-Speicher in einer Übertragungswarteschlange gespeichert, um anzugeben, wo volle Übertragungspuffer im Host-Speicher gespeichert sind.
  • Vorzugsweise werden eine Anzahl von Stellen im Host-System 13 zum Speichern einer Empfangs-Deskriptor-Warteschlange vorgesehen, die 256 Einträge enthält, und zusätzliche Stellen sind im Host-Speicher 13 zum Speichern einer Übertragungs- Deskriptor-Warteschlange vorgesehen, die ebenfalls 256 Einträge enthält. Bei einer bevorzugten Implementierung entspricht jeder von dem Host-System 11 aufgestellte Empfangsdaten-Deskriptor einem Empfangsdatenpuffer und umfaßt Felder, die angeben, ob der entsprechende Puffer der erste einem Paket zugeordnete Puffer ist, die die Startadresse des entsprechenden Empfangsdatenpuffers im Host-Speicher, die Länge des entsprechenden Empfangsdatenpuffers und die Gesamtzahl von Empfangsdatenpuffern, die zum Empfangen eines einzelnen Pakets geliefert werden, angeben. Jeder von dem Host-System aufgestellte Übertragungsdaten-Deskriptor entspricht einem Übertragungsdatenpuffer und umfaßt Felder, die angeben, ob der entsprechende Puffer der erste einem Paket zugeordnete Puffer ist, die die Startadresse des entsprechenden Übertragungsdatenpuffers im Host-Speicher angeben, die die Länge der entsprechenden Übertragungsdatenpuffer in Bytes angeben, und die angeben, ob der entsprechende Puffer der letzte, einem System zugeordnete Puffer ist.
  • Typischerweise wird mehr als ein Übertragungspuffer vorgesehen, um Datenpakete vom Host-Speicher zum Paketspeicher 16 zu transferieren. Ein oder mehrere Übertragungspuffer werden verwendet, um Anwenderdaten zu speichern, die geliefert werden, wenn der Host-Prozessor 15 ein Anwendungsprogramm ausführt. Außerdem wird ein getrennter Übertragungspuffer vorgesehen, um Header-Daten zu speichern, die den Anwenderdaten entsprechen. Folglich wird eine Kette von Übertragungspuffern gebildet, um das Paket von Übertragungsdaten zu transferieren.
  • Mehr als ein Empfangspuffer kann ferner vorgesehen sein, um Datenpakete an den Host-Speicher 13 vom Paketspeicher 16 zu transferieren. Insbesondere kann es wünschenswert sein, Empfangsdaten vom Paketspeicher 16 in Stellen im Host- Speicher 13 zu speichern, die im physischen Adressenraum nicht angrenzend sind. Folglich kann eine Anzahl von Empfangspuffern, die nicht-angrenzenden physischen Adressen entsprechen, zusammengekettet werden, um das Paket von Empfangsdaten zu transferieren.
  • Gemäß der bevorzugten Ausführungsform zeigt ein im Host- Speicher 13 gespeicherter Empfangs-Producerindex auf einen ausgewählten Empfangs-Deskriptor in der Empfangswarteschlange. Ein im Host-Speicher 13 gespeicherter Übertragungs-Producerindex zeigt auf einen ausgewählten Übertragungs-Deskriptor in der Übertragungswarteschlange. Vorzugsweise kennzeichnet der Empfangs-Producerindex einen der entsprechenden 256 Datendeskriptoren, die in der Empfangswarteschlange eingerichtet wurden, und der Übertragungs-Producerindex kennzeichnet einen der entsprechenden 256 Datendeskriptoren, die in der Übertragungswarteschlange eingerichtet wurden. Jeder dieser Indizes wird durch das Host-System aktualisiert, um auf die nächste Stelle in der entsprechenden Warteschlange zu zeigen, in die ein Deskriptor durch das Host-System geschrieben werden wird.
  • Die Vorrichtung der bevorzugten Ausführungsform umfaßt Producerindex-Mittel zum Empfangen eines Empfangs- Producerindex von dem Host-System; Übertragungs- Producerindex-Mittel zum Empfangen eines Übertragungs- Producerindex von dem Host-System; Empfangs-Consumerindex- Mittel zum Speichern eines Empfangs-Consumerindex, der auf einen ausgewählten Empfangs-Deskriptor in der Empfangswarteschlange zeigt, und Übertragungs-Consumerindex- Mittel zum Speichern eines Übertragungs-Consumerindex, der auf einen ausgewählten Übertragungs-Deskriptor in der Übertragungswarteschlange zeigt. Wie hierin dargestellt, werden die Empfangs-Producerindex-Mittel, die Übertragungs- Producerindex-Mittel, die Empfangs-Consumerindex-Mittel und die Übertragungs-Consumerindex-Mittel durch Register im Paketspeicher-DMA-Controller-Gate-Array, d. h. Producerindexregister 34 und Consumerindexregister 35, bereitgestellt. Das Host-System 11 schreibt die Empfangs- und Übertragungs-Producerindizes in die Producerindexregister 34 nach dem Aktualisieren dieser Indizes durch das Host-System.
  • Die in den Consumerindexregistern 35 gespeicherten Consumerindizes zeigen auf ausgewählte Deskriptoren in den im Host-Speicher 13 eingerichteten Warteschlangen. Vorzugsweise kennzeichnet jeder Consumerindex einen der 256 Datendeskriptoren in der entsprechenden Warteschlange. Bei einer bevorzugten Ausführungsform der Erfindung zeigen die Consumerindizes auf die letzten Deskriptoren, die von der entsprechenden kreisartigen Warteschlange im Host-Speicher 13 durch den Adapter 10 gelesen wurden.
  • Fig. 2 zeigt ein einfaches Beispiel der Datenstrukturen der im Host-Speicher 13 implementierten kreisartigen Warteschlangen von Datendeskriptoren. Eine Übertragungs- Deskriptor-Warteschlange 36 (mit nur vier Einträgen) ist im Deskriptor-Block des Host-Speichers 13 gespeichert. Ein Satz von Übertragungsdatenpuffern 37, der der Übertragungs- Deskriptor-Warteschlange 36 entspricht, ist in einem Datenblock im Host-Speicher 13 gespeichert. Obgleich in Fig. 2 nur eine Übertragungs-Deskriptor-Warteschlange 36 und ein Übertragungsdatenpuffer 37 gezeigt sind, werden gleiche Datenstrukturen im Host-Speicher 13 zum Speichern einer Empfangs-Deskriptor-Warteschlange und eines Satzes von Empfangsdatenpuffern, die der Empfangs-Deskriptor- Warteschlange entsprechen, vorgesehen.
  • Wie in Fig. 2 dargestellt ist, zeigt ein Übertragungs- Producerindex P auf die nächste Stelle in der Übertragungs- Deskriptor-Warteschlange 36, in die ein Übertragungs- Deskriptor durch das Host-System geschrieben werden wird. Der Übertragungs-Producerindex P ist im Host-Speicher 13 gespeichert. Ein Übertragungs-Consumerindex C zeigt auf die letzte Stelle in der Übertragungs-Deskriptor-Warteschlange 36, aus der ein Übertragungs-Deskriptor durch den Adapter gelesen wurde.
  • Wie in Fig. 2 gezeigt ist, wird in der Übertragungs- Deskriptor-Warteschlange 36 eine Position immer leer gelassen (in Fig. 2 schraffiert). Wenn ein Übertragungs-Deskriptor in die Übertragungs-Deskriptor-Warteschlange 36 geschrieben wird, wird der Übertragungs-Producerindex P inkrementiert (mit Modulo-Arithmetik). Wenn ein Übertragungs-Deskriptor aus der Übertragungs-Deskriptor-Warteschlange 36 gelesen wird, wird der Übertragungs-Consumerindex C inkrementiert. Die Übertragungs-Deskriptor-Warteschlange ist leer, wenn der Übertragungs-Consumerindex C auf eine Stelle zeigt, die genau eine Position hinter dem Übertragungs-Producerindex P in der kreisartigen Warteschlange ist. Die Übertragungs-Deskriptor- Warteschlange 36 ist voll, wenn der Übertragungs- Consumerindex C und der Übertragungs-Producerindex P auf die gleiche Stelle in der kreisartigen Warteschlange zeigen.
  • Wie in Fig. 2 dargestellt ist, gibt es Deskriptoren, auf die immer dann, wenn die Deskriptor-Warteschlange nicht leer ist, durch den Adapter 10 zugegriffen werden kann, um Daten zwischen entsprechenden Datenpuffern zu transferieren, die im Host-Speicher 13 und Paketspeicher 16 verfügbar sind. Jeder Übertragungs-Deskriptor in der Warteschlange 36, auf den durch den Adapter 10 zugegriffen werden kann, umfaßt Daten, die die Startadresse eines entsprechenden Übertragungsdatenpuffern im Host-Speicher 13 kennzeichnen. Wenn die Übertragungs-Deskriptor-Warteschlange 36 beispielsweise voll ist, sind Übertragungsdatenpuffer 37 (in Fig. 2 nicht schraffiert) zum Lesen durch den Adapter 10 an den Startadressen x, y und z des Host-Speichers 13 verfügbar.
  • Gemäß der bevorzugten Ausführungsform werden Mittel in der Vorrichtung zum Vergleichen des Empfangs-Producerindex mit dem Empfangs-Consumerindex vorgesehen, um zu bestimmen, ob irgendwelche leeren Empfangspuffer in dem Host-Speicher für Transfers von Daten von dem Paketspeicher zu dem Host- Speicher verfügbar sind. Die Vorrichtung umfaßt ferner Mittel zum Vergleichen des Übertragungs-Producerindex mit dem Übertragungs-Consumerindex, um zu bestimmen, ob irgendwelche vollen Übertragungspuffer in dem Host-Speicher für Transfers von Daten an den Paketspeicher von dem Host-Speicher verfügbar sind.
  • Der Adapter 10 umfaßt eine Empfangs-DMA-Maschine 38 und eine Übertragungs-DMA-Maschine 39 im Paketspeicher-DMA-Controller- Gate-Array 30. Der DMA-Transfer von Empfangsdaten durch die Empfangs-DMA-Maschine 38 kann nicht zu Zeiten beginnen, zu denen die Empfangswarteschlange im Host-Speicher 13 voll ist. Daher kann, wie hier dargestellt, der DMA-Transfer von Empfangsdaten zu Zeiten stattfinden, zu denen der in dem Consumerindexregister 35 gespeicherte Consumerindex nicht auf den direkt vorhergehenden Empfangsdaten-Deskriptor in der Warteschlange zeigt, auf den durch den im Producerindexregister 34 gespeicherten Empfangs-Producerindex gezeigt wird. Der DMA-Transfer von Übertragungsdaten durch die Übertragungs-DMA-Maschine 39 kann nicht zu Zeiten beginnen, zu denen die Übertragungswarteschlange leer ist. Daher kann, wie hier dargestellt, der DMA-Transfer von Übertragungsdaten zu Zeiten stattfinden, zu denen der in den Producerindexregistern 34 gespeicherte Übertragungs- Producerindex und der im Consumerindexregister 35 gespeicherte Übertragungs-Consumerindex nicht auf den gleichen Übertragungsdaten-Deskriptor in der Übertragungswarteschlange im Host-Speicher 13 zeigen.
  • Die Vorrichtung gemäß der bevorzugten Ausführungsform umfaßt Mittel zum Lesen eines Empfangs-Deskriptors aus der Empfangswarteschlange in dem Host-Speicher, der angibt, wo der nächste verfügbare leere Empfangspuffer im Host-Speicher 13 gespeichert ist, und Mittel zum Lesen eines Übertragungs- Deskriptors aus der Übertragungswarteschlange in dem Host- Speicher, der angibt, wo der nächste verfügbare volle Übertragungspuffer im Host-Speicher 13 gespeichert ist. Vorzugsweise werden Empfangs-Deskriptoren, die leeren Empfangspuffern entsprechen, und Übertragungs-Deskriptoren, die vollen Übertragungspuffern entsprechen, aus ihren jeweiligen kreisartigen Warteschlangen in einer First-In- First-Out-Reihenfolge gelesen.
  • Gemäß der bevorzugten Ausführungsform werden Mittel zum Lesen von Empfangsdaten aus dem Paketspeicher und zum Schreiben der Empfangsdaten in den nächsten verfügbaren leeren Empfangspuffer in den Host-Speicher zu Zeiten vorgesehen, zu denen leere Empfangspuffer in dem Host-Speicher für Datentransfers von dem Paketspeicher zu dem Host-Speicher verfügbar sind. Ferner werden ebenfalls Mittel zum Lesen von Übertragungsdaten aus dem nächsten verfügbaren vollen Übertragungspuffer in dem Host-Speicher und zum Schreiben von Übertragungsdaten in den Paketspeicher zu Zeiten vorgesehen, zu denen volle Übertragungspuffer in dem Host-Speicher für Datentransfers zu dem Paketspeicher von dem Host-Speicher verfügbar sind. Vorzugsweise werden diese Transfers von Empfangs- und Übertragungsdaten zu und von dem Most-Speicher 13 mittels des DMA durchgeführt.
  • Wie hier dargestellt ist, umfassen die Empfangs- und Übertragungs-DMA-Maschinen einen FIFO-Puffer 40, der eine Speicherung für eine Anzahl von Langwörtern von Daten vorsieht (ein Langwort ist gleich vier Bytes).
  • Während der Transfers von Empfangsdaten schreibt das erste Host-System 11 einen aktualisierten Empfangs-Producerindex in die Producerindexregister 34, wodurch leere Empfangsdatenpuffer im Host-Speicher 13 verfügbar gemacht werden, um ein vollständiges Paket von Empfangsdaten vom Netzwerk 14 zu akzeptieren. Als Reaktion liest die Empfangs- DMA-Maschine einen Empfangsdaten-Deskriptor aus dem Host- Speicher 13 ein, wählt aus der Empfangswarteschlange im Host- Speicher 13 den Empfangs-Deskriptor aus (entsprechend einem leeren Empfangsdatenpuffer), der unter Verwendung des aktualisierten Empfangs-Producerindex gekennzeichnet wird. Gleichzeitig liest die Maschine 38 einen Paketspeicher- Empfangsdaten-Deskriptor, der vorher durch den Frame- Speicher-Controller für ein Empfangsdatenpaket vorgesehen wurde, der nun zu dem Host-Speicher 13 via dem DMA zu transferieren ist.
  • Der von der Empfangs-DMA-Maschine 38 verwendete Paketspeicher-Empfangsdaten-Deskriptor, der vorstehend erläutert wurde, umfaßt vorzugsweise Felder, die die Startadresse des entsprechenden Empfangsdatenpuffers im Paketspeicher, die Länge in Bytes des Pakets von Empfangsdaten, die Framestatusbits, ein Frame-Status-Zählwert und einen Empfangsbeendigungscode, der angibt, ob das Frame erfolgreich empfangen wurde, kennzeichnen, und zusätzliche Information über den Empfang des Pakets liefern. Der Empfangs-Deskriptor im Host-Speicher 13 kennzeichnet die Startadresse im Host-Speicher eines leeren Empfangsdatenpuffers.
  • Unter Verwendung dieser beiden Deskriptoren transferiert die Empfangs-DMA-Maschine Langwörter vom Paketspeicher 16 in den FIFO-Puffer 40. Sobald eine bestimmte Anzahl von Langwörtern in dem FIFO-Puffer gespeichert sind, transferiert die Empfangs-DMA-Maschine 38 diese Langwörter von dem FIFO-Puffer in den leeren Empfangsdatenpuffer im Host-Speicher. Transfers werden auf diese Art und Weise fortgesetzt, bis die Menge von transferierten Daten der Anzahl von Bytes in dem Paket entspricht, die unter Verwendung von in dem Paketspeicher- Empfangsdaten-Deskriptor bereitgestellten Information berechnet wird.
  • Wie vorstehend erläutert wurde, kann bestimmte Information, die in Feldern in dem Paketspeicher-Empfangsdaten-Deskriptor enthalten ist, wie beispielsweise die Länge des Pakets von Empfangsdaten und ein Empfangsbeendigungscode, der angibt, ob Frames erfolgreich empfangen wurden, und der zusätzliche Information über den Empfang des Pakets liefert, zu dem Host- System 11 in einem Paketdeskriptor am Anfang des Pakets der Empfangsdaten befördert werden. Folglich besteht kein Bedarf für den Adapter 10, zusätzliche Statusinformation an das Host-System zu liefern, und der Adapter muß keinen zusätzlichen Paketdeskriptor an das Host-System erzeugen und weiterleiten, nachdem das gesamte Paket in den Host-Speicher 13 transferiert wurde.
  • Während Transfers von Übertragungsdaten schreibt das Host- System zuerst einen aktualisierten Übertragungs-Producerindex in die Producerindexregister 34, wodurch volle Übertragungsdatenpuffer im Host-Speicher 13 verfügbar gemacht werden, um ein vollständiges, an das Netzwerk 14 zu sendendes Paket von Übertragungsdaten vorzusehen. Als Reaktion liest die Übertragungs-DMA-Maschine 39 einen Übertragungs- Deskriptor vom Host-Speicher 13 ein, wählt aus der Übertragungswarteschlange im Host-Speicher 13 den Übertragungs-Deskriptor aus (entsprechend einem vollen Übertragungsdatenpuffer), der unter Verwendung des aktualisierten Übertragungs-Producerindex gekennzeichnet ist.
  • Der von der Übertragungs-DMA-Maschine 39 verwendete Übertragungs-Deskriptor umfaßt Felder, die die Startadresse eines vollen Übertragungsdatenpuffers im Host-Speicher angeben, die Länge des entsprechenden Übertragungsdatenpuffers in Byte angeben, und die angeben, ob der entsprechende Puffer der letzte dem zu übertragenden Paket zugeordnete Puffer ist. Unter Verwendung dieser Felder transferiert die Übertragungs-DMA-Maschine Langwörter von dem vollen Übertragungsdatenpuffer im Host-Speicher 13 in den FIFO-Puffer 40. Sobald eine bestimmte Anzahl von Langwörtern in dem FIFO-Puffer gespeichert ist, transferiert die Übertragungs-DMA-Maschine 39 diese Langwörter von dem FIFO- Puffer in den Paketspeicher 16. Transfers werden auf diese Art und Weise fortgesetzt, bis alle, einem Übertragungsdatenpaket zugeordnete Bytes in dem letzten Puffer in dem Paketspeicher 16 bewegt wurden.
  • Der oben erläuterte einzige I/O-Vorgang, der durch das Host- System 11 während einer getrennten Transaktion durchgeführt wird, ist der Transfer von aktualisierten Producerindizes in die Producerindexregister 34. Auf diese Art und Weise empfängt der Adapter 10 Information, die angibt, wieviele Puffer zum Schreiben von Empfangsdaten durch das Host-System oder zum Lesen von Übertragungsdaten durch den Adapter neu verfügbar gemacht wurden.
  • Vorzugsweise wird die Anzahl erforderlicher Transaktionen und I/O-Vorgänge durch Schreiben von aktualisierten Producerindizes in den Adapter 10 nur verringert, nachdem das Host-System 11 eine Anzahl zusätzlicher Puffer erzeugt. Beispielsweise kann das Host-System 11 warten, bis eine Anzahl von vollen Übertragungspuffern im Host-Speicher 13 verfügbar sind, um ein einziges Bündel, das viele Übertragungsdatenpakete enthält, in den Paketspeicher 16 zu transferieren. Ebenfalls kann das Host-System 11 warten, bis genug leere Empfangspuffer im Host-Speicher 13 zum Speichern eines vollen Empfangsdatenpakets verfügbar sind. Wenn eine ausreichende Anzahl von leeren Empfangsdatenpuffern bereits für den Adapter 10 verfügbar ist, kann es für das Host-System möglich sein, sogar bis zur Zugänglichkeit einer Anzahl von zusätzlichen leeren Empfangspuffern im Host-Speicher 13 zum Empfang eines viele Empfangsdatenpakete enthaltenden vom Adaptor 10 einzigen Bündels zu warten oder zu warten, bis genug leere Empfangspuffer im Host-Speicher 13 zum Speichern eines Empfangsdatenpakets maximaler Größe verfügbar sind. Bei einer bevorzugten Ausführungsform des Datenverarbeitungssystems sollten aktualisierte Producerindizes an den und/oder von dem Adapter 10 gesendet oder empfangen werden, nur genug wie notwendig ist, um einen ziemlich kontinuierlichen Datenfluß zwischen dem Host-System 11 und dem Adapter 10 beizubehalten.
  • Gemäß der bevorzugten Ausführungsform werden Mittel zum Aktualisieren des Empfangs-Consumerindex als Reaktion auf das Schreiben von Empfangsdaten in dem nächsten verfügbaren leeren Empfangspuffer im Host-Speicher vorgesehen, um auf einen anderen ausgewählten Empfangs-Deskriptor in der Empfangswarteschleife zu zeigen. Die Vorrichtung umfaßt ferner Mittel zum Aktualisieren des Übertragungs- Consumerindex als Reaktion auf das Lesen von Übertragungsdaten aus dem nächsten verfügbaren vollen Übertragungspuffer im Host-Speicher, um auf einen anderen ausgewählten Übertragungs-Deskriptor in der Übertragungswarteschlange zu zeigen.
  • Ferner kann die Erfindung Mittel zum Transferieren des aktualisierten Empfangs-Consumerindex an das Host-System nach dem Transferieren von Daten zwischen dem Paketspeicher und dem Host-Speicher und Mittel zum Transferieren des aktualisierten Übertragungs-Consumerindex an das Host-System nach dem Transferieren von Daten zwischen dem Paketspeicher und dem Host-Speicher umfassen.
  • Vorzugsweise wird die Anzahl von Transaktionen und I/O- Vorgängen, die im Datenverarbeitungssystem erforderlich sind, reduziert, indem der Adapter 10 einen aktualisierten Übertragungs-Consumerindex nur in den Host-Speicher schreibt, nachdem der Adapter 10 alle Übertragungspuffer leert, die vorher durch das Host-System 11 verfügbar gemacht wurden.
  • Mit Bezug auf Empfangsdaten sollte der Adapter 10 vor einem Schreiben eines aktualisierten Empfangs-Consumerindex in den Host-Speicher 13 nicht warten, bis er alle Empfangspuffer gefüllt hat, die vorher durch das Host-System 11 verfügbar gemacht wurden. Im allgemeinen ist es für den Adapter 10 vorzuziehen, das Host-System prompt von dem Empfang von Empfangsdaten zu benachrichtigen, sogar dann, wenn leere Empfangspuffer noch im Host-Speicher 13 verfügbar sind.
  • Vorzugsweise erkennt der Adapter 10 Fälle, bei denen eine Anzahl von vollen Übertragungspuffer oder Empfangsdaten für eine Anzahl von leeren Empfangspuffern für Datentransfers zwischen dem Adapter und dem Host-Speicher 13 verfügbar sind. In diesen Fällen kann der Adapter ein Aktualisieren der Consumerindizes verzögern, während die Daten für eine Anzahl dieser vielen Puffern transferiert werden. Auf diese Art kann die Anzahl von Transaktionen sogar in Fällen verringert werden, die einen Empfang eines eine Anzahl von Empfangsdatenpaketen enthaltenden Bündels durch den Adapter beinhaltet.
  • Bei einer bevorzugten Ausführungsform der Erfindung bestimmen die Empfangs-DMA-Maschine 38 bzw. die Übertragungs-DMA- Maschine 39, ob alle der Empfangs- und Übertragungsdaten in einem Paket transferiert wurden. Sobald die richtige Datenmenge transferiert wurde, wird der passende Consumerindex durch Schreiben eines Indexwertes in die Consumerindex-Register 35 aktualisiert, der dem Empfangs- oder Übertragungs-Deskriptor des letzten Datenpuffers dem Host-Speicher 13 entspricht, der von dem Adapter 10 eingeschrieben oder gelesen wurde. Außerdem wird ein DMA- Transfer durch die DMA-Maschinen 38 und 39 durchgeführt, um die neuen Consumerindexwerte in den Host-Speicher 13 zu schreiben.
  • Der Adapter 10 aktualisiert die Consumerindizes nur nach Beendigung jedes entsprechenden Datentransfers zwischen dem Host-Speicher 13 und dem Paketspeicher 16. Im allgemeinen aktualisiert der Host-Prozessor 15 die Producerindizes nur nach Beendigung der Datentransfers zwischen den Datenpuffern in dem Host-Speicher 13 und dem Host-Prozessor 15 und nach Zuordnen von Deskriptoren zu diesen neu verfügbaren Datenpuffern im Host-Speicher 13. Nach dem Aktualisieren der Producerindizes führt das Host-System 11 eine einzige CSR(control and status register)-Schreibtransaktion durch, um die aktualisierten Producerindizes in die Producerindexregister 34 im Adapter 10 zu transferieren.
  • Um ein Fehllesen oder Überschreiben der Information in einer bevorzugten Ausführungsform der Erfindung zu verhindern, gibt es eine einzige Schreibvorrichtung und eine einzige Lesevorrichtung für alle Indizes und Warteschlangenelemente und ebenfalls für Empfangs- und Übertragungsdaten. Der Adapter 10 ist die einzige Schreibvorrichtung von aktualisierten Consumerindizes in die Consumerindex-Register 35 in dem Adapter 10 und in dem Host-Speicher 13 und ist ferner die einzige Schreibvorrichtung von Empfangsdaten in den Empfangsdatenpuffern im Host-Speicher 13. Der Host- Prozessor 15 ist die einzige Schreibvorrichtung von aktualisierten Producerindizes in den Producer-Registern 34 im Adapter 10 und im Host-Speicher 13, die einzige Schreibvorrichtung von Empfangs- und Übertragungs- Deskriptoren in den Empfangs- und Übertragungswarteschlangen im Host-Speicher 13 und die einzige Schreibvorrichtung von Übertragungsdaten in den Übertragungsdatenpuffern im Host- Speicher 13.
  • Wie hier dargestellt, ist der Host-Speicher 13 auf eine Weise organisiert, die die Performanz optimiert. Sowohl die aktualisierten Empfangs- als auch die Übertragungs- Consumerindizes werden durch den Adapter 10 in das gleiche Langwort im Host-Speicher 13 geschrieben. Folglich werden diese beide Indizes auf der gleichen Cache-Zeile des Host- Prozessors 15 sein, wobei es beiden Indizes erlaubt wird, in den Cache-Speicher des Host-Prozessors 15 mit nur einem einzigen Lesevorgang des Host-Speichers 13 gebracht zu werden. Ferner werden die Consumer- und Producerindizes in unterschiedlichen Abschnitten im Host-Speicher 13 gespeichert, um sicherzustellen, daß die Consumer- und Producerindizes nicht auf der gleichen Cache-Zeile sind. Als ein Ergebnis dieser Trennung der Consumer- und Producerindizes wird eine "Prügelei (thrashing)" in dem Cache-Speicher des Host-Prozessors 15 verhindert. Wenn die Consumer- und Producerindizes alle auf der gleichen Cache- Zeile sind, macht ein Schreiben eines aktualisierten Consumerindex in dem Host-Speicher 13 durch den Adapter 10 die in dem Cache-Speicher gespeicherten Producerindizes ungültig, obgleich diese Producerindizes nur durch den Host- Prozessor 15 geschrieben werden können, und veranlaßt den Host-Prozessor 15, ein unnötiges zusätzliches Lesen des Host- Speichers 13 durchzuführen, um die gleichen Producerindizes wieder in den Cache-Speicher zu bringen.
  • Eine Paket-Arbitrierungsvorrichtung 41 ist in dem Paketspeicher-DMA-Controller-Gate-Array aufgenommen. Die Paketspeicher-Arbitrierungsvorrichtung 41 ermöglicht es nur einer Komponente, nämlich einem (nicht gezeigten) Refresh- Zeitgeber, der zum Anfordern eines Refresh-Zyklus dient, einem Frame-Speicher-Controller 28, einen Mikroprozessor 32, einer Empfangs-DMA-Maschine 38 oder einer Übertragungs-DMA- Maschine 39 zu einer beliebigen Zeit auf den Paketspeicher 16 zuzugreifen.
  • Gemäß einer Ausführungsform der Erfindung umfaßt die Vorrichtung Mittel zum Einstellen eines Interrupt-Arm-Bits, um die Vorrichtung zu befähigen, das Host-System zu unterbrechen, und Mittel zum Unterbrechen des Host-Systems, nach dem Transferieren von Daten zwischen dem Paketspeicher und dem Host-Speicher, zu Zeiten, zu denen der Interrupt-Arm- Bit gesetzt ist. Vorzugsweise werden zusätzliche Mittel zum Löschen des Interrupt-Arm-Bits als Reaktion auf das Unterbrechen des Host-Systems vorgesehen, um zusätzliche Interrupts des Host-Systems zu verhindern. Bei einer bevorzugten Ausführungsform enthält die Vorrichtung ferner Mittel zum Empfangen einer Rearm-Anforderung von dem Host- System und Mittel zum Einstellen des Interrupt-Arm-Bits als Reaktion auf das Empfangen einer Rearm-Anforderung von dem Host-System.
  • Im allgemeinen ist es für den Adapter 10 notwendig, das Host- System zu unterbrechen, wann immer ein Paket von Empfangsdaten in den Host-Speicher oder ein Paket von Übertragungsdaten von dem Host-Speicher kopiert wurde. Ein Interrupt wird erteilt, um das Host-System zu benachrichtigen, neue Empfangsdaten vom Paketspeicher 16 zu verarbeiten und zusätzliche leere Puffer für Empfangsdaten bereitzustellen, oder um das Host-System zu benachrichtigen, daß Puffer, die mit Übertragungsdaten gefüllt wurden, wieder verwendet werden können, da die Übertragungsdaten im Paketspeicher 16 gespeichert wurden. Der Interrupt wird erteilt, nachdem die aktualisierten Consumerindizes von dem Adapter 10 an den Host-Speicher 13 transferiert wurden.
  • Ein bedeutendes Merkmal der Erfindung ist die Eliminierung unnötiger Interrupts des Host-Systems durch den Adapter 10, die eine bedeutende negative Wirkung auf die Performanz des Host-Systems und des Systembus 12 haben. Insbesondere ist es nicht wünschenswert, wenn das Host-System bereits einen Interrupt infolge des Transfers eines Datenpakets bedient, einen weiteren Interrupt für den Transfer von einem zusätzlichen Datenpaket auszugeben. Wie vorher angegeben wurde, ist es wünschenswert, wenn vom Host-System 11 verlangt wird, einen Interrupt zu bedienen, ein System vorzusehen, bei dem das Host-System einen gesamten Paketzug verarbeitet, anstelle eines Systems, bei dem ein separater Interrupt für jedes Datenpaket in einem Bündel ausgegeben wird.
  • Um ein Ausgeben unnötiger Interrupts zu verhindern, wird ein Interrupt-Arm-Bit im Adapter 10 verwendet. Bei einer bevorzugten Ausführungsform wird, wann immer der Adapter den Transfer eines Pakets oder mehrerer Pakete von Empfangs- oder Übertragungsdaten beendet und das Host-System unterbricht, das Interrupt-Arm-Bit gelöscht. Der Adapter 10 wird daran gehindert, einen zusätzlichen Interrupt des Host-Systems auszugeben, bis das Interrupt-Arm-Bit erneut gesetzt ist ("rearmed"). Vorzugsweise wird das Interrupt-Arm-Bit als Reaktion auf den Empfang einer Rearm-Anforderung von dem Host-System gesetzt, die stattfindet, nachdem der Host- Prozessor 15 ein Bedienen eines von dem Adapter 10 ausgegebenen Interrupts beendet. Auf diese Art kann das Host- System selbst steuern, wieviele Interrupts es empfängt und sicherstellen, daß es keine unnötigen Interrupts empfangen wird.
  • Unglücklicherweise kann eine stark vereinfachende Implementierung eines Interrupt-Arm-Bit-Mechanismus die Ausgabe notwendiger Interrupts durch den Adapter 10 unterdrücken. Insbesondere gibt es eine Ungewißheit während der Zeitspanne, nachdem das Host-System bestimmt, daß ein Bedienen eines Adapter-Interrupts beendet wurde, aber bevor der Interrupt-Arm-Bit als Reaktion auf den Empfang durch den Adapter 10 einer Rearm-Anforderung von dem Host-System gesetzt ist. Während dieser Zeitspanne kann der Adapter 10 einen Transfer eines zusätzlichen Datenpakets zwischen dem Paketspeicher 16 und dem Host-Speicher 13 beenden.
  • Um zu verhindern, daß notwendige Interrupts unterdrückt werden, ist der Adapter vorzugsweise mit Statusinformation zu versehen, die verwendet werden kann, um zu bestimmen, ob das Host-System alle erforderliche Verarbeitung als Reaktion auf das Kopieren von Daten durch den Adapter 10 an und/oder von dem Host-Speicher durchgeführt hat.
  • Gemäß einer Ausführungsform der Erfindung kann ein Empfangs- Beendigungsindex in dem Host-Speicher gespeichert werden, der auf einen ausgewählten Deskriptor in der Empfangswarteschlange zeigt, und ein Übertragungs- Beendigungsindex kann in dem Host-Speicher gespeichert werden, der auf einen ausgewählten Deskriptor in der Übertragungswarteschlange zeigt. Die Vorrichtung der Erfindung kann dann umfassen: Empfangs-Beendigungsindexmittel zum Empfangen des Empfangs-Beendigungsindex von dem Host- System; Übertragungs-Beendigungsindexmittel zum Empfangen des Übertragungs-Beendigungsindex von dem Host-System; Mittel zum Vergleichen des Empfangs-Beendigungsindex mit dem aktualisierten Empfangs-Consumerindex, um zu bestimmen, ob irgendwelche volle Empfangspuffer in dem Host-Speicher zum Lesen von Empfangsdaten durch den Host-Prozessor von dem Host-Speicher verfügbar sind; Mittel zum Vergleichen des Übertragungs-Beendigungsindex mit dem aktualisierten Übertragungs-Consumerindex, um zu bestimmen, ob der Host- Prozessor eine Verarbeitung als Reaktion auf einen Transfer von Übertragungsdaten an dem Paketspeicher von dem Host- Speicher beendet hat; und Mittel zum Unterbrechen des Host- Systems nach dem das Transferieren von Daten zwischen dem Paketspeicher und dem Host-Speicher zu Zeiten, zu denen volle Empfangspuffer in dem Host-Speicher für Transfers von Empfangsdaten durch den Host-Prozessor von dem Host-Speicher verfügbar sind, und zu Zeiten, zu denen der Host-Prozessor eine Verarbeitung als Reaktion auf den Transfer von Übertragungsdaten an den Paketspeicher von dem Host-Speicher nicht beendet hat.
  • In dem Host-System 11 führt der Host-Prozessor 15 im Host- Speicher 13 gespeicherte Treibersoftware aus. Typischerweise ist die Treibersoftware ein Computerprogramm, das eine standardisierte Schnittstelle zu dem Betriebssystem des Host- Systems aufweist und die einen speziellen Adapter aufweist, um eine spezifische I/O-Vorrichtung zu betreiben. Die Treibersoftware weist den Host-Prozessor 15 an, Empfangsdaten auszulesen, die in vollen Empfangsdatenpuffern im Host- Speicher 13 gespeichert sind, um die Empfangsdaten an ein Anwendungsprogramm zu liefern. Ebenso kann als Reaktion auf das Lesen von Übertragungsdaten aus den Übertragungsdatenpuffern durch den Adapter 10 die Treibersoftware den Host-Prozessor 15 anweisen, Statusinformation an ein Anwendungsprogramm zu liefern, und kann ferner den Host-Prozessor anweisen, zusätzliche, durch ein Anwendungsprogramm gelieferte Übertragungsdaten in die leeren Übertragungsdatenpuffer in den Host-Speicher 13 zu schreiben.
  • In dem Host-System werden die Empfangs- und Übertragungs- Beendigungsindizes im Host-Speicher 13 gespeichert, wobei diese jeweils den Empfangs- und Übertragungswarteschlangen in dem Host-Speicher entsprechen. Vorzugsweise zeigt der Empfangs-Beendigungsindex auf ein ausgewähltes Element in der Empfangswarteschlange, das dem letzten Empfangsdatenpuffer im Host-Speicher 13 entspricht, von dem Daten durch den Host- Prozessor 15 gelesen wurden. Der Übertragungs- Beendigungsindex zeigt auf ein ausgewähltes Element in der Übertragungswarteschlange, das einem bestimmten Übertragungsdatenpuffer im Host-Speicher 13 entspricht. Vorzugsweise zeigt der Übertragungs-Beendigungsindex auf den Deskriptor in der Übertragungs-Deskriptor-Warteschlange, der dem letzten Übertragungsdatenpuffer entspricht, aus dem Übertragungsdaten durch den Adapter 10 gelesen wurden, und dessen Host-Prozessor 15 bestimmt (als Ergebnis der Übertragung eines aktualisierten Übertragungs-Consumerindex von dem Adapter an das Host-System 11) durch den Adapter 10 verarbeitet wurden. Nachdem der Host-Prozessor 15 erkennt, daß Übertragungsdaten in einem Übertragungsdatenpuffer durch den Adapter 10 gelesen und verarbeitet wurden, können neue Übertragungsdaten in dem Puffer durch den Host-Prozessor geschrieben werden, oder der Puffer kann in einen Pool von freien Datenpuffern angeordnet werden.
  • Wie hier dargestellt, aktualisiert der Host-Prozessor 15 den Empfangs-Beendigungsindex nach dem Lesen von Daten aus einem Empfangsdatenpuffer, der vorher durch den Adapter 10 gefüllt wurde. Bei einer bevorzugten Ausführungsform aktualisiert der Host-Prozessor 15 den Übertragungs-Beendigungsindex nach dem Beenden der Verarbeitung als Reaktion auf einen Transfer von Übertragungsdaten an den Paketspeicher von dem Host-Speicher. Beispielsweise kann der Host-Prozessor 15 den Übertragungs- Beendigungsindex nach dem Liefern einer Statusinformation an ein Anwendungsprogramm oder nach einem Schreiben von Daten in einen Übertragungsdatenpuffer, der vorher durch den Adapter 10 geleert wurde, aktualisieren.
  • Ein Vergleich des Empfangs-Consumerindex mit dem Empfangs- Beendigungsindex sowie ein Vergleich des Übertragungs- Consumerindex mit dem Übertragungs-Beendigungsindex gibt an, ob der Host-Prozessor 15 Arbeit auszuführen hat ("Beendigungsverarbeitung"). Zu Zeiten, zu denen die Empfangs-Beendigungs- und die Empfangs-Consumerindizes nicht übereinstimmen, gibt es volle Empfangsdatenpuffer im Host- Speicher 13, die noch nicht von dem Host-Prozessor gelesen wurden. Zu Zeiten, zu denen die Übertragungs-Beendigungs- und Übertragungs-Consumerindizes nicht übereinstimmen, hat der Host-Prozessor 15 nicht alles beendet, was an Host- Verarbeitung notwendig ist, um zu erkennen, daß der Adapter 10 zusätzliche Übertragungsdaten von den Übertragungsdatenpuffern gelesen hat. Beispielsweise könnte der Host-Prozessor Statusinformation zu liefern oder neue Übertragungsdaten in leere Übertragungsdatenpuffer im Host- Speicher 13 zu laden haben.
  • Bei einer bevorzugten Ausführungsform aktualisiert der Host- Prozessor 15 den Empfangs-Producerindex, nachdem ein leerer Empfangsdatenpuffer für den ausgewählten Empfangs-Deskriptor verfügbar gemacht wurde, auf den durch den Empfangs- Producerindex gezeigt wird. Der Host-Prozessor 15 aktualisiert den Übertragungs-Producerindex, nachdem ein voller Übertragungsdatenpuffer für den ausgewählten Übertragungs-Deskriptor, auf den von dem Übertragungs- Producerindex gezeigt wird, verfügbar gemacht wurde. In dem Host-System können freie Datenpuffer zugeordnet werden, und nachfolgend unter den verschiedenen Deskriptoren erneut zugeordnet werden.
  • Somit gibt ein Vergleich des Empfangs-Consumerindex mit dem Empfangs-Producerindex sowie ein Vergleich des Übertragungs- Consumerindex mit dem Übertragungs-Producerindex an, ob der Adapter 10 Arbeit zu verrichten hat. Zu Zeiten, zu denen die jeweiligen Producer- und Consumerindizes nicht übereinstimmen, gibt es leere Empfangsdatenpuffer und/oder volle Übertragungsdatenpuffer im Host-Speicher 13, die noch nicht durch den Adapter 10 gefüllt bzw. geleert wurden.
  • Die von dem Host-System erzeugten Beendigungs- und Producerindizes sind nicht notwendigerweise gleich. Ein Verfügbarmachen eines leeren Empfangs- oder vollen Übertragungsdatenpuffers für einen Deskriptor, auf den durch einen entsprechenden Producerindex gezeigt wird, und ein Erkennen (beispielsweise durch einen Datentransfer von einem Empfangsdatenpuffer, der vorher gefüllt wurde, oder durch einen Datentransfer an einen Übertragungsdatenpuffer, der vorher durch den Adapter geleert wurde), daß Daten an einen Empfangsdatenpuffer oder von einem Übertragungsdatenpuffer durch den Adapter transferiert wurden, sind Funktionen, die asynchron durch den Host-Prozessor 15 durchgeführt werden können.
  • Wie hier dargestellt, werden die Producer- und Beendigungsindizes, die durch den Host-Prozessor 15 aktualisiert werden, an den Adapter 10 transferiert, und die Consumerindizes, die durch die DMA-Maschinen 38 und 39 aktualisiert werden, werden an das Host-System 11 transferiert, um den Adapter und das Host-System zu befähigen, zu bestimmen, ob eine der beiden Vorrichtungen zusätzliche Arbeit durchzuführen hat. Im allgemeinen transferiert der Adapter 10 zuerst Daten zwischen dem Paketspeicher 16 und dem Host-Speicher 13, aktualisiert dann seine Consumerindizes, transferiert dann die aktualisierten Consumerindizes unter Verwendung der DMA-Maschinen 38 und 39 an den Host-Speicher 13 und gibt dann, falls notwendig, einen Interrupt aus. Typischerweise führt das Host-System 11 zuerst ein Treiberprogramm, das Daten zwischen den Datenpuffern im Host-Speicher 13 transferiert, und ein Applikationsprogramm aus, aktualisiert dann seine Beendigungsindizes, ordnet dann Datenpuffer zu Deskriptoren in seinen Warteschlangen zu, aktualisiert dann seine Producerindizes und führt dann eine einzige CSR (control and status register)-Schreibtransaktion durch, um die aktualisierten Beendigungs- und Producerindizes an den Adapter 10 zu transferieren.
  • Vorzugsweise umfaßt das Host-System 11 seine aktualisierten Empfangs- und Übertragungs-Beendigungsindizes und seine aktualisierten Empfangs- und Übertragungs-Producerindizes in einem einzigen Langwort, das an den Adapter 10 transferiert wird. Wie hierin dargestellt, enthält jede der Warteschlangen 256 Einträge, die erfordern, daß jeder Index aus einem Acht- Bit-Byte besteht. Als Ergebnis können alle vier Indizes, die durch das Host-System 11 aktualisiert werden, an den Adapter 10 in einem einzigen Vier-Byte-Langwort transferiert werden. Durch gleichzeitiges Transferieren aller vier Indizes in einem einzigen Langwort wird die Anzahl von getrennten Transaktionen und I/O-Vorgänge, die durch das Host-System 11 während eines Normalbetriebs initiiert werden müssen, auf einem Minimum gehalten (d. h. einen einzigen CSR- Schreibvorgang).
  • Ein Beispiel der Datenstrukturen im Host-Speicher 13 zum Implementieren von Beendigungsindizes in Verbindung mit kreisartigen Warteschlangen von Datendeskriptoren ist in Fig. 3 gezeigt. Eine Empfangs-Deskriptor-Warteschlange 42 (mit nur vier Einträgen) ist in einem Deskriptor-Block in einem Host-Speicher 13 gespeichert. Ein Satz von Empfangsdatenpuffern 43, die der Empfangs-Deskriptor- Warteschlange 42 entspricht, ist in einem Datenblock im Host- Speicher 13 gespeichert. Obgleich nur die Empfangs- Deskriptor-Warteschlange 42 und die Empfangsdatenpuffer 43 in Fig. 3 gezeigt sind, werden ähnliche Datenstrukturen in dem Host-Speicher zum Implementieren eines Beendigungsindex in Verbindung mit einer kreisartigen Warteschlange von Übertragungs-Datendeskriptoren vorgesehen.
  • Wie in Fig. 3 dargestellt ist, zeigt ein Empfangs- Beendigungsindex COMPL auf die Stelle in der Empfangs- Deskriptor-Warteschlange 42, die dem letzten der Empfangsdatenpuffer 43 in dem Host-Speicher 13 entspricht, von dem durch den Adapter geschriebene Empfangsdaten durch den Host-Prozessor 15 verarbeitet wurden. Der Empfangs- Beendigungsindex COMPL ist im Host-Speicher 13 gespeichert. Ein Empfangs-Consumerindex CONS zeigt auf die letzte Stelle in der Empfangs-Deskriptor-Warteschlange 42, aus der ein Empfangs-Deskriptor durch den Adapter gelesen wurde.
  • Wie in Fig. 3 gezeigt ist, wird der Empfangs- Beendigungsindex COMPL inkrementiert (mit Modulo Arithmetik) wann immer in einem Empfangsdatenpuffer geschriebene Empfangsdaten, die dem nächsten Empfangs-Deskriptor in der Empfangs-Deskriptor-Warteschlange 42 entsprechen, verarbeitet werden, d. h. ausgelesen und an das Anwendungsprogramm durch den Host-Prozessor 15 geliefert werden. Wenn der nächste Empfangs-Deskriptor aus der Empfangs-Deskriptor-Warteschlange 42 durch den Adapter 10 gelesen wird, wird der Empfangs- Consumerindex CONS inkrementiert, der angibt, daß der Adapter 10 zusätzliche Empfangsdaten in den diesem Empfangs- Deskriptor entsprechenden Empfangsdatenpuffer schreibt.
  • Wie in Fig. 3 dargestellt, sind Empfangsdaten, die noch nicht durch den Host-Prozessor 15 verarbeitet wurden, in Empfangsdatenpuffern 43 verfügbar, wann immer der Empfangs- Consumerindex CONS und der Empfangs-Beendigungsindex COMPL nicht auf die gleiche Stelle in der Empfangs-Deskriptor- Warteschlange 42 zeigen. Zu Zeiten, wenn der Empfangs- Consumerindex CONS und der Empfangs-Beendigungsindex COMPL auf die gleiche Stelle in der kreisartigen Warteschlange zeigen, hat der Host-Prozessor seine Verarbeitung als Reaktion auf einen Transfer von Daten zwischen dem Host- Speicher 13 und dem Adapter 10 beendet.
  • Wie in Fig. 3 gezeigt ist, umfaßt jeder Empfangs-Deskriptor in der Warteschlange 42 Daten, die die Startadresse eines entsprechenden Empfangsdatenpuffers im Host-Speicher 13 kennzeichnen. Für das Beispiel, bei dem die Host-Verarbeitung nicht beendet ist, sind Empfangsdaten, die in einem Empfangsdatenpuffer an der Startadresse Y des Host-Speichers 13 gespeichert sind, für eine Verarbeitung durch den Host- Prozessor verfügbar.
  • In Fig. 4 ist ein schematisches Diagramm einer bevorzugten Implementierung der Host-Interrupt-Logik im Gate-Array 30 zum Erzeugen eines Interrupts gezeigt. Wie hier dargestellt, sind die Empfangs-Beendigungsindexmittel und Übertragungs- Beendigungsindexmittel durch Beendigungs-Indexregister 46 in dem Paketspeicher-DMA-Controller-Gate-Array vorgesehen (Fig. 1), d. h. Empfangs-Beendigungs-Indexregister 47 und Übertragungs-Beendigungs-Indexregister 48 in Fig. 4. Das Host-System 11 schreibt die Empfangs- und Übertragungs- Beendigungsindizes in Register 47 und 48 nach dem Aktualisieren durch das Host-System von internen Kopien dieser, im Host-Speicher 13 gespeicherten Indizes.
  • Wie vorher erläutert wurde, werden, nachdem der Adapter 10 den Transfer eines Datenpakets oder mehrere Datenpakete zwischen dem Paketspeicher 16 und dem Host-Speicher 13 beendet hat, seine Consumerindizes durch Schreiben in die Consumerindexregister 35 von Indexwerten, die den Deskriptoren der letzten Datenpuffer im Host-Speicher 13 entsprechen, die vom Adapter 10 eingeschrieben oder von demselben gelesen wurden, aktualisiert. Wie hier dargestellt ist, sind die Mittel zum Vergleichen des Empfangs- Beendigungsindex mit dem aktualisierten Empfangs- Consumerindex, um zu bestimmen, ob irgendwelche vollen Empfangspuffer in dem Host-Speicher zum Lesen von Empfangsdaten durch den Host-Prozessor aus dem Host-Speicher verfügbar sind, und die Mittel zum Vergleichen des Übertragungs-Beendigungsindex mit dem aktualisierten Übertragungs-Consumerindex, um zu bestimmen, ob der Host- Prozessor die Verarbeitung als Reaktion auf einen Transfer von Übertragungsdaten an den Paketspeicher von dem Host- Speicher beendet hat, in der in Fig. 4 gezeigten Host- Interrupt-Logik 44 enthalten.
  • Die Host-Interrupt-Logik umfaßt einen Empfangskomparator 50 zum Bestimmen, ob der aktualisierte Empfangs-Consumerindex mit dem im Register 47 gespeicherten Empfangs- Beendigungsindex übereinstimmt. Ebenso ist ein Übertragungs- Komparator 52 zum Bestimmen, ob der aktualisierte Übertragungs-Consumerindex mit dem im Register 48 gespeicherten Übertragungs-Beendigungsindex übereinstimmt, enthalten. Die Ausgaben dieser Komparatoren werden an ein NAND-Gate 54 und dann an ein direktes Flip-Flop 56 geliefert.
  • Bei einer bevorzugten Implementierung werden Mittel zum Unterbrechen des Host-Systems nach dem Transferieren von Daten zwischen dem Paketspeicher und dem Host-Speicher zu Zeiten, zu denen volle Empfangspuffer in dem Host-Speicher für Transfers von Empfangsdaten durch den Host-Prozessor von dem Host-Speicher verfügbar sind, und zu Zeiten, zu denen der Host-Prozessor die Verarbeitung als Reaktion auf den Transfer von Übertragungsdaten an den Paketspeicher von dem Host- Speicher nicht beendet hat, durch die Host-Interrupt-Logik 44 und eine Busregister- und Steuerschaltung 58 vorgesehen. Die Ausgabe des direkten Flip-Flops 56, der eine Angabe speichert, die bestimmt, ob der Adapter 10 ein Interrupt an das Host-System ausgibt, wird an ein Host-Interrupt-Register in der Busregister- und Steuerschaltung 58 geliefert. Wie hierin dargestellt, wird ein Interrupt des Host-Systems 11 anfangs durch den Adapter 10 zu Zeiten ausgegeben, zu denen die in den Consumerindexregistern 35 vom Adapter 10 gespeicherten aktualisierten Consumerindizes nicht mit dem im Host-Speicher 13 gespeicherten Beendigungsindizes, die von dem Adapter vom Host-System 11 empfangen und in den Empfangs- und Übertragungs-Beendigungsindexregistern 47 und 48 gespeichert werden, übereinstimmen.
  • Die Ausgabe des direkten Flip-Flops 56 wird jedoch ebenfalls an eine Verzögerungsschaltung 60 geliefert, die in einen Verzögerungs-Flip-Flop 62 eingegeben wird. Die Verzögerungsschaltung 60 und der Verzögerungs-Flip-Flop 62 liefern Mittel zum Löschen eines Interrupt-Arm-Bits als Reaktion auf das Unterbrechen des Host-Systems, um zusätzliche Interrupts des Host-Systems zu verhindern. Wenn die Ausgabe des Verzögerungs-Flip-Flops 62 tief (low) ist, wird diese Ausgabe verwendet, um die Ausgabe des direkten Flip-Flops 56 zurückzusetzen ("löschen"). Folglich ist der Adapter nach einem Ausgeben eines Interrupts sogar dann nicht fähig, einen weiteren Interrupt auszugeben, wenn eine Nichtübereinstimmung zwischen den entsprechenden Consumer- und Beendigungsindizes besteht. Ein weiterer Interrupt kann nur ausgegeben werden, wenn der Interrupt-Arm-Bit wieder gesetzt wird, d. h. "rearmed" wird.
  • Wie vorher beschrieben wurde, ist es für alle vier durch das Host-System 11 zu aktualisierende einzelne Byte-Indizes vorzuziehen an den Adapter in einem einzigen Vier-Byte- Langwort transferiert zu werden, wodurch die Anzahl von getrennten Transaktionen und I/O-Vorgängen, die durch das Host-System 11 an einen einzigen CSR-Schreibvorgang initiiert werden müssen, verringert wird. Unglücklicherweise füllen der Empfangs-Producerindex, der Übertragungs-Producerindex, der Empfangs-Beendigungsindex und der Übertragungs- Beendigungsindex ein Langwort vollständig, wenn die verwendeten Warteschlangen 256 Einträge enthalten. Daher gibt es keinen Platz in dem gleichen Langwort für eine Rearm- Anforderung durch das Host-System.
  • Es ist jedoch für das Host-System 11 möglich, gleichzeitig eine Rearm-Anforderung und jede dieser vier Indizes an den Adapter 10 zu liefern, während nur eine einzige Transaktion verwendet wird, um ein einziges Langwort zu transferieren. Bei einer bevorzugten Ausführungsform der Erfindung wird dies durch Bereitstellen von zwei getrennten Langwort-Adressen zum Empfang eines einzigen Langworts von dem Host-System, das den Empfangs-Producerindex, den Übertragungs-Producerindex, den Empfangs-Beendigungsindex und den Übertragungs- Beendigungsindex enthält, erreicht. Bei dieser bevorzugten Ausführungsform sendet das Host-System 11 eine Rearm- Anforderung an den Adapter durch Schreiben an die erste Langwort-Adresse. Als Reaktion auf das Empfangen der Rearm- Anforderung von dem Host-System wird ein Interrupt-Arm-Bit in der Host-Interrupt-Logik 44 gesetzt. Im Gegensatz dazu, wenn die aktualisierten Indizes durch das Host-System an die zweite Langwort-Adresse geschrieben werden, wird das Interrupt-Arm-Bit nicht gesetzt.
  • Alternativ kann das Host-System 11 Daten an den Adapter 10 senden, die eine Rearm-Anforderung von dem Host-System enthalten.
  • Unter bestimmten Umständen kann das Host-System entscheiden, keine Rearm-Anforderung an den Adapter zu senden. Beispielsweise kann bei Echtzeit-Datenverarbeitungssystemen der Host-Prozessor 15 Interrupts nur für eine begrenzte Zeitspanne bedienen. Wenn der Host-Prozessor 15 nicht die ganze erforderliche Arbeit beim Bedienen eines durch den Adapter ausgegebenen Interrupts beenden kann, werden die entsprechenden Beendigungs- und Consumerindizes nicht übereinstimmen. Daher wird der Host-Prozessor keine Rearm- Anforderung an den Adapter senden, um zu verhindern, daß der Adapter sofort einen weiteren Interrupt an das Host-System ausgibt.
  • Bei einer bevorzugten Ausführungsform der Erfindung werden Mittel zum Empfangen einer Rearm-Anforderung von dem Host- System und Mittel zum Setzen des Interrupt-Arm-Bits als Reaktion auf das Empfangen einer Rearm-Anforderung von dem Host-System durch den Verzögerungs-Flip-Flop 62 geliefert.
  • Wenn das Host-System 11 die erste Langwort-Adresse schreibt, wird ein Signal an dem gesetzten Eingangsanschluß des Verzögerungs-Flip-Flops 62 bereitgestellt, das bewirkt, daß die Ausgabe des Verzögerungs-Flip-Flops 62 hoch wird. Folglich wird der Verzögerungs-Flip-Flop nicht mehr ein Rücksetz(low)-Signal an den Rücksetzeingangsanschluß des direkten Flip-Flops 56 liefern. Daher wird der direkte Flip- Flop in der Lage sein, eine hohe (high) Ausgabe zu liefern, um anzugeben, daß der Adapter 10 einen weiteren Interrupt an das Host-System senden sollte, zu Zeiten, zu denen sich der Empfangs- oder Übertragungs-Beendigungsindex von dem aktualisierten Empfangs- oder Übertragungs-Consumerindex unterscheidet. Demgemäß entspricht einer hohen Ausgabe von dem Verzögerungs-Flip-Flop dem Setzen eines Interrupt-Arm- Bits.
  • Bei einer weiteren Ausführungsform der Erfindung können getrennte Interrupts für Empfangsdaten und für Übertragungsdaten ausgegeben werden. Bei einer solchen Ausführungsform wird eine Logik der in Fig. 4 gezeigten Art vorgesehen, die es möglich macht, daß sowohl ein Empfangs- Interrupt-Arm-Bit als auch ein Übertragungs-Interrupt-Arm-Bit unabhängig gesetzt und "rearmed" wird.
  • Es wird Fachleuten offensichtlich sein, daß verschiedene Modifikationen und Änderungen im Ausführen der Erfindung gemacht werden können, ohne daß vom Rahmen der Erfindung abgewichen wird. Beispielsweise können verschiedene Implementierungen von Hardware und/oder Software verwendet werden, um Daten via DMA zu übertragen und einen Interruptmechanismus zu setzen und zurückzusetzen, und eine Kommunikation kann über unterschiedliche Arten von Systems oder I/O-Bussen und Netzwerken durchgeführt werden.

Claims (21)

1. Ein Verfahren zum Übertragen von Daten in einem Datenverarbeitungssystem zwischen einem Adapter (10) und einem Host-System (11), wobei das Host-System einen Host- Speicher (13) aufweist, der in einer kreisartigen Warteschlangenanordnung arbeitende Puffer umfaßt, und ein Treiber vorgesehen ist, um den Adapter zu betreiben, wobei das Verfahren folgende Schritte aufweist:
Ver- bzw. Gebrauchen von Puffern in dem Host-Speicher durch den Adapter durch Lesen der Puffer während einer Adapter-Leseoperation und durch Schreiben der Puffer während einer Adapter-Schreiboperation;
Unterhalten eines Ver- bzw. Gebrauchs-Index (35) durch den Adapter, der den letzten ver- bzw. gebrauchten Puffer angibt, während Puffer durch den Adapter ver- bzw. gebraucht werden;
Schreiben eines Beendigungs-Index (46) in den Adapter durch den Treiber nachdem ein ver- bzw. gebrauchter Puffer durch das Host-System verarbeitet wurde, wobei der Beendigungs-Index einen letzten durch das Host-System verarbeiteten Puffer angibt;
gekennzeichnet durch folgende Schritte:
Setzen eines Arm-Bits in dem Adapter, wobei das Arm-Bit angibt, daß der Treiber in dem Host-System ein Bedienen (servicing) eines durch den Adapter ausgegebenen Unterbrechung (Interrupt) beendet hat; und
Unterbrechen des Host-Systems durch den Adapter, um den Treiber zu aktivieren, in dem Fall, wenn das Arm-Bit gesetzt ist und der Beendigungsindex (46) einen unterschiedlichen Puffer wie der aktuelle Wert des Ver- bzw. Gebrauchs-Index (35) angibt.
2. Das Verfahren gemäß Anspruch 1, ferner umfassend: periodisches Prüfen unter der Steuerung eines Taktgebers (CLOCK) der Gleichheit des Beendigungsindex (46) und des aktuellen Werts des Ver- bzw. Gebrauchs-Index (35) in Verbindung mit einem Prüfen, ob das Arm-Bit gesetzt ist.
3. Das Verfahren gemäß Anspruch 1, ferner umfassend: Schreiben eines Ver- bzw. Gebrauchs-Index durch den Adapter in den Host.
4. Das Verfahren gemäß Anspruch 1, wobei das Setzen des Arm-Bits in dem Adapter ferner umfaßt: Erfassen des Schreibens des Beendigungsindex (46) in den Adapter durch den Adapter und Setzen des Arm-Bits in Reaktion auf ein Erfassen des Schreibens des Beendigungsindex in den Adapter.
5. Das Verfahren gemäß Anspruch 1, wobei das Setzen des Arm-Bits in dem Adapter ferner umfaßt: Schreiben des Arm-Bits in den Adapter durch den Host.
6. Das Verfahren gemäß Anspruch 1, ferner umfassend: Übertragen von Daten zwischen einem Paketspeicher (16) in dem Adapter (10) und dem Host-Speicher (13) durch das Ver- bzw. Gebrauchen von Puffern in dem Host-Speicher.
7. Das Verfahren gemäß Anspruch 6, in dem der Schritt des Übertragenes von Daten zwischen dem Paketspeicher (16) und dem Host-Speicher (13) umfaßt: Übertragen von Daten über einen DMA.
8. Das Verfahren gemäß Anspruch 1, ferner umfassend: Löschen des Arm-Bits in Reaktion auf das Unterbrechen des Host-Systems, um zusätzliche Unterbrechungen des Host- Systems zu verhindern.
9. Das Verfahren gemäß Anspruch 1, ferner umfassend:
Empfangen einer Rearm-Anforderung von dem Host-System; und
Setzen des Arm-Bits in Reaktion auf das Empfangen der Rearm-Anforderung.
10. Das Verfahren gemäß Anspruch 1, ferner umfassend: Übertragen, in Reaktion auf den aktuellen Wert des Ver- bzw. Gebrauchs-Index eines aktualisierten Ver- bzw. Gebrauchs-Index an das Host-System nach einem Übertragen von Daten zwischen einem Paketspeicher (16) und dem Host-Speicher (13).
11. Das Verfahren gemäß Anspruch 1, wobei das Host-System ein mit dem Host-System gekoppeltes Netzwerk (14) aufweist, ferner umfassend: Übertragen von Daten zwischen einem Paketspeicher (16) und dem Netzwerk.
12. Eine Vorrichtung zum Übertragen von Daten in einem Datenverarbeitungssystem, das einen Adapter (10) und ein Host-System (11) aufweist, wobei das Host-System einen Host- Speicher (13) umfaßt, der in einer kreisartigen Warteschlangenanordnung arbeitende Puffer umfaßt, und ein Treiber vorgesehen ist, um den Adapter zu betreiben, wobei die Vorrichtung umfaßt:
Mittel zum Ver- bzw. Gebrauchen von Puffern in dem Host- Speicher durch den Adapter durch Lesen der Puffer während einer Adapter-Leseoperation und durch Schreiben der Puffer während einer Adapter-Schreiboperation;
Mittel zum Unterhalten eines Ver- bzw. Gebrauchs-Index (35) durch den Adapter, der einen letzten ver- bzw. gebrauchten Puffer angibt, während Puffer durch den Adapter ver- bzw. gebraucht werden;
Mittel zum Schreiben eines Beendigungsindex (46) in den Adapter durch den Treiber nachdem ein ver- bzw. gebrauchter Puffer durch das Host-System verarbeitet wurde, wobei der Beendigungsindex einen letzten durch das Host-System verarbeiteten Puffer angibt;
gekennzeichnet durch
Mittel zum Setzen eines Arm-Bits in dem Adapter, wobei das Arm-Bit angibt, daß der Treiber in dem Host-System ein Bedienen (servicing) einer durch den Adapter ausgegebenen Unterbrechung (Interrupt) beendet hat; und,
Mittel zum Unterbrechen des Host-Systems durch den Adapter, um den Treiber zu aktivieren, in dem Fall, wenn das Arm-Bit gesetzt ist und der Beendigungsindex (46) einen unterschiedlichen Puffer wie der aktuelle Wert des Ver- bzw. Gebrauchs-Index (35) angibt.
13. Die Vorrichtung gemäß Anspruch 12, ferner umfassend: Mittel zum periodischen Prüfen unter der Steuerung eines Taktgebers (CLOCK) der Gleichheit des Beendigungsindex und des aktuellen Werts des Ver- bzw. Gebrauchs-Index, in Verbindung mit einem Prüfen, ob das Arm-Bit gesetzt ist.
14. Die Vorrichtung gemäß Anspruch 12, ferner umfassend: Mittel zum Schreiben eines Ver- bzw. Gebrauchs-Index durch den Adapter in den Host.
15. Die Vorrichtung gemäß Anspruch 12, wobei das Mittel zum Setzen des Arm-Bits in dem Adapter ferner umfaßt: Mittel zum Erfassen, durch den Adapter, des Schreibens des Beendigungsindex in den Adapter und Setzen des Arm-Bits in Reaktion auf eine Erfassung des Schreibens des Beendigungsindex in den Adapter.
16. Die Vorrichtung gemäß Anspruch 12, wobei das Mittel zum Setzen des Arm-Bits in dem Adapter ferner umfaßt: Mittel zum Schreiben des Arm-Bits in den Adapter durch den Host.
17. Die Vorrichtung gemäß Anspruch 12, ferner umfassend: Mittel zum Übertragen von Daten zwischen einem Paketspeicher (16) in dem Adapter und dem Host-Speicher (13) durch das Ver- bzw. Gebrauchen von Puffern in dem Host- Speicher.
18. Die Vorrichtung gemäß Anspruch 12, ferner umfassend: Mittel zum Löschen des Arm-Bits in Reaktion auf das Unterbrechen des Host-Systems, um zusätzliche Unterbrechungen des Host-Systems zu verhindern.
19. Die Vorrichtung gemäß Anspruch 12, ferner umfassend:
Mittel zum Empfangen einer Rearm-Anforderung von dem Host-System; und
Mittel zum Setzen des Arm-Bits in Reaktion auf das Empfangen einer Rearm-Anforderung.
20. Die Vorrichtung gemäß Anspruch 12, ferner umfassend: Mittel zum Übertragen, in Reaktion auf den aktuellen Wert des Ver- bzw. Gebrauchs-Index, eines aktualisierten Ver- bzw. Gebrauchs-Index in das Host-System nach einem Übertragen von Daten zwischen einem Paketspeicher (16) und dem Host- Speicher (13).
21. Die Vorrichtung gemäß Anspruch 12, wobei das Host-System ein mit dem Host-System gekoppeltes Netzwerk (14) aufweist, ferner umfassend: Mittel zum Übertragen von Daten zwischen einem Paketspeicher (16) und dem Netzwerk.
DE69328320T 1992-01-09 1993-01-06 Vorrichtung und Verfahren zur Datenübertragung zu und von einem Wirtrechnersystem Expired - Lifetime DE69328320T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US81856492A 1992-01-09 1992-01-09

Publications (2)

Publication Number Publication Date
DE69328320D1 DE69328320D1 (de) 2000-05-18
DE69328320T2 true DE69328320T2 (de) 2000-11-30

Family

ID=25225833

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69328320T Expired - Lifetime DE69328320T2 (de) 1992-01-09 1993-01-06 Vorrichtung und Verfahren zur Datenübertragung zu und von einem Wirtrechnersystem

Country Status (4)

Country Link
US (1) US5740467A (de)
EP (1) EP0551191B1 (de)
JP (1) JPH0683750A (de)
DE (1) DE69328320T2 (de)

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5412782A (en) 1992-07-02 1995-05-02 3Com Corporation Programmed I/O ethernet adapter with early interrupts for accelerating data transfer
US5687316A (en) * 1994-07-29 1997-11-11 International Business Machines Corporation Communication apparatus and methods having P-MAC, I-MAC engines and buffer bypass for simultaneously transmitting multimedia and packet data
US5740448A (en) * 1995-07-07 1998-04-14 Sun Microsystems, Inc. Method and apparatus for exclusive access to shared data structures through index referenced buffers
US5664116A (en) * 1995-07-07 1997-09-02 Sun Microsystems, Inc. Buffering of data for transmission in a computer communication system interface
US5625625A (en) * 1995-07-07 1997-04-29 Sun Microsystems, Inc. Method and apparatus for partitioning data load and unload functions within an interface system for use with an asynchronous transfer mode system
US5870631A (en) * 1995-12-15 1999-02-09 International Business Machines Corporation System for operating system software providing input buffer for receiving variable-length bit stream with a header containing synchronization data recognized by universal serial controller
US5963720A (en) * 1996-08-13 1999-10-05 Advanced Micro Devices, Inc. Method and system for expediting transfer of data over a network using an additional field
US6075790A (en) 1996-12-11 2000-06-13 Brooktree Corporation Asynchronous transfer mode system for, and method of, writing a cell payload between a control queue on one side of a system bus and a status queue on the other side of the system bus
US6341301B1 (en) 1997-01-10 2002-01-22 Lsi Logic Corporation Exclusive multiple queue handling using a common processing algorithm
US5922057A (en) * 1997-01-10 1999-07-13 Lsi Logic Corporation Method for multiprocessor system of controlling a dynamically expandable shared queue in which ownership of a queue entry by a processor is indicated by a semaphore
US6253255B1 (en) * 1997-05-08 2001-06-26 Microsoft Corporation System and method for batching data between transport and link layers in a protocol stack
US6519686B2 (en) * 1998-01-05 2003-02-11 Intel Corporation Information streaming in a multi-process system using shared memory
AU2992499A (en) * 1998-03-10 1999-09-27 Motorola, Inc. Apparatus, method and article of manufacture for use with a priority based real-time operating system
US6360243B1 (en) 1998-03-10 2002-03-19 Motorola, Inc. Method, device and article of manufacture for implementing a real-time task scheduling accelerator
US6430593B1 (en) 1998-03-10 2002-08-06 Motorola Inc. Method, device and article of manufacture for efficient task scheduling in a multi-tasking preemptive priority-based real-time operating system
US6216182B1 (en) * 1998-07-30 2001-04-10 Fore Systems, Inc. Method and apparatus for serving data with adaptable interrupts
US6434630B1 (en) 1999-03-31 2002-08-13 Qlogic Corporation Host adapter for combining I/O completion reports and method of using the same
US6721798B1 (en) * 1999-05-06 2004-04-13 International Business Machines Corporation Method and apparatus for converting IP datagram to/from ethernet frames
DE19929419C2 (de) * 1999-06-26 2003-08-07 Sci Worx Gmbh Synchroner Kommunikationsbus und Verfahren zur synchronen Kommunikation zwischen Schaltungsmodulen
US6714959B1 (en) * 2000-06-23 2004-03-30 Unisys Corporation System and method for optimizing insertions for timer queue operations
US6708239B1 (en) * 2000-12-08 2004-03-16 The Boeing Company Network device interface for digitally interfacing data channels to a controller via a network
FR2820845B1 (fr) * 2001-02-14 2003-05-16 Canon Kk Procede d'optimisation de l'utilisation d'un moyen de stockage, dispositif de commutation, signal, et applications correspondantes
EP1390857B2 (de) * 2001-04-26 2012-04-25 The Boeing Company System, verfahren und bussteuerungen zur erzeugung eines event-triggers auf einem netzwerkbus
US7159048B2 (en) * 2001-12-10 2007-01-02 Emulex Design & Manufacturing Corporation Direct memory access (DMA) transfer buffer processor
TW567418B (en) * 2002-04-24 2003-12-21 Via Tech Inc Interrupt signal generating method and media access controller utilizing same
US20040006633A1 (en) * 2002-07-03 2004-01-08 Intel Corporation High-speed multi-processor, multi-thread queue implementation
US7154886B2 (en) * 2002-07-22 2006-12-26 Qlogic Corporation Method and system for primary blade selection in a multi-module fiber channel switch
US7230929B2 (en) * 2002-07-22 2007-06-12 Qlogic, Corporation Method and system for dynamically assigning domain identification in a multi-module fibre channel switch
US7397768B1 (en) 2002-09-11 2008-07-08 Qlogic, Corporation Zone management in a multi-module fibre channel switch
US7319669B1 (en) 2002-11-22 2008-01-15 Qlogic, Corporation Method and system for controlling packet flow in networks
US7587510B1 (en) 2003-04-21 2009-09-08 Charles Schwab & Co., Inc. System and method for transferring data between a user space and a kernel space in a server associated with a distributed network environment
US7420931B2 (en) * 2003-06-05 2008-09-02 Nvidia Corporation Using TCP/IP offload to accelerate packet filtering
US7991918B2 (en) * 2003-06-05 2011-08-02 Nvidia Corporation Transmitting commands and information between a TCP/IP stack and an offload unit
US7646767B2 (en) * 2003-07-21 2010-01-12 Qlogic, Corporation Method and system for programmable data dependant network routing
US7234101B1 (en) 2003-08-27 2007-06-19 Qlogic, Corporation Method and system for providing data integrity in storage systems
US7219263B1 (en) 2003-10-29 2007-05-15 Qlogic, Corporation Method and system for minimizing memory corruption
GB0404696D0 (en) * 2004-03-02 2004-04-07 Level 5 Networks Ltd Dual driver interface
GB0408876D0 (en) * 2004-04-21 2004-05-26 Level 5 Networks Ltd User-level stack
US7930377B2 (en) * 2004-04-23 2011-04-19 Qlogic, Corporation Method and system for using boot servers in networks
US7669190B2 (en) 2004-05-18 2010-02-23 Qlogic, Corporation Method and system for efficiently recording processor events in host bus adapters
US7577772B2 (en) * 2004-09-08 2009-08-18 Qlogic, Corporation Method and system for optimizing DMA channel selection
US20060064531A1 (en) * 2004-09-23 2006-03-23 Alston Jerald K Method and system for optimizing data transfer in networks
US7380030B2 (en) * 2004-10-01 2008-05-27 Qlogic, Corp. Method and system for using an in-line credit extender with a host bus adapter
US7676611B2 (en) * 2004-10-01 2010-03-09 Qlogic, Corporation Method and system for processing out of orders frames
US7398335B2 (en) * 2004-11-22 2008-07-08 Qlogic, Corporation Method and system for DMA optimization in host bus adapters
US7164425B2 (en) * 2004-12-21 2007-01-16 Qlogic Corporation Method and system for high speed network application
US7392437B2 (en) 2005-01-20 2008-06-24 Qlogic, Corporation Method and system for testing host bus adapters
US7831749B2 (en) * 2005-02-03 2010-11-09 Solarflare Communications, Inc. Including descriptor queue empty events in completion events
US7562366B2 (en) * 2005-02-03 2009-07-14 Solarflare Communications, Inc. Transmit completion event batching
US7231480B2 (en) * 2005-04-06 2007-06-12 Qlogic, Corporation Method and system for receiver detection in PCI-Express devices
US7281077B2 (en) * 2005-04-06 2007-10-09 Qlogic, Corporation Elastic buffer module for PCI express devices
US7819763B2 (en) * 2005-04-21 2010-10-26 Campbell Steven S Baseball batting trainer
US7634584B2 (en) 2005-04-27 2009-12-15 Solarflare Communications, Inc. Packet validation in virtual network interface architecture
US7984180B2 (en) 2005-10-20 2011-07-19 Solarflare Communications, Inc. Hashing algorithm for network receive filtering
US7461195B1 (en) 2006-03-17 2008-12-02 Qlogic, Corporation Method and system for dynamically adjusting data transfer rates in PCI-express devices
US7617345B2 (en) * 2007-07-02 2009-11-10 International Business Machines Corporation Prioritization of interrupts in a storage controller based on interrupt control directives received from hosts
US7613860B2 (en) * 2007-07-02 2009-11-03 International Business Machines Corporation Prioritization of interrupts in a storage controller based on interrupt control directives received from hosts
US8904067B2 (en) * 2012-03-13 2014-12-02 Microsoft Corporation Adaptive multi-threaded buffer
US20150186311A1 (en) * 2013-12-28 2015-07-02 Ming Kiat Yap Smart direct memory access

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4535420A (en) * 1979-09-26 1985-08-13 Sperry Corporation Circular-queue structure
DE3241402A1 (de) * 1982-11-09 1984-05-10 Siemens AG, 1000 Berlin und 8000 München Verfahren zum steuern des datentransfers zwischen einem datensender und einem datenempfaenger ueber einen bus mit hilfe einer am bus angeschlossenen steuereinrichtung
US4754399A (en) * 1983-12-28 1988-06-28 Hitachi, Ltd. Data transfer control system for controlling data transfer between a buffer memory and input/output devices
US4675865A (en) * 1985-10-04 1987-06-23 Northern Telecom Limited Bus interface
EP0267974B1 (de) * 1986-11-14 1992-02-19 International Business Machines Corporation Steuerungsschnittstelle für Datentransfer zwischen einer Datenverarbeitungseinheit und Ein-Ausgabevorrichtungen
US5163132A (en) * 1987-09-24 1992-11-10 Ncr Corporation Integrated controller using alternately filled and emptied buffers for controlling bi-directional data transfer between a processor and a data storage device
JPH03142648A (ja) * 1989-10-30 1991-06-18 Mitsubishi Electric Corp 入力データ制御方式
US5347634A (en) * 1990-03-15 1994-09-13 Hewlett-Packard Company System and method for directly executing user DMA instruction from user controlled process by employing processor privileged work buffer pointers
US5136582A (en) * 1990-05-29 1992-08-04 Advanced Micro Devices, Inc. Memory management system and method for network controller
US5043981A (en) * 1990-05-29 1991-08-27 Advanced Micro Devices, Inc. Method of and system for transferring multiple priority queues into multiple logical FIFOs using a single physical FIFO

Also Published As

Publication number Publication date
JPH0683750A (ja) 1994-03-25
US5740467A (en) 1998-04-14
EP0551191B1 (de) 2000-04-12
EP0551191A1 (de) 1993-07-14
DE69328320D1 (de) 2000-05-18

Similar Documents

Publication Publication Date Title
DE69328320T2 (de) Vorrichtung und Verfahren zur Datenübertragung zu und von einem Wirtrechnersystem
DE3782335T2 (de) Speichersteuersystem.
DE69124946T2 (de) Bidirektionaler FIFO-Puffer zur Schnittstellenbildung zwischen zwei Bussen
DE69031658T2 (de) Vorrichtung und verfahren für instandhaltung von cache/zentralspeicherkonsistenz
DE69031367T2 (de) Blockübertragungs- und Koprozessorschnittstellenbefehl
DE60204687T2 (de) Speicherkopierbefehl mit Angabe von Quelle und Ziel, der in der Speichersteuerung ausgeführt wird
DE69131477T2 (de) Netzwerkanpassungseinrichtung
DE3689042T2 (de) Gerät zur Pufferung von Schreibanforderungen.
DE3751091T2 (de) Übertragungsprotokoll zwischen Prozessoren.
DE69519117T2 (de) Ein Rechnersystem
DE69323790T2 (de) Verfahren und Vorrichtung für mehreren ausstehende Operationen in einem cachespeicherkohärenten Multiprozessorsystem
DE3850881T2 (de) Verfahren und Vorrichtung zur Nachrichtenübertragung zwischen Quellen- und Zielanwender durch einen anteilig genutzten Speicher.
DE69327387T2 (de) An einen paketvermittelten Bus gekoppelte Nachschreibsteuerungsschaltung für eine Cachespeichersteuerungsschaltung
DE3642324C2 (de) Multiprozessoranlage mit Prozessor-Zugriffssteuerung
DE69329684T2 (de) Vorrichtung mit hauptrechnerindikationssignalen
DE69132734T2 (de) Vorrichtung und Verfahren eines synchronen, schnellen, paketvermittelten Bus
DE60037065T2 (de) Übertragungsteuerung mit Naben- und Torachitektur
DE69130203T2 (de) Folgerichtiger paketvermittelter Speicherbus für Multiprozessoren mit gemeinsam genutztem Speicher
EP0772832B1 (de) Arbitrierung bei verzögernder buskopplung
DE19983026B4 (de) Brücke zwischen zwei Bussen mit einem Puffer mit einer einstellbaren Mindestspeicherraummenge für ein Akzeptieren einer Schreibanforderung und Verfahren hierzu
EP0893755B1 (de) Pufferspeicheranordnung
DE2854485A1 (de) Datenverarbeitungssystem mit speicherhierarchie
DE1524166B1 (de) Schaltungsanordnung zur Herstellung von Verbindungen zwischen mehreren unabhaengigen Teilen und einem gemeinsamen Teil einer Datenverarbeitungsanlage
DE69032723T2 (de) FIFO mit variablem Zuweisungszeiger
DE2809602A1 (de) Kanalbus-steuereinrichtung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: ENTERASYS NETWORKS,INC.(N.D.GES.D.STAATES DELAWARE