DE3850881T2 - Verfahren und Vorrichtung zur Nachrichtenübertragung zwischen Quellen- und Zielanwender durch einen anteilig genutzten Speicher. - Google Patents

Verfahren und Vorrichtung zur Nachrichtenübertragung zwischen Quellen- und Zielanwender durch einen anteilig genutzten Speicher.

Info

Publication number
DE3850881T2
DE3850881T2 DE3850881T DE3850881T DE3850881T2 DE 3850881 T2 DE3850881 T2 DE 3850881T2 DE 3850881 T DE3850881 T DE 3850881T DE 3850881 T DE3850881 T DE 3850881T DE 3850881 T2 DE3850881 T2 DE 3850881T2
Authority
DE
Germany
Prior art keywords
message
buffer
queue
address
control block
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 - Fee Related
Application number
DE3850881T
Other languages
English (en)
Other versions
DE3850881D1 (de
Inventor
Jean Calvignac
Jean-Pierre Lips
Jean-Marc Millet
Jean-Marie Munier
Bernard Naudin
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE3850881D1 publication Critical patent/DE3850881D1/de
Application granted granted Critical
Publication of DE3850881T2 publication Critical patent/DE3850881T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer And Data Communications (AREA)
  • Multi Processors (AREA)
  • Information Transfer Systems (AREA)
  • Communication Control (AREA)

Description

    Beschreibung der Erfindung
  • Die vorliegende Erfindung bezieht sich auf ein Verfahren und eine dieses Verfahren implementierende Vorrichtung zur Verwaltung eines von einer Anzahl von Benutzern gemeinsam genutzen Speichers, so daß die Benutzer in effektiver Weise Nachrichten durch den Speicher austauschen können.
  • Stand der Technik
  • In einem Nachrichtennetz müssen die Steuerungssysteme, die im Netzwerkknoten untergebracht sind, wenigstens die Funktionen erfüllen, die als die drei ersten Ebenen des Bezugsmodells definiert sind, nämlich die physikalische Ebene, die Datenverbindungs-Steuerungsebene und die Pfadsteuerungsebene.
  • In Zukunft werden diese Systeme mehr und mehr Benutzer über Hochgeschwindigkeitsverbindungen zu versorgen haben. Ein System, das dank eines Hochgeschwindigkeitsadapters mit der Fähigkeit, Hochgeschwindigkeits-Nachrichtenverbindungen zu bedienen, ausgestattet ist, ist in EP-A-244 544 beschrieben. Es umfaßt eine zentrale Steuerungseinheit, auf der ein Netzwerk-Steuerungsprogramm läuft, welches aus dem Speicher der zentralen Steuerungseinheit Puffer an die Benutzerverbindungen zuteilt. Der Hochgeschwindigkeitsadapter ist mit Puffermitteln ausgestattet, in welchen die Datenportionen der empfangenen Rahmen gesammelt werden, um durch einen direkten Speicherzugriffspfad in den Speicher der zentralen Steuerungseinheit eingespeichert zu werden. Die Steuerungsteile werden der zentralen Steuerungseinheit durch den Adapter-Mikroprozessor über den Eingangs-/Ausgangs-Bus zugeführt, der die zentrale Steuerungseinheit und die Adapter verbindet.
  • Die Leistungsfähigkeit eines solchen Systems wird durch zwei Faktoren begrenzt: erstens müssen die Nachrichten durch den Mikrocode verwaltet werden, und zweitens ist es nicht möglich, direkt Nachrichten zwischen den Adaptern ohne den Eingriff der zentralen Steuerungseinheit auszutauschen.
  • Das erste Dokument, 4th Euromicro symposium on microprocessing and microprogramming, 17. bis 19. Oktober 1978, München, Seiten 257 bis 267, North Holland Publishing Co., Amsterdam; H. Hartmann und andere, mit dem Titel: "Implementation of a multiple microprocessor system with communication via a common memory" beschreibt ein Verfahren zum Senden von Nachrichten an eine Vielzahl von Empfängern durch einen gemeinsamen Speicher und beschäftigt sich insbesondere mit dem in dieses Umfeld implementierten Mechanismus, der verhütet, daß vom Sender in dem gemeinsamen Speicher empfangene Nachrichten vom Empfänger bearbeitet werden, bevor ein kompletter Datenblock in einen Speicherpufferbereich eingeschrieben wurde.
  • Das zweite Dokument, IBM Technical Disclosure Bulletin, Band 23, Nr. 71, Dezember 1980, Seiten 3059 bis 3061; P. Capek und andere, beschreibt ebenfalls den Austausch von Nachrichten zwischen einem Sender und einem Empfänger durch eine Warteschlange in einem gemeinsam genutzten Speicher, und insbesondere einen Mechanismus zur Verwaltung des Zugangs zur Warteschlange, welcher keine besonderen Synchronisierungsanweisungen erfordert.
  • Zusammenfassung der Erfindung
  • Eine Aufgabe der vorliegenden Erfindung besteht darin, ein Verfahren bereitzustellen, das in einen Nachrichtennetzknoten eingesetzt wird, und das es gestattet, Nachrichten zwischen Adaptern jeden Typs ohne Eingriff einer kostspieligen zentralen Steuerungseinheit auszutauschen.
  • Eine andere Aufgabe der vorliegenden Erfindung besteht darin, ein solches Verfahren bereitzustellen, das gestattet, Nachrichten, die irgendeine empfangene Aufeinanderfolge von Kurznachrichten enthalten, ohne das Risiko des Überlaufs auszutauschen.
  • Das Verfahren der vorliegenden Erfindung gestattet es, eine Nachricht zwischen Quellenbenutzern und Zielbenutzern in einem Kommunikationssystem durch einen in Seiten organisierten Speicher zu übertragen, wobei der Speicher von den Benutzern gemeinsam genutzt wird und für die Benutzer durch einen gemeinsamen Bus zugänglich ist.
  • Es ist dadurch gekennzeichnet, daß der gemeinsam genutzte Speicher in einen gepufferten Bereich und einen linearen Bereich organisiert ist. Jede Speicherseite des gepufferten Bereichs umfaßt Datenpuffer gleicher Kapazität. Jedem Datenpuffer ist ein Puffersteuerungsblock zugeordnet, der zur Speicherung von Information bezüglich des zugeordneten Datenpuffers bestimmt ist. Der lineare Bereich enthält Warteschlangen-Steuerungsblöcke (QCB) mit einem Warteschlangen-Steuerungsblock für eine Nachrichteneingangs-Warteschlange (LIQ) und einen Warteschlangen- Steuerungsblock für eine Nachrichten-Ausgangswarteschlange (LOQ), die jedem Quellen- oder Zielbenutzer fest zugeordnet sind.
  • Nachrichteneingangs-Warteschlangen (LIQ) werden im gepufferten Bereich durch Empfangen einer Nachricht von einem der Quellenbenutzer und ihre Abspeicherung in freie Datenpuffer aufgebaut, die dem gepufferten Bereich entnommen werden, durch Verketten der Warteschlangenpuffer, durch Einschreiben von die nächste Pufferadresse identifizierender Information und der nächsten Nachrichtenadresse, und Ausgeben eines Befehls zum Einreihen in die Warteschlange an ein zentrales Steuermittel (26) zum Einschreiben einer für die Warteschlangen-Anfänge und die Warteschlangen-Enden kennzeichnenden Information in die Warteschlangen-Steuerungsblöcke, die den jeweiligen Quellenbenutzern zugeordnet sind.
  • Dann gibt ein Empfangssteuerungsmittel (88, 89, 600), das dem Quellenbenutzer zugeordnet ist, einen Befehl zum Herausnehmen aus der Warteschlange einer LIQ an das zentrale Steuerungsmittel (26), auf die Feststellung hin, daß die LIQ nicht leer wird, um in Antwort darauf die Nachrichtenadresse mit der Identifikation des Warteschlangen-Steuerungsblocks des Zielbenutzers erhalten zu können und die Nachricht aus der LIQ herauszunehmen.
  • Das Empfangssteuerungsmittel (88, 89, 600) gibt einen Befehl zum Einreihen in die Warteschlange an das zentrale Steuerungsmittel (26) aus, welches veranlaßt, daß die Nachricht in die Nachrichten-Ausgangswarteschlange (LOQ) des jeweiligen Zielbenutzers eingereiht wird.
  • Übertragungssteuerungsmittel (88, 89, 602), die der Zieleinheit zugeordnet sind, werden unter der Bedingung aktiviert, daß die LOQ für die Zieleinheit nicht leer wird, um an das zentrale Steuerungsmittel (26) einen Befehl zum Herausnehmen aus der Warteschlange aus zugeben sowie die Nachrichtenadresse in Antwort darauf zu erhalten und die Übertragung der Nachricht in der Zieleinheit zugeordnete Puffermittel auszuführen.
  • Kurze Beschreibung der Figuren
  • Fig. 1 zeigt die allgemeine Anordnung eines Kommunikationssystems, das die vorliegende Erfindung enthält.
  • Fig. 2 zeigt die Speicherorganisation.
  • Fig. 3 zeigt die Anordnung einer Speicherseite mit dem Adressierungsformat.
  • Fig. 4 zeigt die Datenpuffer-Verkettung.
  • Fig. 5 zeigt die Puffersteuerungsblock-Felder.
  • Fig. 6 zeigt die Nachrichtenverkettung.
  • Fig. 7 zeigt die Warteschlangen-Steuerungsblockfelder.
  • Fig. 8 veranschaulicht die Anordnung des Kommunikationssystems, das die vorliegende Erfindung enthält, in mehr Einzelheiten.
  • Fig. 9 veranschaulicht die globale Befehlsmaschine 90 gemeinsam mit dem globalen Befehlsanforderungs-/antwortformat.
  • Fig. 10 A und 10 B zeigen die Funktionen, welche durch die Logik 102 und 104 der globale Befehlsmaschine für die Bearbeitung eines globalen Warteschlangen-Einreihungsbefehls ausgeführt werden.
  • Fig. 11 A und 11 B zeigen die Funktionen, welche durch die Logik 102 und 104 zur Bearbeitung eines globalen Warteschlangen- Herausnahmebefehls ausgeführt werden.
  • Fig. 12 A und 12 B zeigen die Funktionen, welche durch Logik 102 und 104 zur Bearbeitung eines globalen Warteschlangen-Herausnahmebefehls ausgeführt werden.
  • Fig. 13 A bis 13 C zeigen die Funktionen, welche durch Logik 102 und 104 zur Bearbeitung eines globalen Freigabebefehls ausgeführt werden.
  • Fig. 14 veranschaulicht die Maschine für die Lieferung freier Puffer 90.
  • Fig. 15 A und 15 C veranschaulichen die Funktionen, die durch Logik 206 zur Ladung des Pools für freie Puffer 200 ausgeführt werden.
  • Fig. 16 zeigt die Funktionen, die durch Steuerungslogik 202 zur Bearbeitung eines globalen Lease-Befehls ausgeführt werden.
  • Fig. 17 veranschaulicht den Empfangsdaten-Verschiebeschaltkreis 86_RCV.
  • Fig. 18 zeigt die Funktionen, die durch Logik 306 und 308 zum Empfang von Datenblöcken ausgeführt werden.
  • Fig. 19 A und 19 B zeigen mit mehr Einzelheiten die in Schritt 334 von Fig. 18 ausgeführten Funktionen.
  • Fig. 20 zeigt die in den Schritten 352, 353 und 354 von Fig. 19 ausgeführten Funktionen mit mehr Einzelheiten.
  • Fig. 21 zeigt die in den Schritten 357 bis 364 von Fig. 19 ausgeführten Funktionen mit mehr Einzelheiten.
  • Fig. 22 veranschaulicht den Sendedaten-Verschiebeschaltkreis 86_XMIT.
  • Fig. 23 zeigt die durch Logik 506 und 508 für die Übertragung von Datenblöcken an den Zielbenutzer ausgeführten Funktionen.
  • Fig. 24 zeigt die in Schritt 347 von Fig. 23 ausgeführten Funktionen.
  • Fig. 25 zeigt die in den Schritten 560 bis 564 ausgeführten Funktionen.
  • Fig. 26 zeigt den Stationsservice-Schaltkreis 88.
  • Detaillierte Beschreibung der Erfindung
  • Fig. 1 zeigt das Blockdiagramm eines Kommunikationssystems, das den Mechanismus nach der vorliegenden Erfindung enthält.
  • Kasten 10 veranschaulicht den Datenvorratsspeicher, welcher wie in Fig. 2 dargestellt, organisiert ist, um dem System Leistungsfähigkeit und Flexibilität bei der Nachrichtenübertragung zu geben. Der Speicher wird von einer Vielzahl von Benutzern 12, welche an Kommunikationsadapter 14 angeschlossen sind, gemeinsam genutzt. Die Adapter 14 erfüllen einige physikalische und Steuerungsebenen-Funktionen der Datenverbindung, was bedeutet, daß Nachrichtenblöcke an die obere Ebene geliefert und von dieser empfangen werden. Jeder Adapter kann mit wenigstens einem Benutzer verbunden werden. Das System gestattet einem Benutzer, der an einen Adapter angeschlossen ist, Nachrichten zu einem anderen Benutzer, der mit demselben Adapter oder einem anderen Adapter verbunden ist, zu übertragen.
  • Mindestens ein besonderer Mikroprozessor-Adapter 16 wird bereitgestellt, um einen Mikroprozessor 18 anschließen zu können, der Funktionen wie Initialisierung, Fehlerbearbeitung und Erstellen der Nachrichtenvermittlungstabelle ausführt.
  • Der Speicherverwaltungs-Mechanismus 20 der vorliegenden Erfindung umfaßt die Datenspeicher-Schnittstelle DSI 22, welche die Nachrichtenübertragungen durch den gemeinsam genutzten Speicher 10 steuert, er enthält ebenso Speicherbus 24, das zentrale DSI- Steuerungssystem DCS 26 und das Buszugangs-Entscheidungsmittel 28. Schnittstelle 30 wird bereitgestellt, um den Mikroprozessor- Adapter an den gemeinsam genutzten Speicher über Mechanismus 20 anzuschließen.
  • Alle Datenspeicher-Schnittstellen DSI, 22 und 30, umfassen einen Mechanismus, durch den Vorrichtungen (Kommunikations-Adapter oder Mikroprozessor-Adapter) an den gemeinsam genutzten Speicher 10 angekoppelt werden. Dieses System bildet einen Satz von Hardware-Mitteln, welche vorbestimmte Datenbewegungen mit dem gemeinsam genutzten Speicher unter Anforderung der angeschlossenen Adapter 16 und 14 durchführen, ohne eine vollständige Nachrichtenpufferung in den Adaptern zu verlangen.
  • Die Funktionen und Strukturen jedes Teils des Mechanismus 20 werden im Detail weiter unten beschrieben. Es wird zunächst beschrieben, wie Speicher 10 organisiert ist, um die Leistungsfähigkeit des Mechanismus zu verbessern.
  • Der Datenvorratsspeicher 10 hält im wesentlichen zwei Informationsarten, die wiederum auf zwei verschiedene Arten organisiert sind:
  • Die Nachrichten, die von den benachbarten Stationen der Verbindung erhalten oder die zu diesen übertragen werden, und Steuerungsblöcke, die für die Operation jedes Adapters benötigt werden. Wenn die Daten unter Verwendung von HDLC-Protokollen ausgetauscht werden, werden Nachrichten durch die durch Kennzeichen getrennten HDLC-Rahmen dargestellt. HDLC steht für "high level Data Link Control".
  • Folglich ist Speicher 10, wie in Fig. 2 gezeigt, aufgeteilt. Er ist in einen linearen Bereich 10-1 und einen gepufferten Bereich 10-2 geteilt. Teil 41 des linearen Bereiches 10-1 ist zur Speicherung der Mikrocodeanweisungen und Mikrocodedaten bestimmt. Teil 42 des linearen Bereiches 10-1 ist für die Speicherung der Steuerungsblöcke vorgesehen, wie z. B. Warteschlangen-Steuerungsblöcke QCB, Statussteuerungsblöcke und Servicetabellen.
  • Der gepufferte Bereich 102 enthält Puffer und entsprechende Puffersteuerungsblöcke.
  • Um von dem schnellen Seitenadressierungsmodus der dynamischen Datenspeicher-Ausführung profitieren zu können, ist der Speicher in logische Seiten, die eine ganze Anzahl von Puffern enthält, organisiert.
  • Die zu einer gegebenen Nachricht gehörenden Daten werden in einem oder verschiedenen untereinander verketteten Datenpuffern gespeichert. Die Nachrichten wiederum werden miteinander verkettet und in Nachrichtenwarteschlangen eingereiht, welche dadurch dynamisch aufgebaut werden. Jeder Datenpuffer hat einen entsprechenden Puffersteuerungsblock BCB, der in einem Steuerungspuffer untergebracht ist.
  • Fig. 3 zeigt eine Seite i, die m + 1 Puffer enthält, nämlich Puffer 0 bis Puffer m. Der erste Puffer, d. h. Puffer 0, hält Puffersteuerungsblöcke BCB, die den anderen Puffern 1 bis m zugeordnet sind.
  • Die Größe der logischen Seite wird so ausgewählt, daß die Belegung des Steuerungspuffers 0 optimiert wird. Sie kann nie die Größe der physikalischen Seite überschreiten. Um einen Vorteil aus dem schnellen Seitenzugriffsmodus zu gewinnen, der durch die dynamische Speicherimplementierung erzielt wird, muß der Puffersteuerungsblock in derselben physikalischen Seite gespeichert werden wie seine korrespondierenden Datenpuffer. Wenn also Daten und Steuerungsinformation fortlaufend gelesen oder aktualisiert werden, wird die Zugangszeit drastisch vermindert. Die Größe einer physikalischen Seite ist ein festes Kennzeichen des Speichers.
  • In einer typischen Ausführung der vorliegenden Erfindung umfaßt eine logische Seite 512 4-Byte-Wörter, so daß eine logische Seitenadresse einer 512-Wort-Begrenzung entspricht. Eine logische Seite umfaßt sieben Datenpuffer und einen Steuerungspuffer, wobei jeder Puffer 256 Bytes enthält. Der Steuerungspuffer einer gegebenen logischen Seite enthält die Puffersteuerungsblöcke BCB der sieben Datenpuffer dieser logischen Seite. Es gibt eine feste und einfache Beziehung zwischen der Adresse eines Datenpuffers und der Adresse seines entsprechenden BCBs, wie in Fig. 3 gezeigt.
  • Eine Datenpufferadresse umfaßt ein Adreßfeld für die logische Seite, das n-Bits: p0 bis p(n - 1) enthält, um eine gegebene Seite zu adressieren, darüber hinaus ein Adreßfeld für Datenpuffer, das drei Bits b0, b1, und b2 enthält (unter der Annahme, daß die Seite sieben Datenpuffer enthält), sowie ein Wortadreßfeld für Datenpuffer.
  • Die entsprechende Puffersteuerungsblock-BCB-Adresse enthält dasselbe Adreßfeld der logischen Seite, dann drei Steuerungspuffer-Adreßbits, die auf 0 gesetzt sind, und zudem die Bits b0, b1 und b2, welche das entsprechende BCB adressieren, und darüber hinaus eine BCB-Wortadresse, die für den Fall drei Bits enthält, daß ein BCB acht Wörter umfaßt. Die Adresse eines Puffersteuerungsblocks kann also einfach aus der entsprechenden Datenpufferadresse berechnet werden und umgekehrt.
  • In einer anderen Ausführungsform der Erfindung kann der Steuerungspuffer, der die in Steuerungsblöcke BCB von m Datenpuffern enthält, in einem getrennten Speicher für den ersten Zugriff untergebracht werden, vorausgesetzt daß eine einfache Adressenbeziehung zwischen einer Datenpufferadresse und ihrer entsprechenden BCB-Blockadresse besteht.
  • Eine variable Zahl von Datenpuffern wird verkettet, um das Speichern von Nachrichten verschiedener Länge zu ermöglichen und Warteschlangen im gepufferten Bereich 10-2 aufzubauen. Die Pufferverkettung ist schematisch in Fig. 4 gezeigt. Eine Nachricht kann in verschiedenen Datenpuffern enthalten sein. Jeder Puffersteuerungsblock BCB, der einem Datenpuffer zugeordnet ist, enthält die nächste Pufferadresse. In einer typischen Ausführung haben die Puffersteuerungsblöcke eine Speicherkapazität von mindestens zwei Worten, ihr Inhalt ist in Fig. 5 gezeigt. Sie umfassen den Nachrichten-Verkettungssteuerungsblock MCCB, welcher Informationen bezüglich der Nachrichtenverkettung innerhalb einer Warteschlange enthält, und den Puffer-Verkettungssteuerungsblock BCCB, welcher Informationen bezüglich der Pufferverkettung innerhalb einer Nachricht enthält.
  • Der Nachrichten-Verkettungssteuerungsblock MCCB enthält mindestens die Adresse der nächsten Nachricht und der Nachrichten- Byteanzahl.
  • Der Puffer-Verkettungssteuerungsblock BCCB enthält die nächste Pufferadresse und die Puffer-Byteanzahl. Die anderen Felder können, wenn erwünscht, zur Steuerung des Austauschprozesses benutzt werden.
  • Fig. 6 zeigt den Verkettungsmechanismus von drei Nachrichten. Die erste Nachricht wird in einer Vielzahl von Puffern verkettet, drei Puffer 1-1 bis 1-3 sind in Fig. 6 gezeigt. Der Puffer-Verkettungssteuerungsblock des ersten Puffers der Nachricht 1 speichert die Adresse des zweiten Puffers der ersten Nachricht, und der Nachrichten-Verkettungssteuerungsblock des ersten Puffers der ersten Nachricht speichert die Adresse des ersten Puffers 2-1 der Nachricht 2, und der Nachrichten-Verkettungssteuerungsblock des Puffers 2-1 der Nachricht 2 speichert die Adresse des ersten Puffers 1-1 der nächsten Nachricht, welche in diesem besonderen Fall die letzte Nachricht ist. Der Nachrichten-Verkettungssteuerungsblock des ersten Puffers 3-1 der letzten Nachricht enthält in dem nächsten Nachrichtenadreßfeld den hexadezimalen Code "FF", welcher die letzte Nachricht anzeigt.
  • Die Nachrichten-Verkettungssteuerungsblöcke der zweiten und dritten Puffer, die die ersten, zweiten und letzten Nachrichten enthalten, können den hexadezimalen Code "00" oder irgendeinen anderen Wert als nächste Nachrichtenadresse enthalten, da diese Information bedeutungslos ist.
  • Der Warteschlangen-Steuerungsblock der Warteschlange, die diese Nachrichten enthält, umfaßt die Adresse des ersten Puffers 1-1 der ersten Nachricht in ihrem ANFANGS-Feld und die Adresse des ersten Puffers 3-1 der letzten Nachricht in ihrem END-Feld.
  • Wie in Fig. 5 gezeigt, wird der Puffer-Verkettungssteuerungsblock BCCB zusammengesetzt aus einem ersten Wort, das sich mit der Pufferverkettung befaßt, und aus einem zweiten Wort, welches dazu verwendet werden kann, Steuerungsdaten zu speichern, die es, wenn erwünscht, gestatten, während des Austauschs Tests durchzuführen.
  • Das nächste Pufferadreßfeld (zwei Bytes) zeigt die Adresse des nächsten Puffers innerhalb der Nachricht an. Falls der vorliegende Puffer der letzte innerhalb der Nachricht ist, so wird dieses Feld auf FFFF gesetzt. Dieses nächste Pufferadreßfeld bezieht sich auf eine 64-Wortbegrenzung, d. h. es wird rechts mit 000 000 aufgefüllt, um das erste Wort des nächsten Puffers zu adressieren.
  • Das Puffer-Byteanzahlfeld (ein BYTE) kennzeichnet die Anzahl der Bytes im Puffer, beginnend mit Puffer-Byte 0.
  • Das Offset-Feld zeigt an, wo der echte Datenteil im Puffer beginnt. Der Anfangsteil der Nachricht wird, sofern vorhanden, in Nachrichtenadresse 0 im Puffer gespeichert.
  • Der Nachrichten-Verkettungssteuerungsblock MCCB wird in Fig. 5 gezeigt. Das nächste Nachrichtenadreßfeld zeigt die Adresse des ersten Datenpuffers der nächsten Nachricht an. Falls die vorliegende Nachricht die letzte ist, wird das nächste Nachrichtenadreßfeld auf FFFF gesetzt. Die nächste Nachrichtenadresse bezieht sich auf eine 64-Wortbegrenzung, d. h. es wird rechts mit 000 000 aufgefüllt, um das erste Wort des nächsten Puffers der nächsten Nachricht zu adressieren.
  • Das Nachrichten-Byteanzahlfeld zeigt die Gesamtzahl der Bytes in der Nachricht an, einschließlich des Puffer-Offsetwerts (falls vorhanden) des ersten Datenpuffers. Der größtmögliche Wert der Nachrichten-Byteanzahl beträgt 64 Kilobytes.
  • Nachrichtenparameter-/Status-Gültigkeitsbit V bestätigt Nachrichtenparameter/Statusfeld.
  • Nachrichtenparameter/Statusfeld enthält Informationen bezüglich der Nachricht.
  • Im gepufferten Bereich 10-2 des Speichers 10 werden folglich verschiedenartige Warteschlangen in einer Anzahl von Puffern gebildet, die in Abhängigkeit von der erforderlichen Speicherkapazität der Warteschlangen veränderbar ist.
  • Die größtmögliche Anzahl der Warteschlangen, welche von der Anzahl der Benutzer abhängig ist, ist bekannt, und es wird ein Warteschlangen-Steuerungsblock in Teil 42 des linearen Bereichs 10-1 bereitgestellt, welcher jeder Warteschlange zugeordnet ist, deren Puffer im Bereich 1-2 untergebracht sind. Der Warteschlangen-Steuerungsblock speichert die Adresse des Warteschlangen-Anfangs (Adresse des ersten Puffers der Warteschlange) und des Warteschlangen-Endes (Adresse der letzten Nachricht der Warteschlange) und kann darüber hinaus zusätzliche Information, wie weiter unten beschrieben wird, enthalten.
  • Die Warteschlange für freie Puffer FBQ ist die Warteschlange aller der Puffer, welche zu einem gegebenen Zeitpunkt im Speicher verfügbar sind. Die Puffer sind untereinander in derselben Weise, wie vorher beschrieben, mittels der Puffersteuerungsblöcke verkettet, vorausgesetzt, daß jede Nachricht nur einen Puffer umfaßt. In einer bevorzugten Ausführungsform der Erfindung werden die freien Puffer durch die nächste Pufferadresse in ihren MCCB-Blöcken verkettet.
  • Die Warteschlange für freie Puffer, welche einem Warteschlangen- Steuerungsblock für freie Puffer FBQCB zugeordnet ist, wird während der Initialisierung gebildet. Die Warteschlangen werden dann durch eine sogenannte globale Befehlsmaschine aufgebaut, welche unter Bezugnahme auf Fig. 9 beschrieben wird.
  • Diese Maschine führt auf Anforderung der Benutzer, zum Beispiel Kommunikationsadapter oder Mikrocodeadapter, die folgenden Befehle aus:
  • ENQUEUE: dieser Befehl führt die Einreihung einer Nachricht in eine Datenspeicherwarteschlange durch,
  • DEQUEUE: dieser Befehl führt das Herausnehmen einer Nachricht aus einer Datenspeicherwarteschlange durch und gibt an den Anforderer die Adresse der Nachricht zurück,
  • LEASE: dieser Befehl gibt sofort an einen Anforderer die Adresse eines freien Puffers, der vorher aus der Warteschlange für freie Puffer herausgenommen wurde, zurück,
  • DEQ-FREE: dieser Befehl führt das Herausnehmen eines Puffers aus einer Warteschlange für freie Puffer aus und gibt seine Adresse an den Anforderer zurück,
  • RELEASE: dieser Befehl gibt alle Puffer, die zu einer Nachricht gehören, durch das Einreihen in die Warteschlange für freie Puffer, frei.
  • Ein freier Puffer wird durch eine freie Puffer liefernde Maschine durch Ausgabe eines globalen DEQ-FREE-Befehls aus der Warteschlange herausgenommen. Seine Adresse wird dann in einem Speicher mit wahlfreiem Zugriff gespeichert, der imstande ist, eine Anzahl von Adressen freier Puffer, wie z. B. 256, zu halten, und zwar in einer Weise, daß ein Puffer sofort für einen Anforderer durch einen globalen LEASE-Befehl verfügbar ist.
  • In einer bevorzugten Ausführungsform kann die Warteschlange für freie Puffer bis zu 64 K freie Puffer halten, d. h. bis zu 16 Megabytes gepufferte Daten. Die Verwaltung der Warteschlangen für freie Puffer stellt zwei Kapazitätsschwellen bereit (Puffergrenzschwelle und kritische Pufferschwelle). Im letzten Fall werden globale LEASE-Befehle nur für den beschleunigten Durchfluß akzeptiert.
  • Es gibt zwei Typen von Warteschlangen, die im Bereich 10-2 aufgebaut werden können, nämlich die normalerweise durch die globale Befehle gehandhabten Warteschlangen, die sogenannten Nachrichtenwarteschlangen, d. h. Mikrocode-Eingangswarteschlangen MIQ und Verbindungs-Ausgangswarteschlangen LOQ, und die Verbindungseingangs-Warteschlangen LIQ, welche zur Pufferung der eingehenden Nachrichten aufgebaut werden.
  • Die Warteschlangen werden durch ihren Warteschlangen-Steuerungsblock QCBS identifiziert, der aus vier Wörtern zusammengesetzt und im linearen Bereich 10-1 untergebracht ist. Die globalen Befehle verwenden einen QCB-Identifikator QCB_id, um einen von diesen QCBs auszuwählen. Die QCB-Adresse wird wie folgt berechnet:
  • - der QCB_id wird rechts mit 00 aufgefüllt, um sich auf eine 4- Wortbegrenzung zu beziehen.
  • - eine sich ebenso auf eine 4-Wortbegrenzung beziehende QCB-Basisadresse wird während der Initialisierung gesetzt.
  • Fig. 7 zeigt beispielhaft das QCB_id-Format und die Formate der Warteschlangen-Steuerungsblöcke.
  • Die ersten Bits 0 und 1 sind kennzeichnend für den Warteschlangentyp:
  • - 00 zeigt eine Ausgangswarteschlange einer Eingangswarteschlangen-Gruppe an (Bit 0 = 0),
  • - 01 ==> eine Mikrocode-Eingangswarteschlange,
  • - 11 ==> eine Verbindungseingangs-Warteschlange,
  • - Bits 2 bis 5 wählen eine von 16 Warteschlangengruppen aus.
  • Jeder der 16 Mikrocode-Warteschlangengruppen entspricht eine Servicetabelle, die ein Bit pro Warteschlange in der Gruppe hält, um anzuzeigen, ob diese Warteschlange aktiv geworden ist, und die es gestattet, den Mikroprozessor zu unterbrechen, wenn eine erste Warteschlange in der Gruppe aktiv geworden ist.
  • Die QCB_id-Bits 5 bis 12 bestimmen eine von 128 Warteschlangen innerhalb einer gegebenen Gruppe.
  • Die QCB_id werden den Warteschlangenbenutzern bei der Initialisierung zugewiesen.
  • Das Format des Nachrichten-Warteschlangen-Steuerungsblocks QCB, der in Fig. 7 gezeigt ist, ist das folgende:
  • - WARTESCHLANGEN-ANFANGS-Feld: Adresse des ersten Puffers der ersten Nachricht in der Warteschlange,
  • WARTESCHLANGEN-END-Feld: Adresse des ersten Puffers der letzten Nachricht in der Warteschlange,
  • - WARTESCHLANGEN-PUFFERANZAHL: Gesamtzahl der Puffer, die die Nachricht in der Warteschlange bilden,
  • - WARTESCHLANGENSTATUS: enthält verschiedene Indikatoren, nämlich
  • Warteschlange leer
  • Warteschlangenschwelle erreicht
  • größtmögliche Anzahl erreicht
  • gültiges Aktionsfeld
  • - PUFFERSCHWELLE: wenn ein globaler ENQ-Befehl ausgeführt wird, wird "Warteschlangen-Schwellenindikator" im WARTESCHLANGENSTA- TUS-Feld gesetzt und ebenso als ENQ-Rückgabecode zurückgegeben, so lange die PUFFERANZAHL größer als die PUFFERSCHWELLE ist;
  • - MAXIMALE PUFFERANZAHL: wenn ein ENQ ausgeführt wird, wird die neue Pufferanzahl mit der MAXIMALEN PUFFERANZAHL verglichen; wenn dieser Wert überschritten ist, wird der ENQ-Befehl verworfen, die PUFFERANZAHL wird unverändert erhalten, der Indikator "maximaler Pufferanzahl erreicht" wird im Statusfeld gesetzt und ebenfalls als ENQ-Rückgabecode zurückgegeben,
  • - AKTION: enthält die Stationsservice-Aktivierungsnachricht, die zu senden ist, wenn eine Ausgangswarteschlange aktiv geworden ist, AKTION wird durch den STATUS-Indikator "gültiges Aktionsfeld" bestätigt.
  • Das Format des in Fig. 7 gezeigten Warteschlangen-Steuerungsblocks für freie Puffer FQCB ist das folgende:
  • - WARTESCHLANGEN-ANFANG: Adresse des ersten Puffers der ersten Nachricht in der Warteschlange,
  • - WARTESCHLANGEN-ENDE: Adresse des ersten Puffers der letzten Nachricht in der Warteschlange,
  • - WARTESCHLANGEN-PUFFERANZAHL: Gesamtzahl der Puffer in der Warteschlange für freie Puffer,
  • - WARTESCHLANGENSTATUS: enthält verschiedenartige Indikatoren, nämlich
  • FBQ (Warteschlange für freie Puffer) leer
  • Puffergrenzschwelle erreicht
  • kritische Pufferschwelle erreicht
  • gültiges Aktionsfeld
  • - PUFFERGRENZSCHWELLE: wenn ein globaler DEQ_frei/FREE-Befehl durch die Maschine, die freie Puffer zur Verfügung stellt, ausgeführt wird, wird der Indikator "Puffergrenzschwelle erreicht" im WARTESCHLANGENSTATUS-Feld gesetzt und als DEQ_ FREE-Rückgabecode so lange zurückgegeben, wie die PUFFERANZAHL niedriger ist als (PUFFERGRENZSCHWELLE),
  • - KRITISCHE PUFFERSCHWELLE: wenn ein globaler DEQ_FREE-Befehl durch die Maschine, die freie Puffer zur Verfügung stellt, ausgeführt wird, wird der Indikator "kritische Pufferschwelle erreicht" im Statusfeld gesetzt und als DEQ_FREE-Rückgabecode so lange zurückgegeben, wie die PUFFERANZAHL niedriger ist als (KRITISCHE PUFFERSCHWELLE),
  • - AKTION: enthält das Ereignis, das im Falle einer kritischen Situation (in einer vorherbestimmten Warteschlange) gesendet werden muß, AKTION wird durch den STATUS-Indikator "gültiges Aktionsfeld" bestätigt.
  • Für jede der 16 Eingangswarteschlangen-Gruppen, besteht in dem linearen Bereich 1 des Datenspeichers eine Servicetabelle, die den Aktivitätsstatus jeder der 128 Warteschlangen in der Gruppe verzeichnet. Die 16 Servicetabellen sind in 64 aufeinanderfolgenden Wörtern untergebracht (4 pro Servicetabelle), die bei einer Basisadresse einer Servicetabelle starten, welche bei der Initialisierung bereitgestellt wird und sich auf eine 64-Wortbegrenzung beziehen muß.
  • Die Handhabung der Servicetabellen ist wie folgt:
  • - wenn eine erste ENQ auf einer gegebenen Mikrocode-Eingangswarteschlange einer gegebenen Gruppe ausgeführt wird, was bedeutet, daß diese Warteschlange nicht leer wird, so wird das entsprechende Bit in der Servicetabelle dieser Gruppe gesetzt,
  • - wenn eine letzte Nachricht aus einer gegebenen Mikrocode-Eingangswarteschlange einer gegebenen Gruppe herausgenommen worden ist, was bedeutet, daß diese Warteschlange leer wird, so wird das entsprechende Bit in der Servicetabelle dieser Gruppe zurückgesetzt,
  • - wenn eine erste Warteschlange in einer gegebenen Gruppe aktiv wird, d. h. die Servicetabelle dieser Gruppe enthält nicht mehr nur Nullen, so wird ein Signal an eine Unterbrechungssteuerung gesendet, um eine Unterbrechung zum Mikroprozessor zu aktivieren, und die Unterberechnungsanforderung bezüglich dieser Servicetabelle zu überbringen.
  • Fig. 8 zeigt die allgemeine Anordnung einer Schnittstelle 22, der zentralen Steuerung DCS 26 und der Prozessor-Schnittstelle 30. Sie sind durch die Multiplexerschaltkreise 80, 82 und 84 an Bus 24 angeschlossen, was es gestattet, logische Bauelemente auf den Bus zu geben, oder vom Bus durch eine ausgewählte Vorrichtung 22, 26 oder 30 unter Steuerung des Entscheidungsmittels 28 zu empfangen. Die Zugänge zu dem gemeinsam genutzten Speicher 10 werden durch die Speichersteuerung 11 in üblicher Weise gesteuert.
  • Schnittstelle 22 umfaßt ein Datenverschiebe-Steuerungsmittel 86, welches die Verkettung der Datennachrichten, die durch die an Adapter 14 angeschlossenen Benutzer empfangen werden, das Einreihen in die LIQ-Warteschlangen, sowie das Senden der aus den Verbindungs-Ausgangswarteschlangen herausgenommenen Datennachrichten an die Zielbenutzer durchführt.
  • Sie enthält darüber hinaus ein Stationsservicemittel 88, welches mit dem Datenverschiebemittel 86 zusammenarbeitet, und eine Schnittstelle mit der globalen Befehlsmaschine G.O.M. 90 in der Zentralsteuerung 26 aufweist, sowie eine Anforderungstabelle 89, welche Informationen bezüglich des Verbindungs-Eingangs- und - Ausgangswarteschlangen-Status zur Steuerung der Datenübertragung enthält, wie später mit Bezug auf Fig. 26 erklärt wird.
  • Das zentrale Steuerungssystem DCS 26 enthält die globale Befehlsmaschine 90, welche von Bus 24 globale Befehle von den anfordernden Schnittstellen 22 oder 30 empfängt, diese Befehle bearbeitet und Antworten erzeugt, die zu der globalen Befehlsanforderungsschnittstelle zu senden sind. Die Arbeitsvorgänge, die für jeden globalen Befehl ausgeführt werden, werden später ausführlich dargestellt. Es enthält zudem eine Maschine für die Lieferung freier Puffer FBS 92, welche über Multiplexer 82 und Bus 24 globale DEQ_FREE-Befehle an die globale Befehlsmaschine GOM 90 ausgibt. Die Adresse eines freien Puffers, welcher aus der Warteschlange für freie Puffer herausgenommen wird, wird in einem Speicher mit wahlfreiem Zugriff, gemieteter Pufferpool genannt, gespeichert, der eine Vielzahl von Adressen gemieteter Puffer aufnehmen kann. Durch einen globalen LEASE-Befehl kann an jeden beliebigen Anforderer eine Adresse gegeben werden. Die freien Puffer werden folglich sehr schnell unter Vermeidung von Überlastbedingungen an die Anforderer ausgegeben
  • Die globale Befehlsmaschine 90 bedient die folgenden Anforderer mit folgendem Prioritätsrang:
  • 1 - Zulieferer für freie Puffer
  • 2 - Adapter-Schnittstelle (Datenverschiebe-Empfangs/stationsdienste)
  • 3 - Mikroprozessor
  • von denen jeder einen Identifikationscode hat. Zum Beispiel 000 für Mikroprozessor, 100 für Stationsservice und 010 für Zulieferer für freie Puffer 92. Da jeder Adapter 22 einen Stationsservice umfaßt, wird eine festverdrahtete Kennung zu dem Identifikationscode 100 jedes Stationsservice hinzugefügt.
  • Um seine globale Befehlsanfrage an die globale Befehlsmaschine übertragen zu können, aktiviert ein Anforderer eine globale Befehlsanforderung an Entscheidungsmittel 28. Falls keine andere Busanforderung mit höherer Priorität anhängig ist, sendet Entscheidungsmittel 28 ein globales Befehlserteilungssignal an den Anforderer und zur globalen Befehlsmaschine 90 (globales Befehlsfreigabesignal G.O.).
  • Das allgemeine Format der durch einen Anforderer gesendeten globalen Befehlsanforderungen und der durch die globale Befehlsmaschine 90 an den Anforderer gesendeten globalen Befehlsantworten wird unten beschrieben.
  • Das allgemeine globale Befehlsanforderung-/Antwortformat GO steht für globalen Befehl ("global order"). Das Format wird in Fig. 9 gezeigt.
  • Adressen-Byte 1:
  • - Bit 0: auf 1 gesetzt Speicherzugriffsmodus
  • - Bit 1: auf 1 gesetzt (globaler Befehl)
  • - Bits 2-3-4: Globale Befehlsanforderung/Antwort Zielkennung DST
  • - Bits 5-6-7: Globale Befehlsanforderung/Antwort Ursprungskennung ORG
  • Das Ursprungs-/Zielfeld identifiziert einen der folgenden Teile:
  • - 000 Prozessor
  • - 001 GOM 90
  • - 010 FBS 92
  • - 100 Adapter-Schnittstelle
  • Adressen-Byte 2:
  • Bits 0 bis 3 spezifizieren den globalen Befehlstyp
  • - 0000 ENQ
  • - 0010 DEQ
  • - 0011 LEASE
  • - 0100 DEQ-FREE
  • - 0101 REL
  • Andere Felder
  • Sie sind vom globalen Befehlstyp, wie unten beschrieben, abhängig.
  • Eine globale ENQ-Befehlsanforderung enthält die Adresse der in die Warteschlange einzureihenden Nachricht MSG_ADD (d. h. die Adresse des ersten Puffers der Nachricht) in den GO-abhängigen Datenbytes 2' und 3 sowie die Identifikation: QCB-id der Warteschlange, in welche diese einzureihen ist in den GO-abhängigen Datenbytes 2 und 3.
  • Die ENQ-Antwort enthält einen Rückgabecode des Warteschlangenstatus in den Datenbytes 0 und 1. Bei den Rückgabecodes handelt es sich um die folgenden:
  • - Warteschlange leer
  • - Warteschlangenschwelle erreicht
  • - Anforderung verworfen
  • Eine globale DEQ- (Herausnehmen aus der Warteschlange) Befehlsanforderung enthält die Kennzeichnung der Warteschlange QCB-id, aus welcher eine Nachricht herauszunehmen ist, in den GO-abhängigen Adressenbytes 2 und 3.
  • Die DEQ-Antwort enthält in den Datenbytes 0 und 1 einen Rückgabecode sowie die Adresse der Nachricht: MSG_ADD, welche aus der Warteschlange herauszunehmen ist.
  • Es gibt folgende Rückgabecodes:
  • - Warteschlange leer
  • - Warteschlangenschwelle erreicht
  • - Anforderung verworfen
  • Ein globaler LEASE-Befehl weist die Besonderheit auf, daß er nicht die globale Befehlsmaschine 90, sondern den Zulieferer für freie Puffer 92 impliziert.
  • Er besteht aus einer Leseoperation des Zulieferregisters für freie Puffer, welches die Adresse eines gemieteten, für einen Anforderer bereitgestellten Speichers hält.
  • Diese Leseoperation kann veranlaßt werden, sobald Entscheidungsmittel 28 eine Buszuweisung an einen Anforderer vorgenommen hat.
  • Das GO-abhängige Adressenbyte 3 enthält ein "beschleunigter Durchfluß" genanntes Bit, um auch dann eine Pufferadresse zu erhalten, wenn die Warteschlange für freie Puffer ihre kritische Pufferschwelle erreicht hat.
  • Die zurückgegebenen Daten bestehen aus einem Rückgabecode und der vom Zulieferer für freie Puffer 92 gegebenen Adresse des gemieteten Puffers.
  • Der Rückgabecode beinhaltet:
  • - Puffergrenzschwelle erreicht
  • - Anforderung verworfen
  • - gemieteter Pufferpool leer
  • Ein globaler DEQ_FREE- (bereit zum Herausnehmen aus der Warteschlange) Befehl wird von dem Zulieferer für freie Puffer verwendet, um den gemieteten Pufferpool aufzufüllen.
  • Die DEQ_FREE-Anforderung enthält lediglich den globalen DEQ_FREE-Befehlstyp, und die DEQ_FREE-Antwort enthält einen Rückgabecode sowie die Adresse des Puffers, welcher aus der Warteschlange für freie Puffer herausgenommen wurde.
  • Der Rückgabecode beinhaltet das folgende:
  • - Puffergrenzschwelle erreicht
  • - kritische Pufferschwelle erreicht
  • - Anforderung verworfen
  • Eine globale REL- (Freigabe) Befehlsanforderung enthält in den Datenbytes 2 und 3 die Adresse der Nachricht MSG_ADD.
  • Die Antwort enthält einen Rückgabecode in den Datenbytes 0 und 1.
  • Der Rückgabecode beinhaltet das folgende:
  • - Puffergrenzschwelle erreicht
  • - kritische Pufferschwelle erreicht
  • - Anforderung verworfen
  • Die globale Befehlsmaschine 90 umfaßt Eingangs-/Ausgangs- und Arbeitsregister 100 zum Speichern der Adresse und von Datenbytes, die von Bus 24 gemäß der Anforderungs- und Antwortformate der globalen Befehle, welche oben beschrieben wurden, entweder empfangen werden oder zu senden sind. Sie werden, wenn erforderlich, während der Ausführung des globalen Befehls auch zur Speicherung der Information verwendet.
  • Logik 102 ist die Steuerungsschnittstelle zwischen Register 100 und dem endlichen Automat 104, der die die globalen Befehle implementierenden logischen Abläufe ausführt.
  • Die Abläufe, die durch die globale Befehlsmaschine implementiert werden, werden nun beschrieben.
  • Insoweit als Entscheidungsmittel 28 auf eine globale Befehlsanforderung eines Benutzers durch einen globalen Buszuteilungsbefehl, welche das GO-Aktivierungssignal auf Leitung 106 ist, antwortet, wird die globale Befehlsanforderung auf Bus 24 gesendet. Die GO-Anforderung wird durch den anfordernden Benutzer aktiv gehalten, bis er die globale Befehlsantwort von Maschine 90 erhalten hat.
  • Da eine GO-Buszuteilung jederzeit durch Bus-Entscheidungsmittel 28 fallengelassen werden kann, während ein globaler Befehl ausgeführt wird, überprüft die globale Befehlsmaschine, daß die GO- Freigabeleitung 106 immer aktiv ist, wenn sie auf Datenspeicherbus 24 zugreifen muß. Wenn GO-Freigabe nicht aktiv ist, wird der Buszugang verzögert, bis GO-Freigabe aktiv wird.
  • Das Flußdiagramm der Warteschlangen-Einreihungsoperation wird in den Fig. 10A und 10B gezeigt.
  • Zuerst (Schritt 110) wird die von Bus 24 empfangene und in Registern 100 eingegebene ENQ-Anforderung durch die logische Steuerung 102 decodiert, um den Einreihungsprozeß in dem endlichen Automaten 102 einzuleiten. Die Einreihungsanforderung wird in Registern 100 gespeichert.
  • Die zweite Operation (Schritt 111) besteht aus dem Berechnen der Adresse des Nachrichten-Puffersteuerungsblocks (BCB) aus der Nachrichtenadresse, welche, wie mit Bezug auf Fig. 3 erklärt, die Adresse des ersten Puffers der einzureihenden Nachricht enthält.
  • Die beiden Wörter MCCB und BCCB dieses BCB-Blocks werden gelesen und gespeichert. Diese Wörter enthalten die in einer weiteren Operation zu verwendende Nachrichtenbyteanzahl.
  • Auch wird die Adresse der Warteschlange QCB_ADD aus der Kennzeichnung QCB_id der Warteschlange erzeugt, in welche die Nachricht einzureihen ist.
  • Dann (Schritt 112) wird der QCB-Block gelesen und gespeichert, er enthält die Pufferanzahl der Warteschlange, in welche die neue Nachricht einzureihen ist.
  • In Schritt 113 wird die Pufferanzahl QCB der einzureihenden Nachricht berechnet, sie entspricht der Byteanzahl des MCCB, dividiert durch den Pufferinhalt, (d. h. 256 Bytes in der bevorzugten Ausführungsform). Diese Zahl wird zu der aus QCB ausgelesenen Warteschlangen-Pufferanzahl addiert, um die neue Pufferanzahl zu erhalten.
  • In Schritt 114 wird diese Anzahl mit der maximalen Pufferanzahl verglichen.
  • Falls sie niedriger festgestellt wird, wird sie mit der Pufferschwelle verglichen (Schritt 115).
  • Falls sie höher als die Pufferschwelle vorgefunden wird, wird der Schwellenindikator im STATUS-Feld des QCB gesetzt und der Rückgabecode wird vorbereitet (Schritt 116).
  • Wenn nicht, wird der Schwellenindikator im STATUS-Feld des QCB zurückgesetzt und der Rückgabecode wird vorbereitet (Schritt 117).
  • Die in Fig. 10-A gezeigten Schritte 110 bis 117 werden zum Holen und zur Kontrolle der Steuerungsblöcke ausgeführt.
  • Dann wird der Warteschlangen-Einreihungsprozeß, wie in Fig. 10- B gezeigt, ausgeführt.
  • Zuerst bestimmt der endliche Automat 104 aus dem in Schritt 112 gespeicherten QCB-STATUS-Feld, ob die Warteschlange leer war oder nicht (Schritt 120).
  • Wenn sie leer ist, wird der neue QCB dieser Warteschlange vorbereitet, um in den Speicher bei der QCB-Adresse eingeschrieben zu werden (Schritt 121).
  • Die Nachrichtenadresse MSG_ADD muß in die ANFANGS- und END-Felder eingeschrieben werden, das STATUS-Feld muß mit der Information: Warteschlange nicht leer beschrieben werden, und die Warteschlangen-Pufferanzahl ist mit der neuen in Schritt 113 berechneten Pufferanzahl QBC zu beschreiben.
  • In Schritt 122 wird QCB_id überprüft, um festzustellen, ob der Warteschlangen-Einreihungsprozeß mit einer Mikrocode-Eingangswarteschlange durchgeführt wird.
  • Wenn ja, wird die Adresse der Servicetabelle vorbereitet, und die Servicetabelle wird aktualisiert (Schritt 123).
  • Eine Unterbrechung zum Mikroprozessor (Schritt 124) wird aktiviert, um zu signalisieren, daß eine Mikrocode-Eingangswarteschlange nicht leer ist. Der Mikroprozessor kann folglich einen Warteschlangen-Herausnahmeprozeß veranlassen, um die Nachricht in diese Warteschlange einzureihen, die Nachricht zu bearbeiten (Wegewahl, Pfadsteuerung) und die Nachricht in die Ziel-Ausgangswarteschlange einzureihen. Diese Operation ist lediglich erforderlich, wenn die Nachrichten durch den Mikrocode zu bearbeiten sind. In diesem Fall erhält der Mikroprozessor die Nachrichten durch Senden eines globalen Warteschlangen-Herausnahmebefehls an Maschine 90, welcher so gehandhabt wird, wie mit Bezug auf die Fig. 11 A und 11 B beschrieben. Der Mikroprozessor kann die Nachrichten bearbeiten (Wegwahl-Flußsteuerung) und sie dann in die Verbindungs-Ausgangswarteschlange durch Senden eines globalen Warteschlangen-Einreihungsbefehls einreihen. Die Nachrichten werden dann von der Verbindungs-Ausgangswarteschlange an den Zielbenutzer gesendet.
  • Dann wird der Rückgabecode vorbereitet und die Warteschlangen- Einreihungsantwort auf Bus 24 gesendet.
  • Wenn die Warteschlange keine Mikrocode-Eingangswarteschlange ist, wird das Stationsservicemittel 88 der Adapter-Schnittstelle aktiviert (Schritt 126), der damit weiß, daß eine Verbindungs- Ausgangswarteschlange für einen Benutzer, der mit dem Adapter verbunden ist, zu übertragende Nachrichten enthält, oder daß eine Verbindungseingangs-Warteschlange gelesen wird, um dann so, wie bezüglich Fig. 26 noch zu beschreiben ist, bearbeitet zu werden.
  • Wenn festgestellt wird, daß die Warteschlange nicht leer ist (Schritt 120), wird die Adresse des Puffersteuerungsblocks des Endes der Nachrichtenwarteschlange aus dem Endfeld des Warteschlangen-Steuerungsblocks erzeugt.
  • Der Puffersteuerungsblock wird gelesen, und sein Inhalt wird gespeichert (Schritt 127).
  • Die nächste Nachrichtenadresse, die in den Puffersteuerungsblock (MCCB) einzuschreiben ist, welcher der Nachrichtenadresse entspricht, wird vorbereitet und in MCCB eingeschrieben (Schritt 128).
  • Der neue Warteschlangen-Steuerungsblock wird vorbereitet (Schritt 129).
  • Das Endfeld ist gleich der Nachrichtenadresse, QBC ist gleich der neuen in Schritt 113 berechneten QBC, der Warteschlangenstatus ist: "nicht leer". Der neue Warteschlangen-Steuerungsblock wird eingeschrieben.
  • Während des letzten Schrittes des Warteschlangen-Einreihungsprozesses (Schritt 130), welcher den Schritten 124, 126, 129 oder Schritt 114 folgt, wird der Rückgabecode vorbereitet und die ENQ-Antwort auf Bus 24 durch die Ausgangsregister 100 gesendet.
  • Es werden nun mit Bezug auf die Fig. 11-A und 11-B die Operationen beschrieben, welche durch die globale Befehlsmaschine 90 ausgeführt werden, um einen Warteschlangen-Herausnahmeprozeß zu implementieren.
  • Die DEQ-Anforderung wird von Bus 24 empfangen. Die Anforderung enthält die Kennzeichnung QCB_id der Warteschlange, aus welcher die Nachricht herauszunehmen ist.
  • Die Anforderungsadresse und die Datenfelder werden in einem der Eingangsregister 100 (Schritt 140) gespeichert. Die QCB-Adresse wird aus QCB_id (Schritt 141) erzeugt.
  • Der QCB-Block wird gelesen (Schritt 142) und sein Inhalt wird in den Registern 100 gespeichert. Dieser Block enthält die Adresse des ersten Puffers der Warteschlange.
  • Die Adresse des BCB-Blocks dieses ersten Puffers wird erzeugt, und der BCB-Block wird gelesen. Die MCCB- und BCCB-Information wird gespeichert (Schritt 143).
  • Die Nachrichtenpufferanzahl wird berechnet (Schritt 144). Sie ist gleich der aus MCCB gelesenen und durch die Pufferanzahl dividierten Nachrichtenbyteanzahl, welche in einer bevorzugten Ausführungsform gleich 256 ist.
  • Die neue Pufferanzahl wird berechnet, sie ist gleich der alten QBC, die in dem Warteschlangen-Steuerungsblock enthalten ist, minus der Nachrichtenpufferanzahl.
  • Die neue Warteschlangen-Pufferanzahl wird mit der Pufferschwelle (Schwelle 145) verglichen, wenn gefunden wird, daß diese höher als diese Schwelle ist (Schritt 146), wird der Schwellenindikator für den Warteschlangenstatus gesetzt, und der Rückgabecode wird vorbereitet.
  • Wenn gefunden wird, daß diese niedriger als die Schwelle ist (147), wird der Schwellenindikator zurückgesetzt, und der Rückgabecode wird vorbereitet.
  • Dann wird die Herausnahme aus der Warteschlange ausgeführt (Figur 11-B).
  • Das Antwortdatenfeld wird vorbereitet (Schritt 150), die zurückzugebende Nachrichtenadresse ist die Adresse des ersten Puffers der Warteschlange, die in dem Anfangsfeld des Warteschlangen- Steuerungsblocks enthalten ist.
  • Das ANFANGS-Feld des QCB wird mit dem END-Feld verglichen.
  • Wenn sie gleich vorgefunden werden, was bedeutet, daß die Warteschlange leer ist, werden Warteschlangenstatus und Rückgabecode gleich "Warteschlange leer" vorbereitet (Schritt 152).
  • Die neue Warteschlangen-Pufferanzahl = 0 wird in den Warteschlangen-Steuerungsblock eingeschrieben (Schritt 153).
  • In Schritt 154 wird dann das in Schritt 140 überprüfte QCB_id gespeichert, um festzulegen, ob die Warteschlange eine Mikrocode-Eingangswarteschlange ist.
  • Wenn ja, wird für diese Warteschlangengruppe die Servicetabellenadresse vorbereitet, und die Servicetabelle wird aktualisiert (Schritt 156).
  • Wenn nein, werden die Statusbits in Anforderungstabelle 89 zurückgesetzt (Schritt 156). Dann wird nach Schritt 155 oder 156 der Rückgabecode vorbereitet, und die Warteschlangen-Herausnahmeantwort wird auf Bus 24 durch eines der Ausgangsregister 100 gesendet (Schritt 157).
  • Der Erzeuger der Anforderung empfängt die Adresse der Nachricht, welche aus der Warteschlange herausgenommen ist, und kann die Nachrichten bearbeiten.
  • Wenn in Schritt 151 festgestellt wurden, daß die ANFANGS-Adresse sich von der END-Adresse in dem Warteschlangen-Steuerungsblock unterscheidet, dann wird die ANFANGS-Adresse des Warteschlangen- Steuerungsblocks, die der nächsten in Schritt 143 gespeicherten Nachricht entspricht, vorbereitet (Schritt 158), um in den Warteschlangen-Steuerungsblock gemeinsam mit dem neuen Warteschlangen-Steuerungsblock eingeschrieben zu werden (Schritt 159).
  • Dann wird die DEQ-Antwort auf Bus 24 gesendet (Schritt 157).
  • Der Prozeß, der zur Herausnahme eines Puffer aus einer Warteschlange für freie Puffer ausgeführt wird, ist in den Fig. 12-A und 12-B beschrieben. Der DEQ_FREE-Urheber des globalen Befehls ist die Maschine für die Lieferung freier Puffer 99.
  • Der DEQ_FREE-Befehl wird durch die globale Befehlsmaschine von Bus 24 empfangen (Schritt 160).
  • Die Adresse des Warteschlangen-Steuerungsblocks für freie Puffer ist dann die Adresse des Warteschlangen-Steuerungsblocks für freie Puffer. Der QCB wird gelesen und gespeichert (Schritt 161).
  • Die Adresse des Puffersteuerungsblocks des ersten Puffers wird von dem ANFANGS-Feld von QCB erzeugt. BCB wird gelesen und MCCB und BCCB werden gespeichert (Schritt 162).
  • Die neue Warteschlangen-Pufferanzahl, welche der alten Warteschlangen-Pufferanzahl in QCB minus 1 entspricht, wird berechnet (Schritt 163).
  • Die neue QBC wird mit der in QCB gesetzten Puffergrenzschwelle verglichen und in Schritt 161 gespeichert, Schritt 164.
  • Ist dieses niedriger, wird der Grenzschwellenindikator für den Warteschlangenstatus und den Rückgabecode zurückgesetzt (Schritt 165).
  • Ist es höher, wird der Grenzschwellenindikator für den Warteschlangenstatus und den Rückgabecode gesetzt (Schritt 166).
  • Die neue QBC wird mit der kritischen Schwelle verglichen (Schritt 167). Wenn er niedriger ist als diese Schwelle, wird der kritische Schwellenindikator für den Warteschlangenstatus und den Rückgabecode zurückgesetzt (Schritt 168). Ist er höher, so werden der kritische Schwellenindikator für den Warteschlangenstatus und den Rückgabecode gesetzt (Schritt 169).
  • Dann findet der Warteschlangen-Herausnahmeprozeß, wie in Fig. 12-B gezeigt, statt.
  • Das Antwortdatenfeld wird vorbereitet (Schritt 170), es entspricht dem in Schritt 161 gespeicherten ANFANGS-Feld.
  • Die Warteschlangen-Pufferanzahl, welche der neuen QBC entspricht, wird vorbereitet, das neue ANFANGS-Feld der QBC, die der nächsten in Schritt 162 gespeicherten Nachrichtenadresse entspricht, wird vorbereitet, und QCB wird beschrieben (Schritt 171).
  • Der Rückgabecode wird vorbereitet und die DEQ_FREE-Antwort wird auf Bus 24 gesendet (Schritt 172).
  • Die Maschine für freie Puffer 92 erhält also die Adresse eines freien Puffers, welcher, wie später erklärt werden wird, dem gemieteten Pool hinzugefügt wird.
  • Nun wird mit Bezug auf die Fig. 13-A, 13-B und 13-C der Freigabeprozeß beschrieben, welcher es gestattet, Puffer in die Warteschlange für freie Puffer einzureihen, wenn ihre Nachrichteninhalte erfolgreich zu den Zielbenutzern übertragen worden sind.
  • In der Warteschlange für freie Puffer werden die Puffer dank der nächsten in dem MCCB enthaltenen Nachrichtenadresse untereinander verkettet, und die Nachrichten werden so betrachtet, als wären sie nur in einem Puffer enthalten, so daß die nächste Pufferadresse in BCCB immer FFFF entspricht.
  • Die ersten in Fig. 13-A gezeigten Operationen bereiten den Freigabeprozeß vor.
  • Die FREIGABE-Anforderung wird von Bus 24 empfangen, Schritt 180.
  • Sie enthält die Adresse der freizugebenden Nachricht.
  • Die Nachricht kann in nur einem Puffer oder in verschiedenen untereinander verketteten Puffern enthalten sein.
  • Die Puffersteuerungsblock-BCB-Adresse des ersten Puffers der Nachricht wird aus der Nachrichtenadresse erzeugt. Die MCCB- und BCCB-Information wird gelesen. Die Warteschlangen-Steuerungsblockadresse QCB_ADD wird erzeugt, sie ist gleich der Warteschlangen-Adresse für freie Puffer. Der QCB-Inhalt wird gelesen und gespeichert (Schritt 181).
  • Die neue Warteschlangen-Pufferanzahl, neue QBC, wird berechnet, sie ist gleich der alten Pufferanzahl, die in dem in Schritt 181 gespeicherten QCB-Block enthalten ist, plus dem Nachrichtenpufferanzahl. Die Nachrichtenpufferanzahl ist gleich der Nachrichtenbyteanzahl/256 (Schritt 182).
  • Die neue QBC wird mit der Puffergrenzschwelle, die in der in Schritt 181 gespeicherten QBC enthalten ist, verglichen (Schritt 183).
  • Wird es niedriger festgestellt, wird der Grenzschwellenindikator für den Warteschlangenstatus und der Rückgabecode gesetzt (Schritt 184).
  • Wenn es für höher befunden wird, wird der Grenzschwellenindikator für den Warteschlangenstatus und der Rückgabecode zurückgesetzt (Schritt 185).
  • Die neue QBC wird ebenso mit der kritischen Pufferschwelle verglichen (Schritt 186). Wenn sie für niedriger befunden wird, wird der kritische Schwellenindikator für den Warteschlangenstatus und der Rückgabecode gesetzt (Schritt 187). Wird sie für höher befunden, wird der kritische Schwellenindikator für den Warteschlangenstatus und der Rückgabecode zurückgesetzt (Schritt 188).
  • Dann werden die Nachrichtenpuffer, wie in Fig. 13-B gezeigt, überprüft und markiert.
  • Ein Zähler "aktuelle Pufferadresse" CBA wird auf den Nachrichtenadressen-Anfangswert gesetzt (Schritt 189).
  • Die nächste Nachrichtenadresse, die gleich der nächsten von BCCB in Schritt 181 gespeicherten Pufferadresse ist, wird vorbereitet (Schritt 190).
  • Die nächste Pufferadresse wird getestet (Schritt 191).
  • Wenn gefunden wird, daß sie gleich FFFF ist, was bedeutet, daß der Puffer der letzte Nachrichtenpuffer ist, wird die nächste FFFF entsprechende Pufferadresse vorbereitet, und die FFFF entsprechenden MCCB und BCCB werden beschrieben (Schritt 192).
  • Falls nicht, wird die nächste FFFF entsprechende Pufferadresse vorbereitet, der CBA-Zähler wird auf die nächste, in Schritt 190 vorbereitete Pufferadresse gesetzt. MCCB wird mit dem CBA-Wert und BCCB wird mit FFFF beschrieben (Schritt 193).
  • Die nächste BCB-Adresse wird erzeugt, und das nächste BCCB wird gelesen und gespeichert (Schritt 194). Dann wird Schritt 190 erreicht und der Prozeß wird durchgeführt, bis festgestellt wird, daß die nächste Pufferadresse FFFF ist, was bedeutet, daß die Steuerungsblöcke der Nachrichtenpuffer aktualisiert worden sind. Dann wird der Warteschlangenprozeß so ausgeführt, wie in Fig. 13-C beschrieben.
  • Die Adresse des BCB des letzten Puffers der Warteschlange für freie Puffer wird vom END-Feld des freien Warteschlangen-Steuerungsblocks erzeugt. Der Blockinhalt wird gelesen und gespeichert (Schritt 195).
  • Die nächste in MCCB einzuschreibende Nachrichtenadresse, welche gleich der in Schritt 181 gespeicherten Nachrichtenadresse ist, wird (vor der Freigabe) in den MCCB-Block des letzten Nachrichtenpuffers der Warteschlange für freie Puffer eingeschrieben (Schritt 196).
  • Das der CBA-Anzahl gleiche END-Feld des QCB und die in Schritt 182 berechneten Warteschlangen-Pufferanzahl werden vorbereitet, und der QCB-Block wird eingeschrieben (Schritt 197).
  • Schließlich wird der Rückgabecode vorbereitet, und die FREIGABE- Antwort wird auf Bus 24 gesendet.
  • Die Maschine für die Lieferung freier Puffer 92 wird nun mit Bezug auf Fig. 14 beschrieben.
  • Sie umfaßt einen gemieteten Pufferpool LBP 200, der aus einem Speicher mit wahlfreiem Zugriff besteht, in welchen die durch die Maschine für die Lieferung freier Puffer 92 in den globalen DEQ_FREE-Befehlsantworten empfangenen Adressen der freien Speicher eingeschrieben werden.
  • Der globale Befehl "frei zur Herausnahme aus der Warteschlange" wird durch den Steuerungsschaltkreis 202 gesendet, der ein endlicher Automat ist, welcher die Ladeoperation des gemieteten Pufferpools, wie in den Fig. 15A und 15B gezeigt, implementiert.
  • Die Ein-/Ausgangsregister 204 umfassen Arbeitsregister für den endlichen Automaten 202 und Ein-/Ausgangsregister zur Bildung der Bus-Schnittstellen 24.
  • Der endliche Automat 202 empfängt durch Leitungen 205-L und 205- C ebenfalls den Rückgabecode: Grenzschwelle erreicht und kritische Schwelle erreicht, durch die globale Befehlsmaschine 90 in der globalen DEQ_FREE-Befehlsantwort gesendet, wodurch eine Überlastung der Warteschlange für freie Puffer angezeigt wird.
  • Der Zugriff auf den gemieteten Pufferpool steht unter der Kontrolle des Zugangsmanagers 206, der unter Steuerung durch Zähler 208 arbeitet, wodurch dem endlichen Automaten die Anzahl der im gemieteten Pufferpool 200 enthaltenen Pufferadressen angezeigt wird.
  • Die Adressen des gemieteten Pufferpools 200 werden unter Steuerung der Eingabe-/Ausgabe-Zeigerregister 212 und 214 auf Bus 210 bereitgestellt, wie mit Bezug auf Fig. 15B erklärt wird.
  • Der endliche Automat 202 aktiviert eine Busanforderung an Entscheidungsmittel 28 auf Leitung 214 und erhält das Bus-erteilende Signal von Entscheidungsmittel 28 auf Leitung 216.
  • Der endliche Automat 202 führt ebenso den globalen FREIGABE-Befehl, wie mit Bezug auf Fig. 16 beschrieben wird, aus.
  • Er empfängt die Freigabeanfrage von Bus 24 und stellt dem Anforderer die Adresse eines Puffers, welcher aus dem gemieteten Pufferpool im FREIGABE-Register 218 gespeichert ist, bereit.
  • Das Laden des gemieteten Pufferpools wird in den Fig. 15A und B beschrieben (Schritt 250), der endliche Automat überprüft, ob ein gemieteter globaler Befehl bearbeitet wird (Schritt 251). Wenn ja, mündet der Prozeß in eine Warteschleife.
  • Wenn nein, überprüft Maschine 202, ob der gemietete Pufferpool voll ist (Schritt 252).
  • Wenn ja, wird der Prozeß wieder an Schritt 251 aufgenommen. Wenn nein, wird eine globale DEQ_FREE-Befehlsanforderung vorbereitet, und Leitung 214 wird aktiviert (Schritt 253).
  • Die Zuteilungsleitung 216 wird getestet (Schritt 254), um zu überprüfen, ob der Zulieferer für freie Puffer die DEQ_ FREE-Anforderung auf Bus 24 senden kann.
  • Sobald Leitung 216 durch Entscheidungsmittel 28 aktiviert ist, wird die DEQ_FREE-Anforderung durch eines der Register 204 auf Bus 24 gesendet.
  • Dann wartet der endliche Automat auf die DEQ_FREE-Antwort (Schritt 256). Wenn die Antwort empfangen ist, (Schritt 257) werden die Pufferadresse und der Rückgabecode in einem der Arbeitsregister 204 gespeichert.
  • Dann wird ein Test durchgeführt um festzustellen, ob ein gemieteter globaler Befehl in Bearbeitung ist (Schritt 258). Der Rückgabecode wird überprüft (Schritt 258); wenn es eine Warteschlangenüberlastung gibt, wird ein Unterbrechungssignal zum Unterbrechen der Steuerung in Mikroprozessor 18 aktiviert (Schritt 259). Ebenso wird, wenn das Zuteilungssignal oder die Zuteilungsantwort nicht innerhalb eines gegebenen Zeitraums empfangen wird, Schritt 259 aufgenommen.
  • Wenn ja, wartet der Prozeß, wenn nein, wird Zähler 208 überprüft (Schritt 259). Wenn eine Pufferanzahl gleich 0 festgestellt wird, wird die in Schritt 257 gespeicherte Pufferadresse in Freigaberegister 218 eingeschrieben, und der Zähler wird auf 1 gesetzt (Schritt 260). Dann wird der Prozeß mit Schritt 265 fortgesetzt.
  • Wenn ein Zählerwert unterschiedlich von Null gefunden wird, wird die Pufferadresse bei der Adresse eingeschrieben, die der Eingabezeiger in Register 212 anzeigt, und der Zähler wird auf POOLANZAHL + 1 gesetzt (Schritt 261).
  • Es wird dann überprüft, ob der Inhalt des Eingangszeigerregisters gleich FF ist, was anzeigt, daß der Pufferpool voll ist (Schritt 262). Wenn ja, wird Eingangszeigerregister 212 auf 00 gesetzt (Schritt 263), und wenn nein, wird es um Eins erhöht (Schritt 264).
  • Dann wird die globale Befehlsanforderungsleitung 216 zu Entscheidungsmittel 28 zurückgesetzt (Schritt 265), und der Prozeß kann bei Schritt 251 wiederaufgenommen werden.
  • Der endliche Automat 202 bearbeitet auch den LEASE-Befehl, um die Adresse eines freien Puffers einem Benutzer, der einen Puffer benötigt, bereitzustellen.
  • Die LEASE-Befehlsverarbeitung ist in Fig. 16 gezeigt.
  • Die LEASE-Anforderung wird von Bus 24 empfangen und in einem der Arbeitsregister 204 gespeichert (Schritt 270).
  • Der Indikator "kritische Schwelle erreicht" in dem Warteschlangen-Steuerungsblock für freie Puffer wird überprüft (Schritt 271).
  • Wenn dieser Indikator gesetzt ist, was bedeutet, daß die Warteschlange für freie Puffer eine kritische Anzahl von Puffern enthält, wird die LEASE-Anforderung nur bei beschleunigtem Durchlauf angenommen. Das Bit für beschleunigten Durchlaufin der LEASE-Anforderung wird überprüft, 272. Wenn es aktiv ist, oder wenn es keine kritische Überlastung der Warteschlange für freie Puffer FBQ gibt, wird Schritt 273 aufgenommen.
  • In Schritt 273 wird der Status des gemieteten Pufferpools überprüft, wenn er für nicht leer befunden wird, wird Schritt 274 begonnen.
  • In Schritt 274 wird der Rückgabecode erzeugt. Die gemietete Pufferpoolposition, die sich aus der durch Ausgangszeigerregister 214 bereitgestellten Adresse ergibt, wird gelesen. Zähler 208 wird um 1 vermindert, und der Inhalt des Lease-Registers 218 sowie der Rückgabecode werden auf Bus 24 gesendet. Das Lease-Register 218 wird mit dem an der gemieteten Pufferpoolposition gelesenen Inhalt neu geladen.
  • In Schritt 275 wird überprüft, ob der Inhalt des Eingangszeigerregisters seinen Maximumwert FF erreicht hat. Wenn ja, wird Ausgangszeigerregister 214 zurückgesetzt (Schritt 276), wenn nicht, wird es um 1 erhöht (Schritt 277).
  • Wenn in Schritt 273 festgestellt wird, daß der gemietete Pufferpool leer ist, oder wenn in Schritt 272 gefunden wird, daß das Bit für beschleunigten Durchlauf nicht aktiv ist, wird Schritt 278 begonnen.
  • Der Rückgabecode, der anzeigt, daß die LEASE-Anforderung verworfen ist, wird erzeugt, und die LEASE-Antwort wird auf Bus 24 gesendet.
  • Die globale Befehlsmaschine 90 und Maschine für die Lieferung freier Puffer 92 werden initialisiert und von Mikroprozessor 18 durch vom Mikroprozessor durch Bus 24 und durch Register 100 und 204 gesendete Steuerungsnachrichten zurückgesetzt.
  • Der Initialisierungsvorgang besteht in den folgenden Schritten, die dadurch erreicht werden, daß der Mikrocode auf Mikroprozessor 18 läuft.
  • Die SCHWELLEN-Felder der Warteschlange für freie Puffer und der Nachrichten-Warteschlangen-Steuerungsblöcke werden beschrieben. Die maximale Warteschlangen-Pufferanzahl des Nachrichten-Warteschlangen-Steuerungsblocks wird eingeschrieben.
  • Der gepufferte Bereich wird durch Einschreiben der Puffersteuerblöcke formatiert, um die Puffer so zu verketten, daß sie die Warteschlange für freie Puffer bilden.
  • Die Zuliefermaschine für Puffer wird durch Ausgabe einer Steuerungsnachricht FBS-aktiv aktiviert. Dann gibt die Maschine für die Lieferung freier Puffer 256 globale DEQ_FREE-Befehle aus, um den gemieteten Pufferpool 200 aufzufüllen.
  • Die Maschinen werden mittels einer Rücksetzsteuerungsnachricht zurückgesetzt, welche die Register und den Zähler auf Null setzt und die Maschine für die Lieferung freier Puffer 92 deaktiviert.
  • Der logische Kreis und die endlichen Automaten, die in der globalen Befehlsmaschine 90 und im endlichen Automaten 92 bereitgestellt werden, werden nicht im Einzelnen gezeigt. Sie können durch den Fachmann einfach aus den Flußdiagramm-Beschreibungen ihrer Funktionen implementiert werden.
  • Es wird nun beschrieben, wie die Verbindungs-Eingangswarteschlangen durch die Adapter-Schnittstellen 22 aufgebaut werden, wobei dasselbe Verkettungskonzept, wie früher mit Bezug auf Figur 6 beschrieben, verwendet wird.
  • Datenverschiebe-Empfangsschaltkreis 86_RVC führt die folgenden Funktionen aus.
  • Er bekommt die durch Adapter 14 empfangenen Eingangsdaten über Bus 300.
  • Der Schaltkreis 86_RCV enthält einen Flip/Flop-Puffer-Schnittstellenmechanismus, der einen Flip-Puffer 302 mit einem zugeordneten Flip-Steuerungsregister 303 und einen Flop-Puffer 304 mit einem zugeordneten Flop-Steuerungsregister 305 enthält. Steuerungspuffer 303 und 305 beinhalten Informationen, um die Flip/Flop-Puffer 302 und 304 zu verarbeiten. Die Maximumkapazität der Flip- und Flop-Puffer 302 und 304 hängt von der Länge der empfangenen Datenblöcke ab. Es wird angenommen, daß die empfangenen Datenblöcke aus 256 Bytes bestehen.
  • Er enthält ebenso einen endlichen Automaten 306, welcher die Datenübertragung von Flip- oder Flop-Puffer 302 und 304 in den Speicher 10 durch den Multiplexerschaltkreis 80 ausführt, und einen endlichen Automaten 308, welcher die Puffer und Nachrichten verkettet und sie in Warteschlangen einreiht, um die Verbindungseingangs-Warteschlangen LIQ zu bilden.
  • Die Nachrichtenübertragung wird unter Steuerung des Ablauffolgeplanungs-Schaltkreises 310 vorgenommen, welche die verschiedenen durch die endlichen Automaten 306 und 308 ausgeführten Operationen taktet.
  • Zum Initialisierungszeitpunkt empfängt Steuerungsblockpuffer CB 312 die Steuerblöcke, welche Steuerungsinformation enthalten. Diese Blöcke werden aktualisiert, wenn die Datenblöcke in die jeweiligen Verbindungseingangs-Warteschlangen übertragen worden sind. Der sich auf einen ausgewählten Benutzer beziehende Steuerungsblock, von welchem ein Datenblock in die Verbindungseingangs-Warteschlange übertragen wird, wird in CB-Register 314 gespeichert.
  • Die endlichen Automaten 306 und 308 werden von verschiedenen, mit dem Adapter verbundenen Benutzern gemeinsam benutzt. Immer, wenn sie einen spezifischen Benutzerdatenblock bearbeiten, müssen sie den Stand der diesem Benutzer entsprechenden Steuerungsinformation kennen.
  • Wenn Maschine 306 mit der Bearbeitung eines Datenblocks beginnt, lädt sie den entsprechenden Steuerungsblock aus Puffer 312 in Register 314. Die Adresse des Steuerungsblocks wird durch ein Identifikationsfeld bereitgestellt, das in Flip- oder Flop- Steuerungsregister 303 und 305 geladen wird. Sie wird dem Puffer 312 über den Adressenbus 313 geliefert. Das Laden des Steuerungsblocks erfolgt nur, wenn der den momentanen Daten zugeordnete Benutzer sich von dem vorherigen unterscheidet. Dann wird der Inhalt von Register 314 durch Automat 306 verwendet und während der Blockverarbeitung aktualisiert, und wenn alle Blockdaten in die Verbindungseingangs-Warteschlange übertragen worden sind, wird er wieder in Puffer 312 gespeichert. Dies gestattet es, den Status des jeweiligen Benutzers festzuhalten, während für die anderen Sorge getragen wird, und unter denselben Bedingungen wieder zu starten, wenn sein nächster Block zu bearbeiten ist.
  • Der Steuerungsblock hat folgenden Inhalt:
  • - Aktuelle Nachrichtenadresse (2 Bytes):
  • Adresse der aktuell in Speicher 10-2 zusammengestellten Nachricht. Dieses Feld wird durch die Automaten 306 und 308 aktualisiert, jedesmal wenn der erste Datenblock einer Nachricht bearbeitet wird: dies ist die Adresse eines freien Puffers, den es von der Maschine für die Lieferung freier Puffer 92 erhalten hat.
  • - Aktuelle Pufferdatenspeicher-Adresse (2 Bytes):
  • Adresse des momentan zum Speichern von Nachrichtendaten verwendeten Puffers. Am Anfang einer Nachricht wird dieses Feld mit demselben Wert wie die Nachrichtenadresse initialisiert. Dann wird es jedesmal, wenn der aktuelle Puffer voll ist, und ein neuer zur Weiterführung der Datenspeicherung der Daten der aktuellen Nachricht in die LIQ-Warteschlange erforderlich ist, aktualisiert.
  • - Kumulierte Nachrichtenbyteanzahl (2 Bytes):
  • Anzahl der Bytes, die durch die empfangene Nachricht in Speicher 10-2 eingenommen werden. Dieser Anzahl stellt den in der LIQ- Warteschlange verwendeten Platz dar, und sie kann sich von der Anzahl der tatsächlich für die ankommende Nachricht empfangenen Bytes unterscheiden. Zum Beispiel ist der Wert der Pufferoffsets in dieser Anzahl enthalten. Tatsächlich wird dieses Feld benutzt, um festzulegen, an welcher Adresse innerhalb des aktuellen Puffers die Daten des aktuellen Blocks zu speichern sind. (Die 8 weniger signifikanten Bytes entsprechen dem Abstand innerhalb des Puffers, welcher bis zu 256 Datenbytes enthalten kann.)
  • - Offset (1 Byte):
  • Stelle (Puffer-Abstandswert), an der das erste signifikante Datenbyte innerhalb des ersten Puffers einer Nachricht zu laden ist. Sie wird durch Mikrocode gesetzt und muß auf einer Wortgrenze (Vielfaches von 4 Bytes) liegen.
  • - Cutoff (1 Byte):
  • Maximale Anzahl von Puffern, welche zum Speichern einer Nachricht benutzt werden können. Sie wird durch Mikrocode gesetzt.
  • Immer dann, wenn Automat 306 einen freien Puffer benötigt, um mit dem Speichern eines Datenblocks für eine gegebene Nachricht fortzufahren, überprüft er, ob er diese Grenze nicht überschreitet. Wenn dies der Fall ist, schließt er die Nachricht, setzt einen entsprechenden Fehlerstatus in Nachrichten-Verkettungssteuerungsblock MCCB und setzt das Cutoff-Signalisierbit in seinein Steuerungsblock.
  • - Interne Kennzeichen (je 1 Bit)
  • Indikator "Nachricht in Bearbeitung": durch Automat 306 gesetzt, wenn er eine neue Nachricht startet ("erster Block" ist gesetzt, und "letzter Block" ist nicht gesetzt). Zurückgesetzt durch Automat 306, wenn er die Bearbeitung einer Nachricht abgeschlossen hat ("letzter Block" ist gesetzt). Dieser Indikator wird durch Automat 306 überprüft, wenn er feststellt, daß "erster Block" gesetzt ist, um zu wissen, ob eine frühere Nachricht noch bearbeitet wird, und diese abzuschließen, bevor eine neue gestartet wird.
  • - Cutoff-Signalisierindikator:
  • Durch Automat 306 gesetzt, wenn die Anzahl der zur Speicherung einer Nachricht erforderlichen Puffer die Cutoffgrenze überschreiten würde. Alle folgenden Datenblöcke bezüglich dieser Nachricht werden mit einer Kennzeichnung versehen. Zurücksetzen durch Automat 306, wenn der erste Datenblock einer neuen Nachricht ankommt.
  • Der Flip/Flop-Puffermechanismus 302 und 304 arbeitet wie im folgenden beschrieben.
  • Wenn Adapter 14 einen Block von Daten empfangen und zusammengesetzt hat, füllt er mit diesem im Normalbetrieb den Flip- (oder Flop-) Blockpuffer 302 oder 304, während Automat 306 den Flop- (oder Flip-) Blockpuffer durch Übertragen seines Inhalts in die Verbindungseingangs-Warteschlange leert. In dem Fall, daß sowohl Flip- als auch Flop-Blockpuffer 302 und 304 voll sind, muß Adapter 14 warten, bis Automat 306 die Bearbeitung der Flip- (oder Flop-) Puffer 302 oder 304 abgeschlossen hat.
  • Alle für das Bearbeiten der Datenblöcke erforderliche Steuerungsinformation wird dank eines jeden Flip- und Flop-Puffers 302 und 304 zugeordneten Steuerungsfeldes weitergeleitet und in Register 303 und 305 gespeichert.
  • Der Inhalt dieses Flip/Flop-Steuerungsfeldes ist der folgende:
  • - Benutzeridentifikation (7 Bits):
  • Geladen durch Adapter 14, um anzuzeigen, zu welchem Benutzer der Datenblock gehört.
  • - Block bereit (1 Bit):
  • Gesetzt durch Adapter 14, um anzuzeigen, daß der entsprechende Flip/Flop-Puffer durch Automat 306 bearbeitet werden kann: Daten sind geladen und die zugeordnete Steuerung ist gesetzt. Wird durch Automat 306 zurückgesetzt, wenn er alle Daten in die Verbindungseingangs-Warteschlange übertragen hat, und wenn der Flip/Flop-Puffer wieder frei ist, um durch Adapter 14 beschrieben zu werden. Wenn sowohl die Flip- als auch die Flop-Indikatoren "Block bereit" gesetzt sind, muß Adapter 14 warten, bis einer von ihnen frei wird.
  • - Kennsatz- oder Datenindikator (1 Bit):
  • Gesetzt durch Adapter 14, um anzuzeigen, daß der Inhalt des Datenblockpuffers als "Kennsatz" betrachtet und in Verbindungseingangs-Warteschlange, beginnend mit Nachrichtenbyteadresse Null gespeichert werden muß. Wenn verschiedene Kennsätze während der Verarbeitung einer einzelnen Nachricht vorkommen, überlappen sie einander.
  • - Erster Block (1 Bit):
  • Gesetzt durch Adapter 14, um anzugeben, daß der zugeordnete Block (Kennsatz oder Daten) der erste einer neuen Nachricht ist. Er schließt auch die vorangegangene Nachricht, wenn diese Nachricht sich nicht selbst durch ein "letzter Block" beendete.
  • (Dies gestattet, zwei SDLC-Rahmen, die nur durch eine einzige oder wenige Kennzeichen getrennt sind, effizient zu bearbeiten.)
  • - Letzter Block (1 Bit):
  • Gesetzt durch Adapter 14, um anzuzeigen, daß der zugeordnete Block (Kennsatz oder Daten) der letzte der Nachricht ist, Schaltkreis 308 muß die Nachricht schließen, sie (falls erforderlich) mit den vorausgegangenen verketten und sie in die zugeordnete LIQ einreihen.
  • - Blockbyteanzahl (9 Bits):
  • Geladen durch Adapter 14, um die Anzahl signifikanter Bytes im aktuellen Block anzuzeigen. Für einen Zwischenblock muß er ein Vielfaches von 4 Bytes sein. Für die abschließenden Daten und für einen Kennsatzblock kann sie jeden beliebigen Wert haben.
  • - Nachrichtenstatus gültig (1 Bit):
  • Gesetzt durch Adapter 14, um anzuzeigen, daß das Nachrichtenstatusfeld gültig ist.
  • - Nachrichtenstatus (2 Bits):
  • Aufgefüllt durch Adapter 14, um Information bezüglich der gerade bearbeiteten Nachricht zu geben, wie z. B. Wegeinformation, oder um Information parallel zu den Daten zu übertragen. Dieser Status wird durch Automat 306 in die Nachrichtensteuerungsblöcke von Speicher 10 übertragen.
  • Üblicherweise kann nur ein Status parallel zu einer Nachricht übertragen werden. In dem Fall, daß verschiedene Status vorkommen, überlappen sie einander, und der letzte erhält Vorrang gegenüber den vorhergehenden. Ein Nachrichtenstatus ist nicht bei einer Einzelblocknachricht gestattet (bei der die Indikatoren "erster Block" und "letzter Block" beide gesetzt sind), die einer Nachricht nachfolgt, welche nicht mit einem explizit gesetzten Indikator "letzter Block" endet. (In einem solchen Fall wäre es nicht möglich festzulegen, ob der Status zu der vorangegangenen Nachricht oder zu der aktuellen gehört.)
  • Fig. 18 stellt das Flußdiagramm von Ablauffolgeplaner 310 dar, beginnend mit dein Einschaltrücksetzen.
  • Zum Zeitpunkt des Einschaltrücksetzens zeigt ein Flip/Flop-Indikator in Datenübertragungsmaschine 306 auf Flip-Blockpuffer 302. Dies aktiviert FLIP-INDIKATORLEITUNG 321 und deaktiviert FLOP- Indikatorleitung 320 (Schritt 330).
  • Maschinen 306 und 308 warten im Leerlaufzustand darauf, daß der entsprechende Indikator "Block bereit" durch den Adapter in Steuerungsflip-Register 303 gesetzt wird (Schritt 331).
  • Es wird dann in Schritt 331 durch Vergleich der Benutzeridentifikation in Steuerungsregister 303 oder 305 mit dem Steuerungsblockregister 314 überprüft, ob die Benutzernummer sich geändert hat.
  • Wenn ja, wird der neue Steuerungsblock von Puffer 312 in Register 314 übertragen (Schritt 333).
  • Wenn die Benutzernummer nicht oder nach dem Laden des Steuerungsblocks verändert wurde, werden die Flip-Pufferdaten bearbeitet und in die LIQ-Warteschlange übertragen (Schritt 334), wie später mit Bezug auf Fig. 19 beschrieben wird.
  • Am Ende des Prozesses wird der Steuerungsblock gespeichert (Schritt 335). Der Indikator "Block bereit" im Flip-Register wird zurückgesetzt (Schritt 336).
  • Flip/Flop-Indikator wird überprüft (Schritt 337). Wenn er gleich FLIP vorgefunden wird, wird er in FLOP geändert (Schritt 338). Wenn er gleich FLOP vorgefunden wird, wird er in FLIP geändert (Schritt 339). Dies betätigt den vorher beschriebenen Flip/Flop- Mechanismus.
  • Dann wird der Ablauffolge-Planungsprozeß wieder an Schritt 331 aufgenommen.
  • Die Datenübertragungsoperation (Schritt 334) wird nun mit Bezug auf Fig. 19 beschrieben.
  • Vier Verarbeitungsphasen können, abhängig von den Datenblockcharakteristiken auszuführen sein:
  • - Start einer Nachrichtenphase, um eine neue Nachricht zu initiieren und manchmal, um die vorausgegangene zu schließen.
  • - Statusphase, um Statusinformation in den Nachrichten-MCCB zu übertragen.
  • - Kennsatz- oder Datenphase, um einen Kennsatz an Adresse 0 des ersten Puffers oder Daten in den aktuellen Puffer der gerade gebildeten Nachricht zu übertragen.
  • - Ende einer Nachrichtenphase, um die aktuelle Nachricht zu schließen und in die entsprechende LIQ-Warteschlange einzureihen.
  • Während des ersten Schrittes 350 des Starts der Nachrichtenphase setzt der endliche Automat 306 eine Busanforderung an Entscheidungsmittel 28 auf Leitung 316 (Fig. 17). Das Entscheidungsmittel antwortet mit einem Erteilungssignal auf Leitung 317.
  • Das erste Blockbit in Steuerungsflip- oder -flop-Register 303 oder 305 wird überprüft (Schritt 351).
  • Wenn es auf 1 gesetzt vorgefunden wird, was bedeutet, daß der erste Block einer Nachricht empfangen wurde, wird durch Überprüfen des internen Kennzeichens der bearbeiteten Nachricht in Steuerungsblockregister 314 überprüft, ob die vorausgegangene Nachricht noch bearbeitet wird (Schritt 352). Wenn dieses Kennzeichen auf 1 gesetzt ist, muß die Bearbeitung der vorausgegangenen Nachricht abgeschlossen werden (Schritt 353). Wenn dieses Kennzeichen auf 0 gesetzt ist, oder wenn die Bearbeitung der vorausgegangenen Nachricht abgeschlossen ist, wird die Bearbeitung der neuen Nachricht gestartet (Schritt 354). Diese Schritte 352 bis 354 werden mit Bezug auf Fig. 20 beschrieben.
  • Dann wird das Bit "Nachrichtenstatus gültig" in Flip/Flop-Steuerungsregister 303/305 überprüft (Schritt 355). Wenn es auf 1 gesetzt vorgefunden wird, wird der Status bearbeitet (Schritt 356). Andernfalls wird mit Schritt 357 begonnen. Schritt 357 ist der erste Schritt der Datenübertragung.
  • Es wird zuerst überprüft, ob der empfangene Block KENNSATZ-Information oder Daten umfaßt.
  • Wenn es Daten umfaßt, wird die Blockbyteanzahl überprüft (Schritt 358). Wenn sie niedriger als 0 ist, wird die Nachrichtenanzahl in CB-Register 314 aktualisiert (Schritt 359). Dies wird später mit Bezug auf Fig. 21 erklärt.
  • Wenn nicht, wird der in Flip- oder Flop-Puffer 302 oder 304 enthaltene Datenblock in die Nachrichtenpuffer des Datenvorratsspeichers 10-2 übertragen (Schritt 360), wie mit Bezug auf Fig. 21 beschrieben wird.
  • Wenn in Schritt 357 festgestellt wird, daß der BlockENNSATZ- Information enthält, wird der Pufferinhalt in den Speicherpufferteil an Nachrichtenadresse 0 übertragen (Schritt 361).
  • Dann wird in Schritt 362 überprüft, ob der empfangene Block der letzte Block der Nachricht ist. Wenn ja, wird das Ende der Nachricht bearbeitet (Schritt 363), wie mit Bezug auf Fig. 21 beschrieben wird. Falls nein, ist dies das Ende der Blockbearbeitung, und die Anforderung an Entscheidungsmittel 28 wird zurückgesetzt (Schritt 362).
  • Der Start der Nachrichtenbearbeitung wird in Fig. 20 gezeigt.
  • In Schritt 351 überprüft der endliche Automat 306, ob der empfangene Block der erste Block einer Nachricht war.
  • Wenn nicht, geht der Automat 306 zur Status- und Kennsatz/Daten- Bearbeitungsphase über.
  • Wenn ja, erhält er in Speicher 10 von der Maschine für die Lieferung freier Puffer durch Lesen des Inhalts von Freigaberegister 218 eine Adresse für freie Puffer. Der Inhalt dieses Registers wird gespeichert, Schritt 370.
  • Es wird dann überprüft, ob noch eine vorausgegangene Nachricht bearbeitet wird, für welche "letzter Block" empfangen wurde. Dies geschieht durch Überprüfen des Bits "Nachricht in Bearbeitung" in Register 314 (Schritt 371).
  • Wenn dieses Bit gleich 0 vorgefunden wird, was bedeutet, daß die vorausgegangene Nachricht bearbeitet ist, wird das Bit "Nachricht in Bearbeitung" auf 1 gesetzt (Schritt 372).
  • Dann überprüft der Automat 306 in der Anforderungstabelle 89, ob die dein Blockbenutzer entsprechende Verbindungseingangs-Warteschlange leer ist (Schritt 373).
  • Wenn sie nicht leer ist, wird die aktuelle Nachricht mit der vorausgehenden in der LIQ-Warteschlange verkettet (Schritt 374). Um diese Operation auszuführen, schreibt Maschine 308 die Adresse des an Schritt 370 gespeicherten freien Puffers in das nächste Nachrichtenadreßfeld des MCCB-Blocks der letzten Nachricht der LIQ-Warteschlange ein. Die Adresse dieser letzten LIQ-Nachricht befindet sich in dein Endfeld des QCB-Blocks der Warteschlange.
  • Wenn die vorausgegangene Nachricht noch unerledigt ist, werden Schritt 376 und 377 begonnen. Maschine 308 speichert die gesamte Nachrichtenbyteanzahl der vorausgegangenen Nachricht in ihren MCCB-Block. Zur selben Zeit führt sie durch Einschreiben der an Schritt 370 gespeicherten neuen Nachrichtenadresse in das nächste Nachrichtenadreßfeld desselben MCCB-Blocks die Verkettung der neuen Nachrichten aus. Auf diese Weise ist nur ein Speicherzugriff erforderlich, um die vorausgegangene Nachrichtenanzahl einzuschreiben und die Verkettungsoperation auszuführen. Dies erhöht die Leistungsfähigkeit und gestattet es, kurze, nur durch ein Kennzeichen getrennte Nachrichten zu empfangen.
  • In Schritt 377, wird die vorausgegangene Nachricht in die entsprechende Benutzer-LIQ eingereiht.
  • Der erste Schritt (357) der Daten/Kennsatz-Datenübertragung besteht aus der Überprüfung, ob der Block Daten oder Kennsatzinformation enthält. Dies geschieht durch Überprüfung, ob der Kennsatz/Daten-Indikator in Register 314 auf 1 steht.
  • Falls ja, enthält der Block Kennsatzinformation, und Maschine 306 überträgt sie in den zugeordneten Puffer an Nachrichtenadresse 0.
  • Dies setzt voraus, daß es dank des Offsetmechanismus genügend Platz im ersten Puffer gibt, andernfalls würden die letzten Bytes des Kennsatzes den für den Datenteil der Nachricht reservierten Zwischenraum überlappen. Dann wird die Phase "Ende der Nachricht" bei Schritt 362 begonnen.
  • Wenn der Daten/Kennsatz-Indikator auf 0 steht, kann der Blockpuffer Daten enthalten. Maschine 306 untersucht durch Überprüfen, ob die Blockbyteanzahl in Puffersteuerungsregister 303 oder 305 positiv ist (Schritt 358), ob Daten im Blockpuffer sind.
  • Falls nein, wird Schritt 359 begonnen. Das bedeutet, daß der empfangene Block der Endblock der vorausgegangenen Nachricht ist, und daß nur die gesamte Nachrichtenbyteanzahl aktualisiert werden muß, bevor er in dein MCCB-Block der vorausgegangenen Nachricht gespeichert wird. Die Blockbyteanzahl kann nur, wenn "letzter Block" in Register 303 oder 305 gesetzt ist, null oder negativ sein, und er kann nicht kleiner als minus zwei werden. Die Anzahl kann in dein Fall negativ sein, daß die empfangenen Bytes in dein vorausgegangenen Block die FCS-(Rahmensteuerungssequenz)-Bytes der HDLC-Rahmen enthalten.
  • Dann geht Maschine 306 an das Ende der Nachrichtenbearbeitungsphase.
  • Wenn die Blockbyteanzahl positiv ist, wird Schritt 380 begonnen. Das bedeutet, daß in dem Blockpuffer Daten zur Bearbeitung sind.
  • Maschine 306 startet eine Schleife, um den Datenblock zu übertragen, immer vier Bytes gleichzeitig in den Datenpuffer in Speicher 10.
  • Zuerst untersucht sie durch Überprüfen, ob die Nachrichtenbyteanzahl in Steuerungsblockregister ein Vielfaches von 256 ist (Schritt 380), ob in dem aktuellen Datenspeicherpuffer noch Platz ist.
  • Wenn ja, ist der aktuelle Puffer voll, und Schaltkreis 308 erhält eine neue Pufferadresse durch Lesen des Freigaberegisters der Maschine für die Lieferung freier Puffer 92, und dieser Puffer wird mit dein vorausgegangenen durch Aktualisieren seiner BCCB- und Byteanzahl verkettet (Schritt 381).
  • Wenn der aktuelle Speicher nicht voll ist oder nach Schritt 381, wird die Datenübertragung initiiert. Maschine 306 überträgt 4 Datenbytes von Puffer 302 oder 304 in Speicher 10 an die von der aktuellen Puffer-Datenspeicheradresse in Steuerungsblockregister 314 berechnete Adresse sowie die Anzahl bereits übertragener Bytes (Schritt 382).
  • Maschine 306 vermindert die verbleibende Blockbyteanzahl in Flip/Flop-Steuerungsregister 303/305 und erhöht die kuinulierte Nachrichtenbyteanzahl in Steuerungsblockregister 314.
  • Die Blockbyteanzahl wird in Schritt 383 überprüft. Wenn gefunden wird, daß sie abweichend von 0 ist, wird Schritt 380 begonnen.
  • Wenn sie gleich 0 ist, wird die Phase "Ende der Nachricht" begonnen.
  • Wenn in Schritt 362 gefunden wird, daß der bearbeitete Block der letzte Block einer Nachricht ist, muß Schaltkreis 308 dies Nachricht durch Aktualisieren ihres Nachrichten-Verkettungssteuerungsblocks schließen (Schritt 384). Er speichert die gesamte Nachrichtenbyteanzahl und setzt die nächste Nachrichtenadresse auf FF, um anzuzeigen, daß diese Nachricht die letzte ist, welche von diesem Benutzer empfangen wurde, und daß noch keine weitere in Bearbeitung ist.
  • Dann (Schritt 385) kann die vervollständigte Nachricht dank eines globalen Warteschlangen-Einreihungsbefehls, welcher die höchste Priorität hat, in die dem Benutzer dieser Nachricht zugeordnete, entsprechende LIQ eingereiht werden.
  • Das Bit "Nachricht in Bearbeitung" wird im Steuerungspuffer 314 zurückgesetzt.
  • Um die in Fig. 18 bis 21 beschriebenen Funktionen zu implementieren, müssen die endlichen Automaten 306 und 308 auf den Bus 24 zugreifen, um Daten in Speicher 10 einzuschreiben oder eine Adresse für freie Puffer aus dem Lease-Register 218 zu lesen. In beiden Fällen muß Schaltkreis 306 den Bus von Entscheidungsmittel 28 anfordern.
  • Dies geschieht mit Hilfe der Busanforderung, welche auf Leitung 316 gesetzt wird, wenn die Maschinen 306 und 308 Zugang zu Bus 24 benötigen, und die durch diese Kreise zurückgesetzt wird, wenn sie den Bus nicht mehr benötigen. Das Buserteilungssignal auf Leitung 317 wird von Entscheidungsmittel 28 gesetzt, um den Bus den Maschinen 306 und 308 zuzuteilen, und von Entscheidungsmittel 28 zurückgesetzt, nachdem das Anforderungssignal zurückgesetzt worden ist.
  • Die Schnittstelle zwischen dem Stationsservice 88 und Schaltkreis 86_RCV wird durch die Anforderungstabelle gebildet, welche Information zur Ablauffolgeplanung des Stationsservice enthält, wie später noch beschrieben wird.
  • Datenverschiebe-Übertragungs-Schaltkreis 86_XMIT führt drei Hauptfunktionen aus:
  • - er erhält formatierte Daten aus einer in der Verbindungs-Ausgangswarteschlange befindlichen Nachricht, die vorher aus einer LOQ durch den Stationsservice 88 herausgenommen wurde,
  • - er überträgt diese Daten durch einen Flip/Flop-Mechanismus auf dessen Anforderung hin zum Adapter.
  • Dieser Schaltkreis 86_XMIT hat eine ähnliche Struktur wie der Datenverschiebe-Empfangskreis 86_RVC.
  • Er umfaßt Flip-Puffer 502 und Flop-Puffer 504 mit den zugeordneten Steuerungsregistern 503 und 505. Die maximale Kapazität der Flip- und Flop-Puffer 302 und 304 hängt von der Länge der Datenblöcke ab, d. h. 256 Bytes in einer bevorzugten Ausführungsform.
  • Steuerungsregister 503 und 505 beinhalten Information, die bei dem Bearbeiten der Flip- und Flop-Datenpuffer 502 beziehungsweise 504 verwendet wird.
  • Schaltkreis 86_XMIT umfaßt die endlichen Automaten 506 und 508. Automat 506 steuert die Datenübertragung von den Verbindungs- Ausgangswarteschlangen in einen Puffer 502 oder 504, und Automat 508 verwaltet den Entkettungsprozeß.
  • Die Ablauffolgeplanung der Operationen der Automaten 506 und 508 steht unter der Steuerung von Ablauffolgeplaner 510.
  • Schaltkreis 86_XMIT wird von verschiedenen Benutzern in derselben Weise wie Schaltkreis 86_RCV gemeinsam genutzt. Immer, wenn er einen speziellen Benutzerdatenblock bearbeitet, muß er ebenfalls den Stand der diesem Benutzer entsprechenden Steuerungsinformation kennen. Dies wird mit Hilfe der in Puffer 512 befindlichen Steuerungsblöcke erreicht. Wenn Schaltkreis 86-XMIT die Bearbeitung eines Datenblocks startet, lädt er den entsprechenden Steuerungsblock von Puffer 512 in Register 514.
  • Die Adresse in Puffer 512 des Steuerungsblocks wird durch Bus 513 aus dein Benutzeridentifikationsfeld in Steuerungsregister 503 oder 505 geladen. Dieses Laden erfolgt nur, wenn der dein vorliegenden Block zugegeordnete Benutzer sich vom dein vorausgegangenen unterscheidet. Dann wird der Inhalt von Register 514 durch die endlichen Automaten 506 und 508 verwendet und während der Datenblockbearbeitung aktualisiert, und wenn alle Blockdaten vom Datenvorratsspeicher 10 übertragen worden sind, erneut in Puffer 512 gespeichert. Dies gestattet es, den Status des speziellen Benutzers festzuhalten, während die anderen bedient werden, und unter denselben Bedingungen erneut zu starten, wenn sein nächster Block bearbeitet werden muß. Für jeden Benutzer muß die folgende Information gespeichert werden:
  • - Aktuelle Nachrichten-Datenspeicheradresse (2 Bytes):
  • Adresse der aktuell von Speicher 10 übertragenen Nachricht. Diese Feld wird durch Servicestation 88 immer dann geladen, wenn sie eine neue Nachricht aus der Warteschlange herausgenommen hat (dies kann nur geschehen, wenn das Busy-Bit in der Anforderungstabelle für den Benutzer Null ist, wie später mit Bezug auf Figur 26 beschrieben wird).
  • - Aktuelle Daten-Speicherpufferadresse (2 Bytes):
  • Adresse der Puffer, von welchen momentan Daten in die Flip/Flop- Puffer 502/504 übertragen werden.
  • Am Anfang einer Nachricht wird dieses Feld mit demselben Wert wie die Nachrichtenadresse initialisiert. Dann wird es immer, wenn der aktuelle Puffer leer ist und der nächste der Nachrichtenkette entkettet ist, um die nächsten Daten zu erhalten, aktualisiert.
  • - Nachrichtenbyteanzahl (2 Bytes):
  • Wird am Anfang einer Nachrichtenübertragung mit der Anzahl der Bytes, die zur Speicherung der vollen Nachricht im Datenspeicher verwendet werden, initialisiert. Diese Anzahl wird MCCB entnommen. Es muß festgestellt werden, daß sie den im Datenspeicher verbrauchten Platz darstellt, und daß sie von der Anzahl der Bytes, die tatsächlich für die Ausgangsnachricht übertragen werden, abweichen kann. Zum Beispiel schließt diese Anzahl den Wert der Pufferoffsets ein.
  • Diese Anzahl wird jeweils um 256 verringert, wenn ein neuer Puffer entkettet ist. Wenn sie kleiner wird als 256, setzt Automat 506 das Kennzeichen "letzter Puffer" was bedeutet, daß der letzte Puffer der Nachricht übertragen wird, und daß er die Anzahl der zur Übertragung verbleibenden Bytes enthält.
  • - Pufferbyteanzahl (1 Byte):
  • Gesamtanzahl der in einem aktuellen Puffer verwendeten Bytes. Immer dann geladen, wenn ein neuer Puffer einer Nachricht entkettet wird.
  • - Pufferabstand (1 Byte)
  • Adresse innerhalb des aktuellen Puffers des nächsten zu übertragenden Bytes. Immer wenn ein neuer Puffer einer Nachricht entkettet wird, wird der Pufferabstand zusammen mit dein aus BCCB gelesenen Offset geladen. Dann wird er jedesmal verringert, wenn Daten aus diesem Puffer gelesen werden.
  • - Kennsatzlänge (1 Byte)
  • Anzahl von Bytes, beginnend bei Nachrichtenadresse 0, die als Kennsatzdaten behandelt werden.
  • Gesetzt durch Mikrocode während der Benutzerinitialisierung.
  • - Interne Kennzeichen (je 1 Bit):
  • Letzter Puffer:
  • Gesetzt durch Maschine 506, wenn die Nachrichtenbyteanzahl kleiner als 256 wird.
  • Zurückgesetzt durch Maschine 506, wenn sie die Bearbeitung einer neuen Nachricht startet.
  • Nachricht in Bearbeitung:
  • Gesetzt durch Maschine 506, wenn sie die Bearbeitung einer Nachricht aufnimmt.
  • Zurückgesetzt durch Maschine 506, wenn sie den letzten Block einer Nachricht überträgt.
  • Pufferkennsatz:
  • Gesetzt durch Mikrocode bei der Benutzerinitialisierung.
  • Zeigt an, daß eine Nachrichten-Kennsatzinformation bei Nachrichtenadresse 0 vorliegt (Adresse 0 des ersten Puffers der Nachricht). Diese Information muß zum Adapter als der erste Block mit dem Block-Kennsatzsteuerungs-Kennzeichen übertragen werden.
  • Wenn Adapter 14 durch Setzen eines Blockanforderungs-Kennzeichens und Laden des Benutzeridentifikationsfeldes in das Flip- oder Flop-Steuerungsregister 503 oder 505 ein Datenblock angefordert hat, holt im Normalbetrieb Maschine 506 die Daten aus dein Datenvorratsspeicher 10 und überträgt sie in Flip-(oder Flop-) Blockpuffer 502 (oder 504). Dann setzt sie in dem zugeordneten Flip- (oder Flop-) Steuerungsregister 503 (oder 505) alle vom Adapter zur Übertragung des Datenblocks benötigten Information, und setzt das Blockanforderungs-Kennzeichen zurück, um anzuzeigen, daß der Block bereit ist.
  • Die Steuerungsinformation in Flip- (Flop-) Steuerungsregister 503 (505) wird im folgenden beschrieben. Diese Information wird von Maschine 506 über Bus 507 oder vom Adapter über Bus 300 in den Registern gesetzt.
  • - Benutzeridentifikation (7 Bits):
  • Geladen durch den Adapter, um anzuzeigen, für welchen Benutzer er einen Datenblock anfordert; dieses Feld wird an Bus 513 zur Adressierung von Puffer 512 bereitgestellt.
  • - Blockanforderung:
  • Gesetzt durch den Adapter, um anzuzeigen, daß er einen Datenblock für den im Benutzeridentifikationsfeld angezeigten Benutzer anfordert.
  • Zurückgesetzt durch Maschine 506, wenn sie alle Datenblöcke von der LOQ-Warteschlange in Flip- oder Flop-Register 502 oder 504 übertragen hat, und alle zugeordneten Steuerungsfelder im entsprechenden Steuerungsregister 503 oder 505 aktualisiert sind.
  • Beim Initialisieren in den inaktiven (Rücksetz-)Zustand versetzt.
  • - Kennsatz- oder Datenindikator (1 Bit):
  • Gesetzt durch Maschine 506, um anzuzeigen, daß der Datenblockpuffer Information vom Typ "Kennsatz" enthält (ein "Kennsatz"- Block kann nur der erste einer Nachricht sein).
  • - Erster Block (1 Bit):
  • Gesetzt durch Maschine 506, um anzugeben, daß der zugeordnete Block (Kennsatz oder Daten) der erste einer neuen Nachricht ist.
  • - Letzter Block (1 Bit):
  • Gesetzt durch Maschine 506, um anzuzeigen, daß der zugeordnete Block der letzte einer Nachricht ist.
  • Wenn eine Nachricht in einem einzigen Block übertragen werden kann, werden sowohl der Indikator "erster Block" als auch der Indikator "letzter Block" gesetzt.
  • - Blockbyteanzahl (9 Bits):
  • Geladen durch Maschine 506, um die Anzahl der signifikanten Bytes in dem zugeordneten Datenblock anzuzeigen.
  • - Nachrichtenstatus gültig (1 Bit):
  • Gesetzt durch Maschine 506, um anzuzeigen, daß Nachrichtenstatusfeld gültig ist.
  • - Nachrichtenstatus (2 Bytes):
  • Gesetzt durch Maschine 508 aus dein Nachrichten-MCCB-Statusfeld (falls vorhanden), parallel zum ersten Block der Nachricht.
  • Der Schaltkreis 86_XMIT ist dem mit ihm verbundenen Adapter untergeordnet, er wird eingeplant, wenn der Adapter durch Setzen des Blockanforderungs-Kennzeichens in dem Flip- (oder Flop-) Block-Puffersteuerungsregister 503 (505) Daten anfordert.
  • Das Flußdiagramm der Ablauffolgeplanung ist in Fig. 23 gezeigt.
  • Zum Zeitpunkt des Einschalt-Rücksetzens (Schritt 540) werden beide Blockanforderungs-Kennzeichen in den Flip/Flop-Steuerungsregistern 503/505 zurückgesetzt (inaktiv). Der Flip/Flop-Indikator FF_INDIC zeigt auf den Flip-Blockpuffer 502, so daß Leitung 521 aktiv und Leitung 522 inaktiv ist.
  • Die Maschinen 506 und 508 warten im Ruhestatus darauf, daß vom Adapter in Flip- oder Flop-Steuerungsregister 503 oder 504 das Flip- oder Flop-Blockanforderungsbit gesetzt wird (Schritt 541 bis 544).
  • Wenn dies geschieht, wird das Benutzeridentifikationsfeld im Flip- oder Flop-Steuerungsregister 503 oder 505 mit dem am Ende der Bearbeitung des vorausgegangenen Blocks gespeicherten Inhalt des Steuerungsblockregisters verglichen, um festzulegen, ob die Benutzernummer geändert ist.
  • Wenn ja, wird der dem neuen Benutzer entsprechende Steuerungsblock aus Puffer 512 in Register 514 geladen (Schritt 546).
  • Dann wird der Datenblock in das Flip- oder Flop-Register 502 oder 504 übertragen, abhängig davon, welche der Leitungen 521 oder 520 aktiviert ist (Schritt 547).
  • Am Ende der Blockübertragung wird der Inhalt von Register 514 gespeichert (Schritt 548), und das Blockanforderungsbit wird zurückgesetzt.
  • Maschinen 506 und 508 kehren in ihren Ruhestatus zurück, und überwachen, ob der Flip- oder Flop-Blockanforderungsindikator aktiv wird.
  • Der Schritt "Übertragen der Blockdaten" 547 wird mit Bezug auf Fig. 24 beschrieben.
  • Es kann, abhängig vom Status der Maschine 506 und der durch den Nachrichten-Verkettungssteuerungsblock MCCB angegebenen Charakteristik der Nachricht nötig sein, unterschiedliche Bearbeitungsphasen auszuführen.
  • Da sind zuerst die Phasen "Start der Nachricht" und "Statusphase", welche Schritt 560 bis 563 umfassen. In Schritt 559 überprüft Maschine 506, ob das Bit "Nachricht in Bearbeitung" in Steuerungsblockregister 514 auf 0 ist. Wenn ja, wird Bit 86_XMIT BUSY in Anforderungstabelle 89 gesetzt (Schritt 560). Dann wird der MCCB-Block der neuen Nachricht gelesen, um Nachrichtenlänge und Status zu erhalten (Schritt 561). Der Status wird in das Flip- oder Flop-Steuerungsregister 503 und 505 eingeschrieben (Schritt 562), und der BCCB-Block wird gelesen, um die nächste Pufferadresse, den Offsetwert und die letzte Byteadresse zu erhalten.
  • Dann überprüft Maschine 506, ob das Pufferkennsatz-Bit in Register 514 gesetzt ist (Schritt 564).
  • Wenn eine Kennsatzinformation zu bearbeiten ist, wird Schritt 565 begonnen. Vier Kennsatzbytes werden aus dem Speicherpuffer gelesen und in den Flip- oder Flop-Puffer 502 oder 504 übertragen.
  • Dann wird überprüft, ob die Kennsatzbearbeitung abgeschlossen ist (Schritt, 566), Schritt 565 wird begonnen und der Vorgang wird wiederholt, bis die Kennsatzinformation komplett in Flip- oder Flop-Puffer 502 oder 504 übertragen ist.
  • Dann wird überprüft, ob Daten im aktuellen Puffer sind (Schritt 567). Wenn ja, wird das Bit "Nachricht in Bearbeitung" in Register 514 auf 1 gesetzt. Wenn nein, überprüft Maschine 506, ob das Bit "letzter Puffer" in Register 514 gesetzt ist (Schritt 568).
  • Wenn das Bit "letzter Puffer" nicht gesetzt ist, oder Daten im aktuellen Puffer sind, wird das Bit "Nachricht in Bearbeitung" in Steuerungsblockregister 514 gesetzt (Schritt 569).
  • Wenn das Bit "letzter Puffer" gesetzt vorgefunden wird, wird das Bit "Nachricht in Bearbeitung" auf 0 gesetzt (Schritt 570).
  • Nach Schritt 569 oder 570 wird die Pufferbyteanzahl im Flip- oder Flop-Register 503 oder 505 aktualisiert (Schritt 571).
  • Wenn die Maschine 506 in Schritt 564 feststellt, daß der Puffer keine Kennsatzinformation, sondern Daten enthält, wird die Bearbeitung mit Schritt 572 fortgesetzt. Vier Datenbytes werden aus dein Puffer gelesen und in den Flip- oder Flop-Puffer 502 oder 504 übertragen, die Pufferbyteanzahl wird erhöht.
  • Immer wenn vier Bytes übertragen werden, überprüft Maschine 506, ob alle Pufferdaten bearbeitet sind (Schritt 574).
  • Wenn ja, überprüft Maschine 506, ob der bearbeitete Puffer der letzte Puffer der Nachricht ist (Schritt 576), dies wird durch die nächste aus BCCB gelesene und in Schritt 563 gespeicherte Pufferadresse angezeigt.
  • Wenn es der letzte Puffer ist, wird Schritt 570 begonnen, um das Bit "Nachricht in Bearbeitung" auf 0 zu setzen und das Bit 86_XMIT BUSY in Anforderungstabelle 89 zurückzusetzen.
  • Wenn es nicht der letzte Puffer ist, wird der nächste Puffer entkettet (Schritt 577), sein BCCB-Block wird gelesen und gespeichert.
  • Dann überprüft Maschine 506, ob der Flip- oder Flop-Datenpuffer 502 oder 504 voll ist (Schritt 578), wenn ja, wird die Bearbeitung mit Schritt 571 fortgesetzt, um die Flip/Flop-Pufferanzahl in Steuerungsregister 503 oder 505 zu aktualisieren.
  • Wenn nein, wird die Bearbeitung bei Schritt 572 fortgesetzt, um den Inhalt des nächsten Puffers zu übertragen.
  • Der Start der Nachrichtenphase ist detailliert in Fig. 25 dargestellt.
  • Wenn das Bit "Nachricht in Bearbeitung" in Steuerungsblockregister 514 gleich 0 vorgefunden wird, wird der MCCB-Block der Nachricht bei der aus der aktuellen Nachrichten-Datenspeicheradresse in Register 514 berechneten Speicheradresse gelesen. Die Nachrichtenbyteanzahl und die nächste Nachrichtenadresse werden gespeichert (Schritt 561-1). Die nächste Nachrichtenadresse wird in das Steuerungsblockregister eingeschrieben, um in Puffer 512 gespeichert zu werden (Schritt 548), wenn die Nachricht übertragen ist.
  • Die Nachrichtenbyteanzahl wird in Register 514 eingeschrieben (Schritt 580).
  • Der MCCB-Status wird gelesen (Schritt 561-2) und Schritt 562 wird begonnen.
  • Der Status wird in Flip- oder Flop-Steuerungspuffer 503 oder 505 eingeschrieben und das Bit "Status gültig" wird auf 0 gesetzt.
  • Dann wird der Puffer-Verkettungssteuerungsblock BCCB gelesen und gespeichert (Schritt 563).
  • Die in Schritt 563 gelesene Pufferbyteanzahl wird in Register 514 in das Pufferbyteanzahl-Feld eingeschrieben, und der Pufferoffset wird in das Pufferabstandsfeld eingeschrieben, um die Adressierung der aus dein Puffer zu lesenden Bytes zu steuern (Schritt 581). Dann wird das erste Blockbit in Flip/Flop-Steuerungsregister 503/505 auf 1 gesetzt (Schritt 582), und die Bearbeitung wird bei Schritt 564 fortgesetzt.
  • Dann werden der Kennsatz oder die Daten, wie in Fig. 23 und 24 beschrieben, übertragen.
  • Nach der vorliegenden Erfindung werden die von einem Quellenbenutzer 12 empfangenen Nachrichten verkettet und in die Benutzer- Verbindungseingangs-Warteschlange eingereiht.
  • Dann nimmt der Stationsservice RCV die Nachrichten aus der Warteschlange heraus, und veranlaßt abhängig von dem MCCB-Status bzw. dein Inhalt der Feldparaineter jeder Nachricht, daß die Nachrichten in die dein Zielbenutzer entsprechende Ziel-Verbindungsausgangs-Warteschlange eingereiht werden, um durch Schaltkreis 86_XMIT zum Benutzer übertragen zu werden, wenn die Nachrichtenbearbeitung keine Mikrocodeoperationen erfordert. In dem Fall ist das Bit "festverdrahtete Pfadbestimmung" im Nachrichten-Verkettungssteuerungsblock zusammen mit der QCB_ id-Identifikation der Benutzer-Verbindungsausgangs-Warteschlange aktiv.
  • Wenn die Nachrichtenbearbeitung Mikrocodeoperationen erfordert, werden die Nachrichten in die Mikrocode-Eingangswarteschlange des Quellenbenutzers eingereiht. Der Mikroprozessor erhält die Nachrichten durch Ausgabe eines globalen DEQ-Befehls, bearbeitet sie und gibt einen globalen ENQ-Befehl aus, um sie in die Ziel- Verbindungsausgangs-Warteschlange einzureihen und zum Zielbenutzer zu übertragen.
  • Fig. 26 repräsentiert Stationsservice 88, welcher in jeder Schnittstelle 22 untergebracht ist, um jeweils einen Benutzer dabei zu unterstützen, entweder zu empfangen, zu übertragen oder das Ende der Übertragung einer Nachricht zu bearbeiten.
  • Er besteht aus drei Teilen, nämlich der Empfangslogikteil RCV600, der Übertragungslogikteil XMIT602 und dein Teil "Nachrichtenende" EOM604. Diese Teile sind den Übertragungsvorgängen Empfangen, Senden und Nachrichtenende zugeordnet.
  • Jeder dieser Teile kann durch Multiplexer 80 und Bus 24 globale Befehle an die globale Befehlsmaschine ausgeben.
  • Empfangsteil 600 kann globale Warteschlangen-HERAUSNAHME-Befehle und globale Warteschlangen-EINREIHUNGS-Befehle über Bus 606 ausgeben.
  • Sendeteil XMIT 602 kann globale Warteschlangen-HERAUSNAHME-Befehle über Bus 608 ausgeben. Er kann ebenso eine Information "Nachricht bereit" über Bus 610 ausgeben, welche in Register 652 gespeichert wird, um an Adapter 14 geliefert zu werden und den Adapter zu informieren, daß eine Nachricht für einen bestimmten Zielbenutzer bereit ist.
  • Der Adapter erzeugt die Blockanforderung an den Daten-Verschiebeübertragungs-Schaltkreis 86_XMIT auf Leitung 614 in Antwort auf die Information "Nachricht bereit" in Register 652.
  • Der Teil "Ende der Nachrichtenübertragung" 604 kann einen globalen FREIGABE-Befehl auf Bus 616 ausgeben, um die Nachrichtenpuffer am Ende der Nachrichtenübertragung für die Warteschlange für freie Puffer freizugeben.
  • Anforderungstabelle 89 hat einen Eintrag pro Benutzer und umfaßt für jeden Benutzer Statusbits, welche bewirken, daß der Empfangs-, der Übertragungs- oder der EOM-Teil aktiviert wird.
  • Für jeden Benutzer wird das Empfangsstatusbit durch den von Schaltkreis 86_RVC angeforderten globalen Warteschlangen-Einreihungsbefehls-Rückgabecode mittels Aktivierung von Leitung 620 gesetzt (Schritt 126, Fig. 10B). Dieses Bit zeigt an, daß die Benutzer-LIQ nicht leer ist. Es wird durch den globalen Warteschlangen-Herausnahmebefehls-Rückgabecode mittels Aktivierung von Leitung 622 zurückgesetzt, wenn die Warteschlange leer ist.
  • Die Übertragungsstatusbits für jeden Benutzer sind: Bit "LOQ nicht leer" und Bit "86_XMIT busy".
  • Das Bit "LOQ nicht leer" wird durch den Rückgabecode des globalen Warteschlangen-EINREIHUNGS-Befehls mittels Aktivieren von Leitung 624, wenn eine erste Nachricht in die Benutzer-Verbindungsausgangs-Warteschlange eingereiht ist, gesetzt, und es wird durch den Rückgabecode des globalen Warteschlangen-HERAUSNAHME- Befehls mittels Aktivieren von Leitung 626, wenn die Benutzer- Verbindungsausgangs-Warteschlange leer wird, zurückgesetzt.
  • Das Bit "86_XMIT Busy" wird durch Schaltkreis 86_XMIT gesetzt, wenn die Blockanforderung von Adapter 14 aktiviert wird, und durch Schaltkreis 86_XMIT zurückgesetzt, wenn der letzte Block über Leitung 628 an den Adapter, wie vorher beschrieben, gesendet ist.
  • Decodierschaltkreis 619 empfängt gegebenenfalls die aktivierten globalen Befehlsantwort-Leitungen 620, 622, 624 und 626.
  • Für jeden Benutzer wird das Bit "Ende der Nachrichtenübertragung" von Adapter 14 durch Aktivieren von Leitung 632 von Bus 300 aktiviert, und das Bit "Status OK" wird durch den Adapter gesetzt, wenn die Nachricht erfolgreich über Leitung 633 empfangen ist.
  • Ablauffolgeplaner 634 durchsucht die Anforderungstabelle 89, und überprüft für jeden Benutzer die Statusbits, um festzustellen, ob der Stationsservice in die Ablauffolgeplanung miteinbezogen werden muß, um eine Nachricht zu empfangen (Bit "LIQ nicht leer" ist an und Bit "XMIT-BUSY" ist aus), oder eine Nachricht zu übertragen (Bit "LOQ nicht leer" ist an) oder "Nachrichtenende" zu bearbeiten (EOM-Bit und Status-OK-Bit ist an).
  • Ein jedem Benutzer zugeordneter Stationssteuerungsblock SCB im linearen Bereich von Speicher 10 enthält das QCB_id der Eingangswarteschlangen und der Verbindungs-Ausgangswarteschlangen des Benutzers.
  • Die Leitungen 642, 644 und 646 werden durch die Bits "LIQ nicht leer", "LOQ nicht leer" und EOM aktiviert, die aus der Anforderungstabelle gelesen werden.
  • Der Ablauffolgeplaner 634 durchsucht die Anforderungstabelle. Für jeden Benutzer liest er die Statusbits in der folgenden Reihenfolge, Empfang, Senden und EOM, um festzustellen, ob erstens der Empfangsteil, zweitens der XMIT-Teil und drittens der EOM- Teil zu aktivieren ist. Wenn dies der Fall ist, aktiviert er eine dieser Leitungen 642, 644 und 646.
  • Er veranlaßt SCB-Speiseschaltung 636, die Adresse des entsprechenden SCB-Blocks zu erzeugen. Diese Adresse wird über Bus 638 und den Multiplexerschaltkreis 80 zur Speichersteuerung 11 gesendet, und die aus dem Speicher gelesenen SCB-Blockdaten werden in Register 640 gespeichert, um über Bus 641 an den Empfangs-, Sende- oder Nachrichtenende-Teil 600, 602 oder 604 geliefert zu werden, abhängig davon, welche der Leitungen 642, 644 oder 646 aktiviert ist.
  • Die Arbeitsweise ist die folgende.
  • Wenn er aktiviert ist, gibt der RCV-Teil 600 einen globalen DEQ- Befehl aus. Die Anforderungsdaten sind, wie vorhergehend beschrieben, das QCB_id der in Register 640 gespeicherten LIQ-Warteschlange, und die Antwortdaten bestehen aus der aus dem Anfangsfeld des LIQ-Warteschlangen-Steuerungsblocks gelesenen Nachrichtenadresse.
  • Dann sendet Schaltkreis 600 eine ENQ-Anforderung, Anforderungsdaten sind die Nachrichtenadresse, eine Mikrocode-Eingangswarteschlangen-QCB_id oder Verbindungs-Ausgangswarteschlangen- QCB_id, abhängig von dem Inhalt von MCCB, und gibt die Kontrolle zurück an Ablauffolgeplaner 634.
  • Wenn die Nachricht in eine Mikrocode-Eingangswarteschlange eingereiht ist, wird sie aus der Warteschlange herausgenommen und durch den Mikroprozessor bearbeitet, und dann in die Verbindungs-Ausgangswarteschlange des Zielbenutzers eingereiht.
  • Wenn er aktiviert ist, sendet der Sendeteil XMIT 602 einen globalen DEQ-Befehl auf Bus 603, die Anforderungsdaten sind das QCB_id der Verbindungs-Ausgangswarteschlange, welche in Register 640 gespeichert ist.
  • Die Nachrichtenadresse, welche in dein Antwortdatenfeld empfangen wird, wird über Bus 650 gesendet, um in dein Steuerungsblockpuffer 512 von Schaltkreis 86_XMIT bei der Benutzeradresse, die zum Senden der Nachricht zu verwenden ist, gespeichert zu werden, und wird in dem SCB-Block gespeichert.
  • Register 652 wird ebenso mit einem Signal geladen, das anzeigt, daß eine Nachricht für diesen Benutzer bereit ist. Übertragungsteil 602 gibt die Kontrolle an den Ablauffolgeplaner 634 zurück. Der Adapter initiiert daraus die Blockanforderung.
  • Wenn er aktiviert ist, sendet der EOM-Teil 604 einen globalen REL-Befehl, wobei die Anforderungsdaten aus der Nachrichtenadresse, die vorher in dem SCB-Block gespeichert wurde, bestehen. Dieses gestattet, die Nachrichtenpuffer für die Warteschlange für freie Puffer freizugeben, wenn die Nachricht erfolgreich empfangen worden ist. Der EOM-Teil 604 gibt die Kontrolle zurück an Ablauffolgeplaner 634, welcher den nächsten Benutzer untersucht.

Claims (18)

1. Verfahren zur Übertragung einer Nachricht in einem Kommunikationssystem zwischen Quellenbenutzern und Zielbenutzern durch einen Speicher, wobei der Speicher zwischen den Benutzern geteilt wird, und der Zugriff durch die Benutzer über einen gemeinsamen Bus (24) erfolgt, und wobei das Verfahren gekennzeichnet ist durch:
Organisieren des gemeinsam genutzten Speichers (10) in einen linearen Bereich (10-1) und in einen gepufferten Bereich (10-2), wobei der gepufferte Bereich in Datenpuffer gleicher Kapazität aufgeteilt ist, und der lineare Bereich Warteschlangen-Steuerungsblöcke (QCB) mit einem Warteschlangen-Steuerungsblock für eine Nachrichten-Eingangswarte-schlange (LIQ) und einem Warteschlangen-Steuerungsblock für eine Nachrichten-Ausgangswarteschlange (LOQ) enthält, die jedem Quellen- oder Zielbenutzer fest zugeordnet sind;
Zuordnen eines Puffersteuerungsblocks, dessen Adresse eine vorherbestimmte Beziehung zur Adresse des jeweiligen Datenpuffers hat, zu jedem Datenpuffer, wobei der Puffersteuerungsblock zur Speicherung von Information bezüglich des zugeordneten Datenpuffers bestimmt ist;
Aufbauen einer Nachrichteneingangs-Warteschlange (LIQ) durch Empfangen einer Nachricht von einem der Quellenbenutzer und ihre Speicherung in freien, dem gepufferten Bereich entnommenen Datenpuffern, Verketten der Puffer durch Einschreiben von Information, die die nächste Pufferadresse anzeigt, in die Puffersteuerungsblöcke und Ausgeben eines Befehls zur Aufnahme in die Warteschlange an ein zentrales Steuerungsmittel (26) so daß Information, die Anfang und Ende der Warteschlangen anzeigt, in die den jeweiligen Quellenbenutzern zugeordneten Warteschlangen-Steuerungsblöcke eingeschrieben wird;
durch ein mit dein Quellenbenutzer verbundenes Empfangssteuerungsmittel (88, 89, 600) Ausgeben eines LIQ betreffenden Befehls an das zentrale Steuerungsmittel (26), die Warteschlange aufzuheben, auf die Feststellung hin, daß LIQ nicht leer wird, so daß man in Antwort darauf die Nachrichtenadresse mit der Identifikation des Warteschlangen-Steuerungsblocks des Zielbenutzers erhält, und die Nachricht die Warteschlange LIQ verläßt;
durch das Empfangssteuerungsmittel (88, 89, 600) Ausgabe eines Befehls für das zentrale Steuerungsmittel (26) zum Einbeziehen in die Warteschlange, der veranlaßt, daß die Nachricht in die Nachrichten-Ausgangswarteschlange (LOQ) des jeweiligen Zielbenutzers aufgenommen wird;
Aktivieren von Übertragungssteuerungsmitteln (88, 89, 602), die der Zieleinheit zugeordnet sind, dergestalt, daß sie auf die Feststellung hin, daß LOQ für die Zieleinheit nicht leer wird, einen Befehl zum Herausnehmen aus der Warteschlange an ein zentrales Steuerungsmittel (26) ausgeben, so daß die Nachricht aus LOQ erhalten und die Übertragung der Nachricht in mit der Zieleinheit verbundene Puffermittel durchgeführt wird.
2. Verfahren nach Anspruch 1, wobei der gemeinsam genutzte Speicher in Seiten organisiert ist, dadurch gekennzeichnet, daß jede Seite m Datenpuffer und einen Steuerungspuffer enthält, der m Puffersteuerungsblöcke umfaßt, wobei jeder Block zur Speicherung von Information bezüglich eines zugeordneten Puffers aus den in Datenpuffern bestimmt ist.
3. Verfahren nach Anspruch 2, dadurch gekennzeichnet, daß die Puffersteuerungsblöcke sich in dem ersten Puffer der Speicherseiten befinden.
4. Verfahren nach den Ansprüchen 1, 2 oder 3, dadurch gekennzeichnet, daß jeder Puffersteuerungsblock enthält:
einen Pufferverkettungsteil (BCCB), welcher zur Speicherung von Information, die die Adresse des nächsten Puffers einer eine Nachricht speichernden Pufferkette anzeigt, bestimmt ist, wobei der Pufferverkettungsteil (BCCP) des letzten Puffers der Kette auf einen festen Wert gesetzt wird, der anzeigt, daß der Puffer der letzte Nachrichtenpuffer ist;
einen Nachrichtenverkettungsteil (MCCB), welcher nur im Puffersteuerungsblock des ersten Puffers der Ketten, die eine Nachricht enthalten, einen signifikanten Wert besitzt, wobei dieser Teil zur Speicherung von Information bestimmt ist, die die Adresse des die nächste Nachricht enthaltenden, nächsten Puffers anzeigt, wobei der Nachrichtenverkettungsteil (MCCB) des ersten Puffers der Kette, die die letzte Nachricht enthält, auf einen festem Wert gesetzt ist, der anzeigt, daß diese Kette die letzte Nachricht enthält;
wobei die Eingangs- und Nachrichten-Ausgangswarteschlangen aufeinanderfolgende Nachrichten mit entsprechenden Warteschlangen-Steuerungsblöcken enthalten können, die die Adresse des ersten Puffers der ersten Nachricht als Warteschlangen-Anfangsinformation und die Adresse des ersten Puffers der letzten Nachricht als Warteschlangen-Endinformation enthalten.
5. Verfahren nach Anspruch 4, dadurch gekennzeichnet, daß die freien Puffer im Speicher eine Warteschlange aus freien Puffern bilden, in welcher die Puffer dank der nächsten Pufferadresse, die in ihren Puffersteuerungsblöcken gespeichert ist, verkettet werden;
ein Warteschlangen-Steuerungsblock (FQCB), der der Warteschlange für freie Puffer zugeordnet ist, und der die Adresse des ersten Puffers der Warteschlange für freie Puffer als Anfangsinformation und des letzten Puffers der Warteschlange für freie Puffer als Endinformation speichert, so daß Puffer aus dem gepufferten Bereich genommen werden können, um eingehende Nachrichten durch Entnahme von Puffern aus der Warteschlange zu speichern, was durch Aktualisieren der Anfangsinformation mit der Adresse des nächsten freien Puffers und Verkettung der der Warteschlange entnommenen Puffer mit den Nachrichteneingangs-Warteschlangen und die Aufnahme der Puffer in die Nachrichteneingangs-Warteschlangen durch Aktualisieren der jeweiligen Warteschlangen-Steuerungsblöcke erreicht wird.
6. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß die Verarbeitung des Warteschlangen-Befehls durch die zentralen Steuerungsmittel folgende Schritte enthält:
Empfangen einer Anforderung zum Einreihen in die Warteschlange von einem Anforderer und Speichern der Nachrichtenadresse und der Warteschlangen-Steuerungsblockidentifikation, die in der Anforderung enthalten sind;
Berechnen der Puffersteuerungsblock-Adresse aus der Nachrichtenadresse;
Lesen der in den Puffer- und Nachrichtenverkettungsteilen enthaltenen Information und Speicherung dieser Information;
Lesen der in dem Warteschlangen-Steuerungsblock enthaltenen Information und Prüfen des Statusfeldes;
Schreiben der Nachrichtenadresse in das Anfangs- und Endfeld des Warteschlangen-Steuerungsblocks, wenn das Statusfeld anzeigt, daß die Warteschlange leer ist, und Setzen des Statusfeldes auf den Wert, der angibt, daß die Warteschlange nicht leer ist;
Erzeugen der Adresse des Puffersteuerungsblocks des ersten Puffers, der die letzte Nachricht der Warteschlange enthält, aus dein Endfeld des Warteschlangen-Steuerungsblocks, und Einschreiben der Nachrichtenadresse in den Nachrichtenverkettungsteil des Puffersteuerungsblocks und in das Endfeld des Warteschlangen-Steuerungsblocks.
7. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß die Verarbeitung des Befehls zum Verlassen der Warteschlange durch die zentralen Steuerungsmittel folgende Schritte enthält:
Empfangen einer Anforderung von einem Anforderer zum Herausnehmen aus der Warteschlange, die die Warteschlangen- Steuerungsblockidentifikation der Warteschlange enthält, aus der Nachrichten entnommen werden sollen,
Lesen des Warteschlangen-Steuerungsblocks und Speichern der aus dem Warteschlangen-Steuerungsblock ausgelesenen Information;
Erzeugung der Puffersteuerungsblock-Adresse des ersten Puffers, der durch das Anfangsfeld des Warteschlangen-Steuerungsblocks identifiziert wird;
Lesen der Pufferverkettung und der Nachrichtenverkettung, die in dein Puffersteuerungsblock enthalten sind und Speichern dieser Information;
Vergleichen des Anfangs- und Endfeldes des Warteschlangen- Steuerungsblocks;
wenn sich das Anfangsfeld von dem Endfeld unterscheidet, Einschreiben der von dem Nachrichtenverkettungsteil ausgelesenen Information in das Anfangsfeld des Warteschlangen- Steuerungsblocks;
wenn das Anfangsfeld gleich dem Endfeld ist, Setzen des Statusfeldes im Warteschlangen-Steuerungsblock auf den Wert, der anzeigt, daß die Warteschlange leer ist;
Senden der Adresse des Puffers, die in dem Anfangsfeld des Warteschlangen-Steuerungsblocks enthalten war, zu dem Anforderer der Anforderung, Nachrichten aus der Warteschlange heraus zunehmen.
8. Verfahren nach Anspruch 1, wobei mindestens ein Mikroprozessor, in dem ein Kommunikationssteuerprogramm abläuft, an den gemeinsamen Bus (24) angebunden ist und Zugriff auf den gemeinsam genutzten Speicher hat, und dadurch gekennzeichnet ist, daß der Mikroprozessor einer der Anzahl der Eingangsbenutzer entsprechenden Anzahl von mikrocodierten Eingangswarteschlangen (MIQ) zugeordnet ist, wobei der Mikroprozessor Befehle zum Einreihen in die Warteschlange zu den zentralen Steuerungsmitteln sendet, welche verursachen, daß die Nachrichten, die in der Nachrichteneingangs-Warteschlange eines Benutzers enthalten sind, in die entsprechende Mikrocode-Eingangswarteschlange aufgenommen werden, wobei der Mikroprozessor Befehle zum Herausnehmen aus der Warteschlange zu den zentralen Steuerungsmitteln sendet, um Nachrichten zu erhalten, sie zu bearbeiten und sie den Nachrichten-Ausgangswarteschlangen der Zielbenutzer durch Senden von Einreihbefehlen bezüglich dieser Warteschlangen zuzuleiten.
9. Vorrichtung zur Übertragung einer Nachricht in einem Kommunikationssystem zwischen Quellenbenutzern und Zielbenutzern durch einen Speicher, wobei der Speicher von den Benutzern gemeinsam genutzt wird und der Zugriff durch die Benutzer über einen gemeinsamen Bus (24) erfolgt, und wobei die Vorrichtung gekennzeichnet ist durch:
Mittel zum Organisieren des gemeinsam genutzten Speichers (10) in einen linearen Bereich (10-1) und in einen gepufferten Bereich (10-2), wobei der gepufferte Bereich in Datenpuffer gleicher Kapazität aufgeteilt ist, und der lineare Bereich Warteschlangen-Steuerungsblöcke (QCB) mit einem Warteschlangen-Steuerungsblock für eine Nachrichteneingangs-Warteschlange (LIQ) und einem Warteschlangen-Steuerungsblock für eine Nachrichten-Ausgangswarteschlange (LOQ) enthält, die jedem Quellen- oder Zielbenutzer fest zugeordnet sind;
Mittel zum Zuordnen eines Puffersteuerungsblocks zu jedem Datenpuffer, dessen Adresse eine vorherbestimmte Beziehung zur Adresse des jeweiligen Datenpuffers hat, wobei der Puffersteuerungsblock zur Speicherung von Information bezüglich des zugeordneten Datenpuffers bestimmt ist;
Mittel zum Aufbauen einer Nachrichteneingangs-Warteschlange (LIQ) durch Empfangen einer Nachricht von einem der Quellenbenutzer und ihre Speicherung in freien, dem gepufferten Bereich entnommenen Datenpuffern, Verketten der Puffer durch Einschreiben von Information, die die nächste Pufferadresse anzeigt, in die Puffersteuerungsblöcke und Ausgeben eines Befehls zum Einreihen in die Warteschlange an ein zentrales Steuerungsmittel (26) so daß Information, die Anfang und Ende der Warteschlangen anzeigt, in die den jeweiligen Quellenbenutzern zugeordneten Warteschlangen-Steuerungsblöcke eingeschrieben wird;
Empfangssteuerungsmittel (88, 89, 600), die dem Quellenbenutzer zugeordnet sind, zum Ausgeben eines LIQ betreffenden Befehls an das zentrale Steuerungsmittel (26), zum Herausnehmen aus der Warteschlange auf die Feststellung hin, daß LIQ nicht leer wird, so daß man in Antwort darauf die Nachrichtenadresse mit der Identifikation des Warteschlangen- Steuerungsblocks des Zielbenutzers erhält, und die Nachricht die Warteschlange LIQ verläßt;
Empfangssteuerungsmittel (88, 89, 600) zum Ausgeben eines Befehls an das zentrale Steuerungsmittel (26) zum Einreihen in die Warteschlange, der veranlaßt, daß die Nachricht in die Nachrichten-Ausgangswarteschlange (LOQ) des jeweiligen Zielbenutzers aufgenommen wird;
Übertragungssteuerungsmittel (88, 89, 602), die der Zieleinheit zugeordnet sind und auf die Feststellung hin aktiviert werden, daß LOQ für die Zieleinheit nicht leer wird, einen Befehl zum Herausnehmen aus der Warteschlange an ein zentrales Steuerungsmittel (26) auszugeben, so daß die Nachricht aus LOQ erhalten und die Übertragung der Nachricht in mit der Zieleinheit verbundene Puffermittel durchgeführt wird.
10. Vorrichtung nach Anspruch 9, gekennzeichnet durch:
Nachrichtenempfangsmittel (86_RCV, 88), die enthalten:
Benutzerpuffermittel (302, 304) zum Zusammenstellen von Nachrichtenblöcken der Quellenbenutzer;
Übertragungssteuerungsmittel (303, 305, 308), die der Warteschlange für freie Puffer freie Puffer entnehmen, die empfangenen Blöcke in die Puffer übertragen, die Nachrichtenpuffer durch Aktualisieren des Verkettungsteils der Nachrichtenpuffer und des Pufferverkettungsteils der Puffer verketten, soweit aufeinanderfolgende Blöcke empfangen werden, um so die Eingangswarteschlangen der Verbindung aufzubauen und den entsprechenden Warteschlangen-Steuerungsblock mit der Warteschlangen-Anfangs- und -Endinformation zu aktualisieren.
11. Vorrichtung nach Anspruch 10, dadurch gekennzeichnet, daß sie enthält:
ein zentrales Steuerungsmittel (26), welches auf Anfrage eines durch Entscheidungsmittel (28) ausgewählten Benutzers Befehle zum Einreihen in die Warteschlange und zum Herausnehmen aus der Warteschlange bearbeitet;
wobei die Befehle zum Einreihen in die Warteschlange veranlassen, daß verkettete Nachrichten durch Aktualisieren der Warteschlangen-Steuerungsblöcke dieser Warteschlange in eine Nachrichtenwarteschlange aufgenommen werden, in Antwort auf eine Nachrichtenadresse, welche die Adresse des ersten Puffers ist, der die Nachricht enthält und auf die Warteschlangen-Steuerungsblockidentifikation, die in der vom Benutzer an die zentralen Steuerungsmittel gesendeten Anforderung zum Einreihen in die Warteschlange enthalten ist;
und die Befehle zum Herausnehmen der Nachrichten aus der Warteschlange veranlassen, daß Nachrichten aus einer Nachrichtenwarteschlange herausgenommen werden, die in der von einem Benutzer an die zentralen Steuerungsmittel gesendeten Anfrage zum Herausnehmen aus der Warteschlange identifiziert wird, welche in Antwort darauf die Nachrichtenadresse, die in dem Warteschlangen-Steuerungsblock der Nachrichtenwarteschlange enthalten ist, an den Benutzer so liefert, daß der Benutzer die in der Warteschlange enthaltenen Nachrichten verarbeiten kann;
12. Vorrichtung gemäß Anspruch 11, dadurch gekennzeichnet, daß, wenn eine Nachricht erfolgreich zu dem Zielbenutzer gesendet worden ist, die zentralen Steuerungsmittel Freigabebefehle verarbeiten, wodurch veranlaßt wird, daß seine Puffer in die Warteschlange für freie Puffer eingereiht werden.
13. Vorrichtung gemäß Anspruch 12, dadurch gekennzeichnet, daß die zentralen Steuerungsmittel enthalten:
ein Befehlsverarbeitungsmittel (90), welches die von den Benutzern erhaltenen Befehle zum Einreihen in die Warteschlange und zum Herausnehmen aus der Warteschlange sowie die Freigabebefehle verarbeitet;
Speichermittel (200, 218) für die Adressen freier Puffer;
Mittel (92), die freie Puffer zur Verfügung stellen, welche Befehle zum Verlassen der Warteschlange bezüglich der Warteschlange für freie Puffer von dem Befehlsverarbeitungsmittel anfragen, um die Adressen freier Puffer, welche in dem Speichermittel (200, 218) für die Adressen freier Puffer gespeichert sind, zu erhalten, so daß diese durch einen Benutzer, der einen freien Puffer benötigt, gelesen werden.
14. Vorrichtung gemäß einem der Ansprüche 9 bis 13, dadurch gekennzeichnet, daß sie enthält:
Nachrichtenübertragungsmittel (86_XMIT, 88), die Übertragungssteuerungsmittel (506) enthalten, welche veranlassen, daß Blöcke der Nachrichten aus den Nachrichten-Ausgangswarteschlangen an die Puffermittel (502, 504) geliefert und dann zu den entsprechenden Benutzern übertragen werden.
15. Vorrichtung nach Anspruch 14, dadurch gekennzeichnet, daß die Nachrichtenempfangsmittel Empfangssteuerungsmittel (88, 89, 600) enthalten, welche, wenn eine Nachrichteneingangs- Warteschlange für einen Quellenbenutzer nicht leer wird, dazu aktiviert werden, einen Befehl zum Herausnehmen aus der Warteschlange von den zentralen Steuerungsmitteln zu verlangen, so daß die Empfangssteuerungsmittel in Antwort darauf die Nachrichtenadresse erhalten, und einen Befehl an die zentralen Steuerungsmittel zum Einreihen in die Warteschlange mittels einer Anfrage zum Einreihen, die die Nachrichtenadresse und den Warteschlangen-Steuerungsblock des Zielbenutzers spezifiziert, erzeugen.
16. Vorrichtung nach Anspruch 15, dadurch gekennzeichnet, daß die Nachrichtenübertragungsmittel Übertragungssteuerungsmittel (88, 89, 602) enthalten, welche, wenn eine Nachrichten-Ausgangswarteschlange für einen Zielbenutzer nicht leer wird, dazu aktiviert werden, einen Befehl zum Herausnehmen aus der Warteschlange an die zentralen Steuerungsmittel mittels einer Anfrage zum Herausnehmen aus der Warteschlange, die den Warteschlangen-Steuerungsblock des Zielbenutzers spezifiziert, auszugeben, so daß die Übertragungssteuerungsmittel in Antwort darauf die Nachrichtenadresse empfangen, um die Übertragung der Nachrichten zu den Puffermitteln in den Nachrichtenübertragungsmitteln auszuführen.
17. Vorrichtung nach Anspruch 16, dadurch gekennzeichnet, daß die Übertragungssteuerungsmittel Nachrichtenübertragungsende-Verarbeitungsmittel (604) enthalten, die vom Benutzer aktiviert werden, wenn eine Nachricht erfolgreich übertragen wurde, um einen Freigabebefehl an die zentralen Steuerungsmittel zu senden, in der Absicht, diese Mittel zu veranlassen, die die Nachricht enthaltenden Puffer in die Warteschlange für freie Puffer einzureihen.
18. Vorrichtung nach einem der Ansprüche 12 bis 17, dadurch gekennzeichnet, daß die Warteschlangen-Steuerungsblöcke ein Statusfeld enthalten, das durch die zentralen Steuerungsmittel 26 am Ende der Verarbeitung der Befehle zum Einreihen in die Warteschlange bzw. zum Herausnehmen aus der Warteschlange auf einem Wert gesetzt wird, der anzeigt, ob die entsprechende Benutzerwarteschlange leer ist oder nicht.
DE3850881T 1988-10-28 1988-10-28 Verfahren und Vorrichtung zur Nachrichtenübertragung zwischen Quellen- und Zielanwender durch einen anteilig genutzten Speicher. Expired - Fee Related DE3850881T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
EP88480067A EP0365731B1 (de) 1988-10-28 1988-10-28 Verfahren und Vorrichtung zur Nachrichtenübertragung zwischen Quellen- und Zielanwender durch einen anteilig genutzten Speicher

Publications (2)

Publication Number Publication Date
DE3850881D1 DE3850881D1 (de) 1994-09-01
DE3850881T2 true DE3850881T2 (de) 1995-03-09

Family

ID=8200503

Family Applications (1)

Application Number Title Priority Date Filing Date
DE3850881T Expired - Fee Related DE3850881T2 (de) 1988-10-28 1988-10-28 Verfahren und Vorrichtung zur Nachrichtenübertragung zwischen Quellen- und Zielanwender durch einen anteilig genutzten Speicher.

Country Status (5)

Country Link
US (1) US5333269A (de)
EP (1) EP0365731B1 (de)
JP (1) JPH0675262B2 (de)
CA (1) CA1320590C (de)
DE (1) DE3850881T2 (de)

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5131082A (en) * 1989-06-09 1992-07-14 International Business Machines Corporation Command delivery for a computing system for transfers between a host and subsystem including providing direct commands or indirect commands indicating the address of the subsystem control block
EP0537401A1 (de) * 1991-10-16 1993-04-21 International Business Machines Corporation Verfahren zum Nachrichtenaustausch zwischen einem gemeinschaftlichen Speicher und Datenübertragungsadaptern, unter Verwendung eines leistungsfähigen, logischen Protokolls
EP0551789A1 (de) * 1992-01-17 1993-07-21 International Business Machines Corporation Einrichtung zur Wiedergewinnung von Puffern in einem Datenverarbeitungssystem
EP0571683A1 (de) * 1992-05-26 1993-12-01 International Business Machines Corporation Mechanismus mit grosser Leistung zur Datenneuausrichtung mit mehrfachen Puffern in einer Speicherzugriffssteuerungsvorrichtung
US5408631A (en) * 1993-03-17 1995-04-18 Unisys Corp. Interface unit circuit with on-chip test simulation
EP0622922B1 (de) * 1993-04-29 2000-11-29 International Business Machines Corporation Verfahren und Gerät für Mehrfachübertragung von Daten in einem Kommunikationssystem
JP3507524B2 (ja) * 1993-06-21 2004-03-15 富士通株式会社 事象報告ワード処理機能を持つデータ処理システム
US6298371B1 (en) * 1993-07-08 2001-10-02 Bmc Software, Inc. Method of dynamically adjusting NCP program memory allocation of SNA network
US5617537A (en) * 1993-10-05 1997-04-01 Nippon Telegraph And Telephone Corporation Message passing system for distributed shared memory multiprocessor system and message passing method using the same
WO1995027248A1 (en) * 1994-03-30 1995-10-12 Apple Computer, Inc. Object oriented message passing system and method
US5649092A (en) * 1994-04-21 1997-07-15 Unisys Corporation Fault tolerant apparatus and method for maintaining one or more queues that are shared by multiple processors
US6247064B1 (en) * 1994-12-22 2001-06-12 Unisys Corporation Enqueue instruction in a system architecture for improved message passing and process synchronization
US5630059A (en) * 1995-02-06 1997-05-13 International Business Machines Corporation Expedited message transfer in a multi-nodal data processing system
GB2301751B (en) * 1995-06-02 2000-02-09 Dsc Communications Control message transmission in telecommunications systems
US5694556A (en) * 1995-06-07 1997-12-02 International Business Machines Corporation Data processing system including buffering mechanism for inbound and outbound reads and posted writes
US5666485A (en) * 1995-06-07 1997-09-09 Samsung Electronics Inc. Software driver for a system bus
US5925099A (en) * 1995-06-15 1999-07-20 Intel Corporation Method and apparatus for transporting messages between processors in a multiple processor system
US5909702A (en) * 1995-09-29 1999-06-01 Intel Corporation Memory address translations for programs code execution/relocation
US5907717A (en) * 1996-02-23 1999-05-25 Lsi Logic Corporation Cross-connected memory system for allocating pool buffers in each frame buffer and providing addresses thereof
JP2001514778A (ja) * 1997-03-13 2001-09-11 マーク・エム・ホイットニー メッセージ・キューイング・ファシリティを含むネットワーク・トランザクションをメインフレームからインテリジェントな入出力装置にオフロードするシステム及び方法
EP0866406A1 (de) * 1997-03-19 1998-09-23 Institute of Computer Science ( FORTH) Meldung des Eingangs von Nachrichten in einem parallelen Rechnersystem
US6477584B1 (en) * 1997-03-21 2002-11-05 Lsi Logic Corporation Message FIFO empty early warning method
US5999969A (en) * 1997-03-26 1999-12-07 Unisys Corporation Interrupt handling system for message transfers in network having mixed hardware and software emulated modules
US5983266A (en) * 1997-03-26 1999-11-09 Unisys Corporation Control method for message communication in network supporting software emulated modules and hardware implemented modules
US6563836B1 (en) 1998-03-19 2003-05-13 International Business Machines Corporation Algorithm for dynamic prioritization in a queuing environment
US6314501B1 (en) * 1998-07-23 2001-11-06 Unisys Corporation Computer system and method for operating multiple operating systems in different partitions of the computer system and for allowing the different partitions to communicate with one another through shared memory
US7020712B1 (en) * 1998-09-30 2006-03-28 Cisco Technology, Inc. Reducing CPU overhead in the forwarding process in an inbound/outbound controller for a router
US6526451B2 (en) * 1998-09-30 2003-02-25 Stmicroelectronics, Inc. Method and network device for creating circular queue structures in shared memory
JP3641147B2 (ja) * 1998-11-18 2005-04-20 富士通株式会社 調停機能付バッファ装置および挿入データ調停方法並びに調停機能付データ挿入装置
JP4109770B2 (ja) * 1998-12-02 2008-07-02 キヤノン株式会社 通信制御方法及び機器
US6408347B1 (en) 1998-12-10 2002-06-18 Cisco Technology, Inc. Integrated multi-function adapters using standard interfaces through single a access point
US7007099B1 (en) * 1999-05-03 2006-02-28 Lucent Technologies Inc. High speed multi-port serial-to-PCI bus interface
US6427180B1 (en) 1999-06-22 2002-07-30 Visteon Global Technologies, Inc. Queued port data controller for microprocessor-based engine control applications
US6976260B1 (en) 1999-09-24 2005-12-13 International Business Machines Corporation Method and apparatus for serializing a message queue in a multiprocessing environment
US7552440B1 (en) * 1999-09-28 2009-06-23 Rockwell Automation Technologies, Inc. Process communication multiplexer
US20020144010A1 (en) * 2000-05-09 2002-10-03 Honeywell International Inc. Communication handling in integrated modular avionics
US6799317B1 (en) * 2000-06-27 2004-09-28 International Business Machines Corporation Interrupt mechanism for shared memory message passing
US6954933B2 (en) * 2000-10-30 2005-10-11 Microsoft Corporation Method and apparatus for providing and integrating high-performance message queues in a user interface environment
US7130916B2 (en) * 2001-02-23 2006-10-31 International Business Machines Corporation Linking frame data by inserting qualifiers in control blocks
US6836480B2 (en) * 2001-04-20 2004-12-28 International Business Machines Corporation Data structures for efficient processing of multicast transmissions
US6684317B2 (en) * 2001-12-21 2004-01-27 Axiowave Networks, Inc. Method of addressing sequential data packets from a plurality of input data line cards for shared memory storage and the like, and novel address generator therefor
US20030185227A1 (en) * 2002-03-29 2003-10-02 International Business Machines Corporation Secondary queue for sequential processing of related queue elements
US8423643B2 (en) * 2003-11-19 2013-04-16 International Business Machines Corporation Autonomic assignment of communication buffers by aggregating system profiles
JP2005165592A (ja) * 2003-12-02 2005-06-23 Matsushita Electric Ind Co Ltd データ転送装置
US7415470B2 (en) * 2004-08-12 2008-08-19 Oracle International Corporation Capturing and re-creating the state of a queue when migrating a session
US9274859B2 (en) * 2006-05-25 2016-03-01 Nvidia Corporation Multi processor and multi thread safe message queue with hardware assistance
US8077974B2 (en) 2006-07-28 2011-12-13 Hewlett-Packard Development Company, L.P. Compact stylus-based input technique for indic scripts
US7949815B2 (en) 2006-09-27 2011-05-24 Intel Corporation Virtual heterogeneous channel for message passing
CN101296130B (zh) * 2008-05-30 2011-04-06 北京同步科技有限公司 一种实现多进程共享端口接收网络通知的系统及其方法
JP4930554B2 (ja) * 2009-07-07 2012-05-16 株式会社日立製作所 入出力制御装置
US8611356B2 (en) * 2009-11-13 2013-12-17 Exalt Communications Incorporated Apparatus for ethernet traffic aggregation of radio links
FR3007542A1 (fr) 2013-06-21 2014-12-26 St Microelectronics Grenoble 2 File d'echange de donnees ayant une profondeur illimitee
US10917314B1 (en) * 2018-08-08 2021-02-09 Amazon Technologies, Inc. Distributed health management using peer leases
CN111651377B (zh) * 2020-06-28 2022-05-20 中国人民解放军国防科技大学 一种用于片内报文处理的弹性共享缓存器

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4015243A (en) * 1975-06-02 1977-03-29 Kurpanek Horst G Multi-processing computer system
JPS5247638A (en) * 1975-10-15 1977-04-15 Toshiba Corp Information processing device
JPS5384658A (en) * 1976-12-30 1978-07-26 Fujitsu Ltd Processing system for inter-processor communication
JPS547252A (en) * 1977-06-20 1979-01-19 Hitachi Ltd Program control system
JPS596410B2 (ja) * 1977-12-05 1984-02-10 富士通株式会社 バツフア領域制御処理方法
IT1126475B (it) * 1979-12-03 1986-05-21 Honeywell Inf Systems Apparato di comunicazione tra piu' processori
US4392200A (en) * 1980-01-28 1983-07-05 Digital Equipment Corporation Cached multiprocessor system with pipeline timing
US4371929A (en) * 1980-05-05 1983-02-01 Ibm Corporation Multiprocessor system with high density memory set architecture including partitionable cache store interface to shared disk drive memory
US4418382A (en) * 1980-05-06 1983-11-29 Allied Corporation Information exchange processor
US4426679A (en) * 1980-09-29 1984-01-17 Honeywell Information Systems Inc. Communication multiplexer using a random access memory for storing an acknowledge response to an input/output command from a central processor
US4509119A (en) * 1982-06-24 1985-04-02 International Business Machines Corporation Method for managing a buffer pool referenced by batch and interactive processes
US4695943A (en) * 1984-09-27 1987-09-22 Honeywell Information Systems Inc. Multiprocessor shared pipeline cache memory with split cycle and concurrent utilization
US4682284A (en) * 1984-12-06 1987-07-21 American Telephone & Telegraph Co., At&T Bell Lab. Queue administration method and apparatus
US4949240A (en) * 1987-03-13 1990-08-14 Kabushiki Kaisha Toshiba Data storage system having circuitry for dividing received data into sequential wards each stored in storage region identified by chain data
US4807111A (en) * 1987-06-19 1989-02-21 International Business Machines Corporation Dynamic queueing method
US5167020A (en) * 1989-05-25 1992-11-24 The Boeing Company Serial data transmitter with dual buffers operating separately and having scan and self test modes
US5230078A (en) * 1991-08-05 1993-07-20 Motorola Inc. Method for a console to quickly monitor a group

Also Published As

Publication number Publication date
DE3850881D1 (de) 1994-09-01
JPH0675262B2 (ja) 1994-09-21
EP0365731B1 (de) 1994-07-27
US5333269A (en) 1994-07-26
EP0365731A1 (de) 1990-05-02
JPH02158858A (ja) 1990-06-19
CA1320590C (en) 1993-07-20

Similar Documents

Publication Publication Date Title
DE3850881T2 (de) Verfahren und Vorrichtung zur Nachrichtenübertragung zwischen Quellen- und Zielanwender durch einen anteilig genutzten Speicher.
DE69429773T2 (de) Zellenvermittlung und verfahren zur weglenkung von zellen durch diese vermittlung
DE69328841T2 (de) Mehrfachprozessorrechnersystem
DE3751091T2 (de) Übertragungsprotokoll zwischen Prozessoren.
DE68927375T2 (de) Arbitrierung von Übertragungsanforderungen in einem Multiprozessor-Rechnersystem
DE69328320T2 (de) Vorrichtung und Verfahren zur Datenübertragung zu und von einem Wirtrechnersystem
DE69030392T2 (de) Zur Kommunikation in asynchroner Übertragungsart geeignetes Puffergerät
DE3642324C2 (de) Multiprozessoranlage mit Prozessor-Zugriffssteuerung
DE69230093T2 (de) Multiprozessorsystem
DE69430627T2 (de) Verfahren und Gerät zur Plannung von Zellenübertragung von virtuellen Kanälen mit garantierter Bandbreite
DE69620070T2 (de) Vielfachknoten-Datenverarbeitungssystem und Verfahren zur Übertragung von Nachrichten in diesem Vielfachknoten-Datenverarbeitungssystem
DE3854361T2 (de) Programmierbare Protokollvorrichtung.
DE69719669T2 (de) Dynamische Peripheriesteuerung von E/A-Puffern in Peripheriegeräten mit modularer Ein-/Ausgabe
DE3853162T2 (de) Gemeinsamer intelligenter Speicher für die gegenseitige Verbindung von verteilten Mikroprozessoren.
DE69230656T2 (de) Universelle Koppeleinrichtung zwischen einem Rechnerbus und einer Steuereinheit einer Gruppe von Periphergeräten
DE69904899T2 (de) Vorrichtung und Verfahren zur Kontrolle der Paketübertragung und der Planung der Reihenfolge der Übertragung der Pakete
DE19531749A1 (de) Verkehrsgestaltungseinrichtung und Paket-Kommunikationsgerät
DE3751487T2 (de) Verfahren zur Steuerung eines Datenübertragungspuffers.
DE68926564T2 (de) Multiprozessor-Belastungsteilungsanordnung
DE60204794T2 (de) Mechanismus zur kennzeichnung und arbitrierung in einem eingabe/ausgabe knoten eines rechnersystems
DE68926091T2 (de) Speicherverwaltung in Systemen mit Datenpaketbetrieb
CH653783A5 (de) Steuereinrichtung, insbesondere fuer fernsprechvermittlungsanlagen.
DE60303444T2 (de) Ablaufsteuerung unter verwendung von quantumwerten und defizitwerten
DE102020111039A1 (de) Geräteunterstützung bestellte und unbestellte transaktionsklassen
DE3851507T2 (de) Flusssteuerungssystem für Bus.

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee