PatentDe  


Dokumentenidentifikation DE3382708T2 10.02.1994
EP-Veröffentlichungsnummer 0250011
Titel Ablauffolgeplanung für gleichzeitig existente Prozesse in einem Mikrocomputersystem.
Anmelder Inmos Ltd., Bristol, GB
Erfinder May, Michael David, Clifton Bristol BS8 3ER, GB
Vertreter Buchner, O., Dr.rer.nat., 81245 München; Neunert, P., Dipl.-Ing. Dr.-Ing.; Westphal, K., Dipl.-Ing.; Mußgnug, B., Dipl.-Phys. Dr.rer.nat., Pat.-Anwälte, 78048 Villingen-Schwenningen
DE-Aktenzeichen 3382708
Vertragsstaaten DE, FR, GB, IT, NL
Sprache des Dokument En
EP-Anmeldetag 18.11.1983
EP-Aktenzeichen 872008669
EP-Offenlegungsdatum 23.12.1987
EP date of grant 11.08.1993
Veröffentlichungstag im Patentblatt 10.02.1994
IPC-Hauptklasse G06F 9/46
IPC-Nebenklasse G06F 15/16   

Beschreibung[de]

Die Erfindung bezieht sich auf Mikrocomputer und insbesondere auf das Einplanen einer Vielzahl von gleichzeitig ablaufenden Prozessen, die in einem Netzwerk verteilt sind, wobei ein Informationsaustausch von Prozeß zu Prozeß erlaubt wird.

Mikrocomputer weisen im allgemeinen einen Prozessor und einen Speicher auf und können entsprechend einer Folge von von einem gespeicherten Programm abgleiteten Befehlen arbeiten. Ein Prozessor kann erforderlich sein, um seine Zeit zwischen einer Vielzahl von gleichzeitig ablaufenden Prozessen zu teilen und dies wird ein Einplanen und erneutes Planen der Prozesse erfordern, um ein Teilen der Prozessorzeit zu erlauben. Darüber hinaus können Prozessoren wünschen, Nachrichten zwischen Prozessen auszutauschen, so daß die Prozesse ein Einplanen und erneutes Planen erforderlich machen, um eine Nachrichtenübertragung zu bewirken.

Es ist ein Ziel dieser Erfindung ein verbessertes Mikrocomputersystem vorzusehen, in welchem eine Vielzahl von gleichzeitig ablaufenden Prozessen in einem Netzwerk von integrierten Schaltungen verteilt sein können, wobei das Bilden einer geplanten Ansammlung von Prozessen auf jeder integrierten Schaltungsanordnung vorgesehen ist und es einem Prozeß erlaubt wird, sowohl mit einem anderen Prozeß auf der gleichen integrierten Schaltungsanordnung als auch mit Prozessen auf anderen integrierten Schaltungsanordnungen Informationen auszutauschen.

Ein weiters Ziel der vorliegenden Erfindung ist es, ein Mikrocomputersystem vorzusehen, bei welchem einen Vielzahl von gleichzeitig ablaufenden Prozessen wirkungsvoll geplant und erneut geplant werden können, während auf dem Chip und außerhalb des Chips ein Informationsaustausch von Prozeß für Prozeß durch Verwendung einer vereinfachten Programmfolge sowohl für einen Informationsaustausch auf dem Chip als auch außerhalb des Chips bewirkt wird.

Sowohl die Seiten 147-152 von Software and Micro Systems, Band 1, Nr. 6, Oktober 1982 als auch die Seiten 666-677 von Communications of the ACM, Band 21, Nr. 8, August 1978 offenbaren Vorschläge, die auf Nachrichtenübertragungen zwischen einer Vielzahl von gleichzeitig ablaufenden Prozessen, die zwischen verschiedenen Schaltungsanordnungen verteilt sein können. Sie offenbaren das Konzept von Eingabe- und Ausgabebefehlen, um einen Informationsaustausch zwischen gleichzeitig ablaufenden Prozessen zu bewirken und zwei Information austauschende Prozesse zu synchronisieren. Sie offenbaren allerdings nicht Multichipnetzwerke mit einer geplanten Ansammlung von Prozessen auf jedem Chip, wobei jeder Prozeß zum Informationsaustausch auf dem Chip und außerhalb des Chips fähig ist. Sie offenbaren keinen Informationsaustausch zwischen zwei gleichzeitig ablaufenden Prozessen durch die Verwendung von getrennt adressierbaren Kanälen, so daß ein Informationsaustausch auf und außerhalb des Chips durch getrennte Kanaladressierung bewirkt werden kann. Sie zeigen auch keine Systeme, in denen die Programmfolgen einschließlich der Informationsaustauschbefehle zum Informationsaustausch auf dem Chip und außerhalb des Chips die gleichen sind.

Die vorliegenden Erfindung sieht ein Verfahren zum Ausführen von gleichzeitig ablaufenden Prozessen in einem Computersystem mit einem Netzwerk von miteinander verbundenen integrierten Schaltungsanordnungen vor, wobei jeder gleichzeitige Prozeß ein Programm mit einer Mehrzahl von Befehlen ausführt, bestehend aus:

Bilden eines jeweils ersten Indikators für jeden Prozeß, um den Prozeß zu identifizieren;

Bilden eines jeweils zweiten Indikators für jeden Prozeß, um eine Programmstufe für den Prozeß anzuzeigen;

für jede integrierte Schaltungsanordnung zeitliches Planen einer Mehrzahl von Prozessen zur Ausführung durch einen Prozessor dieser Anordnung, einschließlich des Anzeigens eines laufenden Prozesses, der vom Prozessor ausgeführt wird, Identifizieren eines oder mehrerer Prozesse, die eine auf die Ausführung durch den Prozessor wartende Ansammlung bilden, in Abhängigkeit von einem die Ausführung des laufenden Prozesses beendenden Befehl, Speichern eines zweiten Indikators für den laufenden Prozeß, Ändern der Anzeige des laufenden Prozesses, um den nächsten Prozeß in der Ansammlung anzuzeigen, und sodann Ausführen des nächsten Prozesses auf einer Programmstufe, die durch den zweiten Indikator des nächsten Prozesses gezeigt wird;

Information austauschen zwischen gleichzeitigen Prozesses durch eine Mehrzahl von getrennt adressierbaren Informationsaustauschkanälen, wobei die Informationsaustauschkanäle jeweils Speicherstellen aufweisen und aus Kanälen der ersten Art bestehen, um den Datenaustausch zwischen Prozessen an der gleichen integrierten Schaltungsanordnung zu gestatten, sowie aus Kanälen einer zweiten Art, um den Datenaustauch zwischen Prozessen an der einen integrierten Anordnung und einer anderen integrierten Schaltungsanordnung zu gestatten, wobei jeder Prozeß eines Informationsaustausch-Prozeßpaares eine Folge von Befehlen in einem Programm einschließlich eines Informationsaustauschbefehles ausführt, wobei diese Folge so ausgebildet ist, daß sie eine Adresse eines Kanals der ersten oder zweiten Art in Abhängigkeit davon identifiziert, ob der andere Prozeß an der gleichen integrierten Schaltungsanordnung oder an einer anderen integrierten Schaltungsanordnung auftritt, die den Informationsaustausch-Befehl umfassende Befehlsfolge die gleiche ist unabhängig von der Art des durch das Kanaladressieren ausgewählten Kanals, und wobei derjenige Prozeß des genannten Paares, welcher der erste zum Ausführen des Informationsaustausch-Befehls ist, in Abhängigkeit von der Ausführung der genannten Folge aus der zeitlichen Planung genommen wird mit einer Speicherung seines Indikators in dem Kanal und sein gespeicherter Indikator verwendet wird, um den Prozeß in Abhängigkeit von der Ausführung der Programmfolge durch den zweiten der genannten Prozesses in dem Paar wieder zeitlich einzuplanen.

Die Erfindung sieht auch einen Mikrocomputer zur Verwendung in einem Netzwerk zur Ausführung des zuvor erwähnten Verfahrens vor, wobei der Mikrocomputer einen Speicher und einen Prozessor auf einer integrierten Schaltungsanordnung aufweist, welche so ausgebildet ist, daß sie eine Mehrzahl von gleichzeitigen Prozessen entsprechend einer Mehrzahl von Programmschritten ausführt, wobei die Programmschritte aus einer Mehrzahl von Befehlen für die aufeinanderfolgende Ausführung durch den Prozessor bestehen, und wobei der Mikrocomputer eine Zeitplanungseinrichtung zur zeitlichen Planung der Ausführung einer Mehrzahl von Prozessen durch den Prozessor aufweist, wobei die Zeitplanungseinrichtung besteht aus:

(i) einer Einrichtung zur Anzeige des laufenden Prozesses, der vom Prozessor gerade ausgeführt wird,

(ii) einer Einrichtung zur Identifizierung eines oder mehrerer Prozesse, die eine auf die Ausführung durch den Prozessor wartende Ansammlung bilden,

(iii) einer Einrichtung zum Addieren eines oder mehrerer weiterer Prozesse zu dieser Ansammlung,

(iv) einer Anzeigeeinrichtung für den nächsten Prozeß, um den Prozeß in der Ansammlung anzuzeigen, der vom Prozessor als nächster ausgeführt werden soll, und

(v) einem Programmstufenanzeiger für jeden gleichzeitigen Prozeß,

einen oder mehrere Austauschkanäle einer ersten Art zum Nachrichtenaustausch zwischen gleichzeitigen Prozessen in der integrierten Schaltungsanordnung, einen oder mehrere Austauschkanäle einer zweiten Art mit Einrichtungen zur Verbindung mit einer anderen integrierten Schaltungsanordnung, um einen Nachrichtenaustausch zu oder von einem Prozeß in einer anderen integrierten Schaltungsanordnung zu ermöglichen, wobei die Kanäle der ersten und zweiten Art jeweils Speicherstellen sowie adressierbare Stellen aufweisen, wodurch Prozeß-Prozeß-Austausche On Chip und Off-Chip durch Auswahl einer geeigneten Kanaladresse bewirkt werden können, Einrichtungen zum zeitlichen Einplanen und Ausplanen von Prozessen, die eine Nachrichtenübertragung durch den Kanal oder die Kanäle der ersten und zweiten Art bewirken, wobei der Prozessor in Abhängigkeit von einer Befehlsfolge einschließlich eines Informationsaustausch-Befehls betätigbar ist, um die Ausführung des laufenden Prozesses durch den Prozessor zu stoppen und den gestoppten Prozeß bei Beendigung des Austausches der genannten Art hinzuzufügen.

Das zuvor erwähnte Verfahren enthält vorzugsweise ein Anzeigen des laufenden Prozesses, der von jedem Prozessor gerade ausgeführt wird, Bewirken eines Informationsaustausches zwischen Prozeßpaaren durch Kanäle der ersten und zweiten Art, wobei jeder Prozessor auf eine Befehlsfolge einschließlich eines Informationsaustausch-Befehls anspricht, um die Ausführung des laufenden Prozesses zu stoppen und eine Anzeige des nächsten Prozesses als laufender Prozeß zu bewirken, wodurch der Prozessor seine Prozeßzeit mit mehreren gleichzeitigen Prozesses teilt und Prozesse zeitlich so einplant, daß er einen Informationsaustausch zwischen gleichzeitigen Prozessen bewirkt und dadurch ein Paar von Informationsaustauschprozessen synchronisert.

Die Erfindung sieht auch ein Netzwerk von miteinander verbundenen, zuvor erwähnten Mikrocomputern erwähnt vor.

Es versteht sich, daß sich der Ausdruck Mikrocomputer auf Computer kleiner Größe bezieht, die im wesentlichen auf integrierten Schaltungsanordnungen basieren, allerdings bedeutet er keine Beschränkung darauf, wie klein der Computer sein kann.

Ein Beispiel eines Mikrocomputers gemäß der vorliegenden Erfindung wird nun anhand eines Beispieles und unter Bezugnahme auf die beigefügten Zeichnungen beschrieben werden.

KURZE BESCHREIBUNG DER ZEICHNUNGEN

Fig. 1 ist ein Blockschaltbild, das die Hauptmerkmale des Mikrocomputers zeigt'

Fig. 2 ist ein detaillierteres Blockschaltbild einiger der in Fig. 1 gezeigten Bestandteile und illustriert im einzelnen vollständiger den Speicher -und die seriellen Verbindungen für einen externen Informationsaustausch,

Fig. 3 zeigt ein weiteres Detail in Blockschaltbildweise eines Teils des Mikrocomputers und illustriert insbesondere die Register, Datenpfade und arithmetische Logik-Einheit der zentralen Datenverarbeitungseinheit sowie das Interface zwischen der zentralen Datenverarbeitungseinheit und anderen Einheiten des Mikrocomputers,

Fig. 4 stellt die Verwendung eines Arbeitsbereiche innerhalb des Speichers dar,

Fig. 5 stellt schematisch eine Form des im Mikrocomputer verwendeten Befehls dar,

Fig. 6 zeigt einen Wellenverlauf der relativen Zeitsteuerung und Dauer einer Mehrzahl von Zeitsteuerungssignalen,

Fig. 7 stellt die Generierung von Zeitsteuerungssignalen dar,

Fig. 8 stellt den Betrieb des Mikrocomputers der Fig. 1 bis 3 mit Operanden variabler Länge dar.

Fig. 9a bis 9b stellen aufeinanderfolgende Operationen einer Art des Informationsaustausches dar, welcher einen Zwei-Wort- Kanal zwischen zwei Prozessen, die vom gleichen Mikrocomputer ausgeführt werden, verwendet,

Fig. 10 stellt die Operation von zwei Information austauschenden Prozessen auf einem Mikrocomputer dar,

Fig. 11 zeigt ein Netzwerk von miteinander verbundenen Mikrocomputern einschließlich dem Detail des seriellen Verbindungsanschlusses zwischen zwei von diesen,

Fig. 12 stellt eine Folge von Operationen zum Bewirken eines Informationsaustausches über serielle Verbindungen zwischen zwei Prozessen dar, welche auf verschiedenen Mikrocomputern ausgeführt werden,

Fig. 13a und 13b stellen das Format der Daten- und Bestätigungspakete zur Übertragung über serielle Verbindungen zwischen zwei Mikrocomputern dar,

Fig. 14 stellt die Operation der zwei gleichen Informationsaustausch-Prozessen von Fig. 10 auf zwei miteinander verbundenen Mikrocomputern dar,

Fig. 15 zeigt ein Logikschaltbild einer seriellen Ausgangsverbindung,

Fig. 16 zeigt ein Logikschaltbild einer seriellen Eingangsverbindung,

Fig. 17 zeigt den Chipaufbau, der für den Mikrocomputer von Fig. 1 verwendet werden kann, und

Fig. 18 zeigt einen alternativen Chipaufbau, der für den Mikrocomputer von Fig. 1 verwendet werden kann.

BESCHREIBUNG VON BEVORZUGTEN AUSFÜHRUNGSFORMEN

Der hier beschriebene Mikrocomputer ist ein Beispiel eines Transputer- (Warenzeichen der Inmos International plc) -Mikrocomputers und umfaßt ein einzelnes Silziumchip, das sowohl einen Prozessor und einen Speicher als auch Verbindungen aufweist, um einen externen Informationsaustausch zu erlauben. Er ist geeignet eine Mehrzahl von gleichzeitig ablaufenden Prozessen auszuführen und ein Einplanen und einen Informationsaustausch zwischen Prozessen sowohl auf dem gleichen oder getrennten Chips zu bewirken. Jeder Mikrocomputer weist mindestens ein K-Byte Speicher in der Form eines programmierbaren RAN auf dem gleichen Chip wie der Prozessor auf und der Prozessor ist dazu geeignet, Programme im Speicher des Chips zu befolgen. Der Mikrocomputer weist eine Mehrzahl von Informationsaustausch-Verbindungen, hier serielle Verbindungen genannt, auf, um ihn zu befähigen, in ein Netzwerk von miteinander verbundenen Mikrocomputern angeschlossen zu sein, so daß irgendein Mikrocomputer als ein Baustein für ein Netzwerk verwendet werden kann. Der Informationsaustausch zwischen zwei beliebigen Mikrocomputern wird durch eine serielle Verbindung bewirkt, die eine oder mehrere spezielle Anschluß-zu-Anschluß-Verbindungen vorsieht, von denen jede zwei und nur zwei Mikrocomputer verbindet. Jede Verbindung wird nicht mit anderen Mikrocomputern oder mit irgendeinem externen Speicher geteilt. Der Mikrocomputer ist mit einer Einrichtung zur Synchronisation bei der Datenübertragung zwischen Mikrocomputern innerhalb des Netzwerkes versehen, so daß ein Informationsaustausch über ein Verbindung zwischen zwei Mikrocomputern entweder durch den empfangenden oder sendenden Mikrocomputer initiiert werden kann.

Der Mikrocomputer enthält ein Programm mit einer Mehrzahl von aufeinanderfolgenden Befehlen, von denen jeder aus zwei Teilen besteht, ein Teil stellt die Funktion des Befehles und der andere Teil stellt Daten dar, die in ein Operandenregister geladen sind. Auf diese Weise ist der Funktionsteil jedes Befehls von der gleichen Bitlänge, ohne Rücksicht auf die Wortlänge des Prozessors und auf dies Weise wird eine Einheitlichkeit des Funktionsformates und der Funktionsbitlänge ohne Rücksicht auf die Wortlänge des Prozessors erreicht. Ein weiteres wichtiges Merkmal des Mikrocomputers ist, daß dessen Operation durch Verwendung eines einfachen und wirkungsvollen Funktionssatzes bewirkt wird. Der Funktionssatz besteht aus einer minimalen Anzahl an Funktionen. Der Funktionssatz enthält direkte Funktionen, welche den Prozessor veranlassen, eine Operation aufgrund der Inhalte der Operandenregister auszuführen. In einer bevorzugten Ausführungsform enthält er auch eine indirekte Funktion und zwei vorbereitende Funktionen. Die Verwendung der indirekten Funktion erlaubt ein große Anzahl von einzusetzenden Prozessoroperationen ohne Erhöhung der Anzahl und Größe der Datenregister, um die Operationen durchzuführen. Des weiteren sorgt die Verwendung einer vorbereitenden Funktion für Operanden variabler Länge.

Durch die Verwendung eines Mikrocomputers gemäß diesem Beispiel kann jedes beliebige Netzwerk eines Mikrocomputers durch eine Verbindung einer Anzahl von Mikrocomputern gebildet werden und das regulierende Netzwerk arbeitet auf die gleiche Weise wie ein einziger Mikrocomputer.

ALLGEMEINE BESCHREIBUNG DES AUFBAUS

Die Hauptelemente des Mikrocomputers sind in Fig. 1 auf einem einzigen Siliziumchip 11 dargestellt, welcher eine p-Wannen- Komplementär-MOS-Technologie verwendet, die detaillierter unter Bezugnahme auf Fig. 17 beschrieben werden wird. Die auf dem Chip vorgesehenen Bestandteile sind in Fig. 1 in Blockform angegeben worden, obwohl es sich versteht, daß die Blöcke nicht dazu beabsichtigt sind, die relative Größe und Position der verschiedenen Bestandteile darzustellen. Auf dem Chip ist eine zentrale Datenverarbeitungseinheit (CPU) 12 vorgesehen, die einige Nur-Lese-Speicher (ROM) 13 enthalten. Die CPU 12 ist mit einer von einer Schnittstellensteuerlogik 15 gesteuerten Speicherschnittstelle 14 verbunden. Die CPU 12 enthält eine arithmetische Logik-Einheit (ALU), Register und Datenpfade, welche detaillierter unter Bezugnahme auf Fig. 3 beschrieben werden. Die CPU 12 und Speicherschnittstelle 14 sind an einen Bus 16 angeschlossen, der eine Verbindung zwischen den Elementen auf dem Chip 11 vorsieht. Ein Betriebssystem 17 ist mit einer Mehrzahl von Eingangsanschlüssen 18 vorgesehen einschließlich einem Nullvoltspannungs-, einem 5-Volt Spannungs-, einem Rücksetzanschluß, der zum Rücksetzen des Mikrocomputers auf einen definierten Zustand aktiviert werden kann, und einem Taktanschluß 28. Der Mikrocomputer ist mit einer umfangreichen Speichermenge auf dem Chip 11 versehen und dies ist durch einen Speicher mit direktem Zugriff RAN 19 und das ROM 20 dargestellt. Die Speichermenge auf dem Chip sollte nicht kleiner als 1 K Byte sein, um eine ausreichende Speicherkapazität zu schaffen, damit der Prozessor 12 ohne externen Speicher betrieben werden kann. Vorzugsweise weist der Speicher auf dem Chip mindestens 4 K Byte auf. Die Unterteilung zwischen RAN und ROM auf dem Chip kann zur Anpassung an die besonderen Anforderungen des Mikrocomputers ausgewählt werden. Der Speicher enthält auch Redundanz 21 (diese kann so sein wie in unserem US-Patent Nr. 4346459 oder US Serial No. 194613 oder GB-Patentanmeldung Nr. 8231055 beschrieben). Dieser Bereich 21 des Speichers weist Reihen und Spalten auf, welche selektiv über Sicherungen, wie gezeigt, verbindbar sind, um defekte Bereiche des Speichers 19 oder 20 zu ersetzen und dadurch die Herstellungsausbeute der Chips, die eingesetzt werden können, zu erhöhen. Der Betrieb des Mikrocomputers enthält eine Zeitsteuerung, welche auf Taktsignale von Anschluß 28 anspricht. Eine externe Speicherschnittstelle 23 ist vorgesehen und an eine Vielzahl von Anschluß 24 zur Verbindung an einen (nicht gezeigten) frei wählbaren Speicher angeschlossen. Um dem Mikrocomputer zu erlauben an andere ähnliche Mikrocomputer für die Bildung eines Netzwerkes angeschlossen zu werden, wird eine Vielzahl von seriellen Verbindungen 25 vorgesehen und in diesem Beispiel sind vier gezeigt. Jede serielle Verbindung 25 weist einen Eingangsanschluß 26 und einen Ausgangsanschluß 27 auf, von denen jeder verwendet werden kann, um ein eine einzelne Anschluß-zu-Anschluß-Verbindung für entsprechende Ausgangs- bzw. - Eingangsanschlusses eines weiteren Mikrocomputers zu bilden. Jede serielle Verbindung ist an eine Synchronisationslogikeinheit 10 angeschlossen, die eine Prozeßplanungseinheit enthält, welche detaillierter unten beschrieben werden wird. Obwohl die Zeichnungen vier serielle Verbindungen 25 zeigen, können drei Verbindungen oder sogar zwei Verbindungen verwendet werden, um ein einzelnes Netzwerk zu bilden, vorzugsweise sind allerdings mindestens sechs und beispielsweise sieben solcher Verbindungen vorgesehen, so daß sie vollständig in beliebig gewünschter Anordnung miteinander verbunden werden können.

ALLGEMEINE BESCHREIBUNG DER VERWENDUNG DES CHIPSPEICHERS UND DER INFORMATIONSAUSTAUSCHKANÄLE UND -VERBINDUNGEN

Fig. 2 zeigt einige der Elemente des Mikrocomputers detaillierter und illustriert insbesondere die Verwendung des Speichers auf dem Chip. Der Mikrocomputer kann verwendet werden, um eine Mehrzahl von gleichzeitig ablaufenden Prozessen auf dem gleichen Chip durchzuführen und in Fig. 2 ist der Betrieb von drei gleichzeitig ablaufenden Prozessen gezeigt worden. Der Speicher wird eingesetzt, um das Programm 30, welches entweder im ROM 20 oder RAN 19 gespeichert sein kann, zu speichern. In diesem Beispiel ist der Mikrocomputer eine 16 Bitwortanordnung, obwohl es sich versteht, daß andere Wortlängen verwendet werden können. Das Programm 30 besteht aus einer Folge von Befehlen, die in diesem Beispiel jeweils 8 Bit lang sind und diese Befehlslänge kann sogar die gleiche bleiben, wenn der Prozessor von 16 Bit abweichende Wortlänge aufweist. Jeder Befehl hat das in Fig. 5 gezeigte Format, bei der die höchstwertigen 4 Bit die Funktion des Befehls und die niederwertigsten 4 Bit Daten darstellen. Das Programm 30 enthält keine anderen Daten als die Daten, die in dem vorbestimmten Teil jedes Befehles gehalten werden. Die Art, in der der Prozessor auf jede Funktion antwortet und die Weise, in der die Daten abhängig von der aus einem Funktionssatz ausgewählten besonderen Funktion behandelt werden, wird unten beschrieben werden, allerdings ist das Format der Funktion und die Datenteile jedes Befehles immer die gleiche. Der Speicher speichert auch die Daten 31, die entweder im ROM 20 oder RAN 19 gespeichert werden können.

Der Mikrocomputer führt eine Reihe von Prozessen gemeinsam durch, wobei seine Zeit zwischen ihnen geteilt wird. Prozesse, die gemeinsam ausgeführt werden, werden gleichzeitig ablaufende Prozesses genannt. Zu irgendeiner Zeit wird nur einer der Prozesses tatsächlich gerade durch den Mikrocomputer ausgeführt und dieser Prozeß wird der laufende Prozeß genannt. Jeder vom Mikrocomputer zu bewirkende gleichzeitig ablaufende Prozeß verwendet einen Bereich des Speichers, der Arbeitsbereich zum Halten der lokalen Variablen und temporären Werte, die durch den Prozeß verändert werden, genannt wird. Die Adresse der ersten lokalen Variablen jedes Arbeitsbereiches wird durch einen Arbeitsbereichszeiger (WPTR) angezeigt. In ähnlicher Weise wird für jeden gleichzeitig ablaufenden Prozeß ein Befehlszeiger (IPTR) verwendet, um den nächsten auszuführenden Befehl aus der Folge von Befehlen im Programm, der sich auf diesen besonderen Prozeß bezieht, anzuzeigen. In Fig. 2, welche drei gleichzeitig ablaufende Prozesses zeigt, ist der Arbeitsbereich für den Prozeß 1 durch das Bezugszeichen 32 angezeigt und die entsprechenden Arbeitsbereiche für die Prozesse 2 und 3 sind mit 33 und 34 markiert worden. Jeder Arbeitsbereich besteht aus einer Mehrzahl von adressierbaren Wortplätzen und ein Wortplatz 35 jedes Arbeitsbereiches wird verwendet, um den Arbeitsbereichszeiger (WPTR) des nächsten auszuführenden Prozesses auf einer Liste von Prozessen, die warten ausgeführt zu werden, zu speichern. Somit wird eine verbundene Liste im Speicher gebildet, welche Zeiger zu einer Folge von Arbeitsbereichen für auszuführende Prozesse enthält. Wenn der Prozessor im Prozeß 1 arbeitet (siehe Fig. 2) und einen Punkt erreicht, wo er angeleitet wird, daß es Zeit ist, diesen ausführenden Prozeß zu stoppen, wird die CPU 12 auf den nächsten Prozeß zu arbeiten beginnen, d. h. auf Prozeß 2. Er wird auf diesen nächsten Prozeß gerichtet sein, indem der Arbeitsbereichszeiger im Speicher bei Platz 35 gelesen wird. In der bevorzugten Ausführungsform gibt es eine bekannte Beziehung zwischen dem Arbeitsbereichszeiger für jeden Prozeß und der Adresse des Arbeitsbereichszeigers des nächsten Prozesses auf der verbundenen Liste, so daß der nächste Teil der verbundenen Liste in einfacher Weise vom Arbeitsbereich des laufenden Prozesses verfügbar ist. Für jeden Prozeßarbeitsbereich speichert ein weiterer Wortplatz 36 den Befehlszeiger (IPTR) für diesen Prozeß. Es versteht sich, daß, obwohl in Fig. 2 nur Arbeitsbereich für drei Prozesse gezeigt sind, die Anzahl abhängig von der Anzahl der gleichzeitig ablaufenden, auszuführenden Prozesse, variiert werden kann.

Um einen Informationsaustausch zwischen verschiedenen Prozessen, die vom gleichen Mikrocomputer ausgeführt werden, zu erlauben, sind eine Mehrzahl von durch die Bezugszeichen 40, 41, 42 und 43 bezeichnete Informationsaustausch-Kanäle im RAN-Abschnitt 19 des Speichers vorgesehen. In diesem Beispiel besteht jeder Informationsaustausch-Kanal aus zwei Wortplätzen im Speicher, einen zur Verwendung, um den Prozeß zu identifizieren, der den Kanal zu verwenden wünscht, und den zweiten, um die über den Kanal auszutauschenden Daten zu halten. Der Betrieb dieser Kanäle wird unter Bezugnahme auf die Fig. 9a-9b vollständiger beschrieben werden. Die Fig. 2 zeigt auch detaillierter die Gestaltung einer seriellen Verbindung 25. Es versteht sich, daß jede der seriellen Verbindungen in ähnlicher Weise gebildet ist. Wie angedeutet, enthält die Verbindung 25 zwei Kanäle 45 und 46, die jeweils einen unidirektionalen Informationsaustausch-Kanal bilden. Auf diese Weise wird der Kanal 45 als Eingangskanal und der Kanal 46 als Ausgangskanal verwendet. Jeder Kanal besteht aus zwei Registern, die jeweils in ähnlicher Weise wie die zwei Wortplätze jedes der Kanäle 40 bis 43 adressierbar sind. Die zwei Register bestehen aus einem Prozeßregister 47, das verwendet wird, um den beim Informationsaustausch beteiligten Prozeß anzuzeigen, und einem Datenregister 48, um die zu übertragenen Daten zu halten. Das Datenregister 48 im Eingangskanal ist an Anschluß 26 und das Datenregister 48 im Ausgangskanal an Anschluß 27 angeschlossen. Der Betrieb der zwei Register 47 und 48 wird durch die Steuerlogik 50 gesteuert, welche an die Synchronisationseinheit 10 angeschlossen ist. Der Betrieb der seriellen Verbindungen, Steuerlogik 50 und Einheit 10 wird detaillierter unter Bezugnahme auf die Fig. 12 bis 16 beschrieben werden.

Der RAN-Abschnitt 19 des Speichers wird eingesetzt, um-die Arbeitsbereiche 32 bis 34 sowie der Informationsaustausch-Kanäle 40 bis 43 vorzusehen und er kann auch eingesetzt werden, um das Programm und die Daten, falls erforderlich, zu halten. Das ROM 20 kann für unterschiedliche Zwecke, wie z. B. Halten eines Übersetzers für eine Hochprogrammiersprache oder zum Speichern von "Nachschlage-" Tabellen für Standardoperationen, eingesetzt werden. Es kann auch verwendet werden, um Steuerprogramme für Peripheriegeräte zu speichern, bei denen der Mikrocomputer für spezielle Zwecke vorgesehen ist.

DATENPFADE UND REGISTER DER CPU

Die zentrale Datenverarbeitungseinheit 12 und deren Betriebsweise wird unter Bezugnahme auf Fig. 3 vollständig verstanden werden.

Die CPU 12 enthält eine arithmetische Logikeinheit (ALU) 55 und eine Vielzahl von Datenregistern, die an drei Datenbusse, Bus X, Bus Y und Bus Z, angeschlossen sind. Die Operation der Register und ihrer Verbindungen mit den Bussen wird durch eine Vielzahl von Schaltern gesteuert, welche schematisch durch das Bezugszeichen 56 dargestellt sind und durch Signale gesteuert werden, welche von einem Mikrobefehlsprogramm, das im ROM 13 enthalten ist, stammen. Es versteht sich, daß diese Schalteinrichtungen im Chipaufbau integriert ausgebildet sind. Ein Informationsaustausch zwischen der CPU und dem Speicher (19, 20, 21) wird über einen zur Speicherschnittstelle 14 führenden unidirektionalen Adreßpfad 61 und einen auch mit der Schnittstelle verbundenen bidirektionalen Datenbus 62 bewirkt. Die Register, Busse 61 und 62 und Busse X, Y, Z sind, wie in Fig. 3 gezeigt, verbunden. Die Register sind folgende:

Abkürzungen Register

MADDR Speicheradreßregister 60, das die Adresse des erforderlichen Speicherplatzes enthält.

IB Befehlspuffer 63, um vom Speicher Befehle mit der in Fig. 5 gezeigten Form sequentiell zu empfangen.

OREGTR Ein Operandenregister 65 zum Empfangen von Daten, die von einem Befehl im Befehlspuffer 63 stammen.

IPTR REG Ein Register 67, das den Befehlszeiger (IPTR) des laufenden Prozesses hält.

DATA OUT Ein Register 70, um Daten zum Speicher auf dem Datenbus zu liefern.

AREGTR Ein erstes (A) Register 71, um einen Operanden für die ALU 55 zu halten.

BREGTR Ein zweites (B) Register 72, das als ein Stapel mit dem AREG zum Halten der Operanden für die ALU 55 angeordnet ist.

WPTR REG Ein Register 73 zum Halten des Arbeitsbereichszeigers (WPTR) des laufenden Prozesses.

LPTR REG Ein Register 74 zum Halten eines Zeiger am Arbeitsbereich des letzten Prozesses auf der Liste der Prozesse, die warten, ausgeführt zu werden.

Wie in Fig. 3 gezeigt, sind auch ein Inkremetierer 66 und ein Byteausrichter 69 vorgesehen.

Der Datenbus 62 ist mit einem Schalter 75 versehen, der betreibbar ist, um die Datenbusleitung 62 vorzuladen. Die Busse X und Y sind jeweils mit ähnlichen Schaltern 76 und 77 versehen, welche betreibbar sind, um die Busse X und Y vorzuladen. Ein weiterer Schalter 78 ist zwischen den Bussen X und Y vorgesehen und betreibbar, um Signale auf den zwei Bussen zu mischen.

Die arithmetische Logikeinheit 55 empfängt Eingangssignale von den außen X und Y und sind zum Ausgeben an den Bus Z betätigbar. Sie sieht über einen Zustandsmultiplexer 9 einen weiteren Ausgang 8 zum Mikrobefehlsprogramm-ROM 13 vor, um die Operation des Datenpfades in Abhängigkeit des Ausgangssignales der ALU 55 zu steuern.

Der Befehlspuffer 63 ist betätigbar, um vom Speicher (19, 20, 21) über die Schnittstelle 14 und den Bus eine Folge von 8 Bit- Wörtern, hier Befehle genannt, zu empfangen, von denen jeder das in Fig. 5 gezeigte Format aufweist und aus zwei Teilen besteht. Ein Teil stellt eine "Funktion" dar, die aus dem unten beschriebenen Funktionssatz ausgewählt ist und der andere Teil stellt Daten dar. Der Befehlspuffer 63 liefert ein Ausgangssignal an einen Dekodierer 64, der den Befehl in die Funktions- und Datenhälften trennt. Die Datenhälfte wird in das Operandenregister 65 geladen und die Funktionshälfte wird dekodiert, um eine Adresse an ein Mikrobefehlsregister (MIR) 80 zu liefern. Die identische Prozedur folgt für alle Befehle nach, unabhängig von der ausgewählten Funktion. Jede vom Befehlspuffer 63 empfangene Befehl lädt eine Adresse in das MIR 80, die das Mikrobefehlsprogramm im ROM 13 veranlaßt, einen oder mehrere die Schalter 56 und die Schnittstellensteuerlogik 15 steuernde Mikrobefehle auszuführen, so daß am Ende jeder Folge von Mikrobefehlen eine Operation von den Registern, der Steuerlogik 15 und den Datenpfaden von Fig. 3 entsprechend der ausgewählten Funktion des Befehles bewirkt worden ist. Die Operation des Mikrobefehlsprogramms wird unten vollständiger beschrieben.

Alle in Fig. 3 gezeigten Register mit Ausnahme des Befehlspuffers 63 und des Mikrobefehlsregisters 80 sind 16-Bit-Register.

Es versteht sich, daß in diesem Beispiel, bei dem der Prozessor ein 16-Bit-Wortprozessor ist, jeder 16-Bitwortplatz im Programm zwei Befehle enthält, weil jeder Befehl nur 8 Bit lang ist. Deshalb muß der Befehlszeiger, der im Register 67 gehalten wird, auf ein spezielles 8-Bit-Byte zeigen zu können, um einen einzelnen Befehl aus einem Programmwortplatz, welcher zwei Befehle enthält, zu identifizieren. Aus diesem Grund wird das Programm 30 (Fig. 2) in diesem Beispiel nur in die untere Hälfte des Speichers 19 geschrieben. In diesem Beispiel weit der Speicher 64 K Worte auf und folglich wird das Programm 30 in die Plätze 0 bis 32767 geschrieben, wodurch die Adressen dieser Plätze durch lediglich 15 Bit dargestellt werden können. Dies läßt ein zusätzliches Bit im Befehlszeiger übrig, welches zum Identifizieren benutzt werden kann, welches der zwei Bytes in jeder Wortadresse notwendig ist, um einen speziellen Befehl zu identifizieren. Das Mikrobefehls-ROM 13 enthält 122 Wörter jeweils mit 68 Bit. Jede Reihe des ROM 13 enthält 68 Bit, so daß das ROM zu beliebiger Zeit 68 Ausgangssignale liefern kann. Die Betriebsweise des Mikrobefehlsprogramms wird unten vollständiger beschrieben werden.

Wie aus Fig. 3 ersichtlich, ist die Schnittstellensteuereinheit 15 mit einer Vielzahl von einzelnen Bitzustandslatchs versehen, welche verwendet werden, um den Zustand der Speicherschnittstelle aufzuzeichnen. Ein Latch 110, das laufendes Latch genannt wird, definiert die Quelle der auszuführenden Befehle. Wenn das Latch 110 den Zustand 1 aufweist, ist der Speicher (dies kann, falls gewünscht, ein externer Speicher über die Schnittstelle 23 sein) die Befehlsquelle. Wenn das Latch den Zustand 0 aufweist, ist die Befehlsquelle eine der seriellen Verbindungen 25, um von einer externen Quelle zu empfangende Befehle zuzulassen. E kann notwendig sein, wiederholt zur gleichen seriellen Verbindung 25 für zwei oder mehrere aufeinanderfolgende Befehle zu gehen, wohingegen, wenn die Befehle vom Speicher stammen, der Befehlszeiger IPTR für jeden Befehl fortgeschaltet wird. Ein IB-Latch 112 nimmt den Zustand des IB- Registers 63 auf. Ein MADDR-Latch 113 nimmt den Zustand des MADDR-Registers auf. Ein MEM ENABLE-Latch 114 nimmt den Zustand der Speicherschnittstelle auf und hat den Zustand 1, immer wenn die Speicherschnittstelle 14 besetzt ist. Ein WRITE-Latch 115 nimmt auf, daß ein Schreibbefehl zum Speicher erzeugt worden ist. Das BYTE-Latch 116 nimmt auf, daß eine Byteanforderung am Speicher erzeugt worden ist. Ein UPPER/LOWER-Latch 117 hält das niederwertigste Bit der Byteadressen und wird vom niederwertigsten Bit des A-Registers 71 geladen, wenn der Inhalt des A-Registers um einen Platz nach rechts geschoben wird.

FUNKTIONSSATZ

Die Funktionselemente der Befehle, die vom Befehlspuffer 63 empfangen werden, werden durch den Funktionssatz des Mikrocomputers bestimmt. Der Funktionssatz ist die Liste von verfügbaren Funktionen, die ausgewählt werden können, wenn ein Programm geschrieben wird und auf das der Mikrocomputer antworten kann.

Es gibt drei Funktionsarten im Funktionssatz.

Direkte Funktionen, die die Inhalte der Operandenregister 65 als Daten verwenden (die Inhalte der anderen Register können auch als Daten verwendet werden).

Eine indirekte Funktion, die die Inhalte des Operandenregisters 65 verwendet, um eine Vielfalt von "Operationen" auszuwählen, welche Daten in anderen Registern als dem Operandenregister 65 verwenden. Die auswählbaren "Operationen" sind unten als Funktionssatz aufgelistet.

Vorbereitende Funktionen, die im Operandenregister 65 Operanden ansammeln.

Der Funktionssatz ist folgender:

FUNKTIONEN
Code-Nr. Abkürzung Name Direkte Funktionen aus dem Arbeitsraum laden zum Arbeitsraum speichern lade Zeiger in Arbeitsraum
lade vom Arbeitsraum und inkrementiere lade vom Vektor speichere zum Vektor lade Wort für Wort addiere Wort für Wort springe auf Null lade Zeiger in den Code rufe die Prozedur auf INDIREKTE FUNKTIONEN arbeite VORBEREITENDE FUNKTIONEN Präfix negativer Präfix

Die Operationen, die durch Verwendung der indirekten Funktionen bewirkt werden können, sind folgende:

Code-Nr. Abkürzung Name umgekehrt gleich Null größer und oder exclusiv oder addiere subtrahiere Prozeß laufe Pause verbinde synchronisiere zurück rotiere Bytes schiebe nach rechts schiebe nach links

Vor der Beschreibung dieser Funktionen und Operationen, wird die hier verwendete Notation dargelegt. Der Transputer-Mikrocomputer wird vorzugsweise mit OCCAM-(Warenzeichen der INMOS International plc)-Sprache verwendet, die insbesondere sowohl in der Broschüre mit dem Titel Programming Manual-OCCAM, 1983 durch Inmos Limited in Großbritannien veröffentlicht und vertrieben als auch von Taylor und Wilson "Process-Oriented Language Meets Demands of Distributed Processing", Electronics (31. Nov. 1982), die beide hiermit durch Bezugnahme eingeführt werden. Die Sprache OCCAM ist insbesondere gut für gleichzeitig ablaufende Prozesse geeignet. Da die bevorzugte Ausführungsform besonders für gleichzeitig ablaufende Verarbeitung geeignet ist, ist die Verwendung der Sprache OCCAM im vorliegenden Beispiel ganz passend. Andere Sprachen können mit einem geeigneten Übersetzer verwendet werden. In der tatsächlichen Anwendung wird der Programmierer ein Programm schreiben, das die Sprache OCCAM verwendet, und ein Übersetzer wird dieses in bestimmte Befehle gewöhnlicher Art übersetzen. Nichtsdestotrotz sind die Funktionen und Operationen in den Befehlen in der Beschreibung für die Sprach OCCAM empfänglich, um zu zeigen, was im bevorzugten Ausführungsbeispiel des hier beschriebenen Mikrocomputers geschieht. Somit wird bei der Beschreibung dieser Funktionen und Operationen als auch den Anwendungsbeispielen die folgende Schreibweise verwendet werden . .

NOTATION 1. PROZESS

Ein Prozeß beginnt, führt eine Reihe von Aktionen durch und endet dann. Jede Aktion kann eine Zuweisung, eine Eingabe oder eine Ausgabe sein. Ein Zuweisungswechsel wechselt den Wert einer Variablen, eine Eingabe empfängt einen Wert von einem Kanal und eine Ausgabe sendet einen Wert an einen Kanal.

Zu jeder beliebigen Zeit zwischen ihrem Start und Ende, kann ein Prozeß bereit sein, um auf einem oder mehreren seiner Kanäle Information auszutauschen. Jeder Kanal sieht eine Einwegverbindung zwischen gleichzeitig ablaufenden Prozessen vor, einer der Prozesse kann nur zum Kanals ausgeben und ein anderer kann nur von ihm empfangen.

Eine Zuweisung wird durch das Symbol ":=". angezeigt. Eine Zuweisung

v:=e

setzt den Wert der Variablen v auf den Wert des Ausdruckes e und endet dann. Zum Beispiel setzt x:=0 x auf Null und x:=x+1 erhöht den Wert von x um 1.

Eine Eingabe wird durch das Symbol "?" angezeigt. Eine Eingabe c?x

gibt einen Wert vom Kanal "c" ein, weist ihm die Variable x zu und endet dann. Eine Eingabe c?ANY

gibt einen Wert vom Kanal "c" ein und verwirft den Wert.

Eine Ausgabe wird durch das Symbol "!" angezeigt. Eine Ausgabe c!e

gibt den Wert des Ausdrucks e an den Kanal "c" aus und endet dann. Eine Ausgabe c!ANY

gibt einen willkürlichen Wert an den Kanal "c" aus.

Der Prozeß SKIP endet ohne Auswirkung.

2. KONSTRUKTION

Eine Anzahl von Prozessen kann kombiniert werden, um eine aufeinanderfolgende, parallele, bedingte oder alternative Konstruktion zu bilden. Eine Konstruktion ist selbst ein Prozeß und kann als Bestandteil einer anderen Konstruktion verwendet werden. Jeder Prozeßbestandteil einer Konstruktion wird in zwei Bereiche weiter vom linken Rand geschrieben, um anzuzeigen, daß er Teil einer Konstruktion ist.

Eine sequentielle Konstruktion wird dargestellt durch SEQ

P1

P2

P3

. . .

Die Prozeßbestandteile P1, P2, P3 . . . werden einer nach dem anderen ausgeführt. Jeder Prozeßbestandteil beginnt nachdem der vorherige endet und die Konstruktion endet nachdem der letzte Prozeßbestandteil endet. Zum Beispiel gibt

SEQ in? x x:=x+l out!x

einen Wert a ein, addiert Eins dazu und gibt dann das Resultat aus.

Eine parallele Konstruktion wird durch

PAR

P1

P2

P3

. . .

dargestellt.

Die Prozeßbestandteile P1, P2, P3 . . . werden zusammen ausgeführt und werden gleichzeitig ablaufende Prozesse genannt. Die Konstruktion endet nachdem sämtliche Prozeßbestandteile beendet wurden. Zum Beispiel erlaubt

PAR

in?x

out!y

eine Eingabe an x und eine Ausgabe von y, um gemeinsam stattzufinden.

Gleichzeitig ablaufende Prozesse tauschen Information unter Verwendung von Kanälen aus. Wenn eine Eingabe von einem Kanal"c" und eine Ausgabe vom gleichen Kanal "c" gemeinsam ausgeführt werden, findet ein Informationsaustausch statt, wenn sowohl die Eingabe als auch die Ausgabe bereit sind. Der Wert wird vom ausgebenden Prozeß dem eingebenden, gleichzeitig ablaufenden Prozeß zugewiesen und eine Ausführung der beiden gleichzeitig ablaufenden Prozesse setzt dann fort.

Eine bedingte Konstruktion

IF

Bedingung 1 P1

Bedingung 2 P2

Bedingung 3 P3

bedeutet, daß der Prozeß P1 ausgeführt wird, wenn die Bedingung 1 wahr ist, andererseits wird der Prozeß 2 ausgeführt, wenn die Bedingung 2 wahr ist und so weiter. Nur einer der Prozesse wird ausgeführt und dann endet die Konstruktion. Zum Beispiel erhöht

IF

x> =0

y:=y+1

x< 0

SKIP

y nur, wenn der Wert von x positiv ist.

Eine alternative Konstruktion

ALT

Eingabe 1

P1

Eingabe 2 P2

Eingabe 3 P3

wartet bis eine der Eingaben 1, Eingaben 2 . . . bereit ist. Wenn zuerst die Eingabe 1 bereit wird, wird die Eingabe 1 ausgeführt und dann der Prozeß 1 durchgeführt. In ähnlicher Weise wird, wenn Eingabe 2 zuerst bereit ist, die Eingabe 2 durchgeführt und dann der Prozeß 2 durchgeführt. Nur eine der Eingaben wird durchgeführt und dann der entsprechende Prozeß durchgeführt und dann endet die Konstruktion. Zum Beispiel:

ALT

zähle ? ANY

Zähler := Zähler +1

total ? ANY SEQ

out! Zähler

Zähler : =0

beide geben ein Signal vom Kanal "zähle" ein und erhöhen die Variable "Zähler" um 1 oder geben alternativ vom Kanal "total" ein und geben den laufenden Wert der Variable "Zähler" aus und setzen dann auf Null zurück.

3. WIEDERHOLUNG

WHILE Bedingung P

führt den Prozeß P wiederholt aus bis der Wert der Bedingung falsch ist. Zum Beispiel

WHILE x> 5

x:=x-5

vermindert x um 5 bis dessen Wert kleiner als 5 ist.

4. VARIABLEN

Eine Variable ist entweder eine einfache Variation, die einem einzigen Wort im Speicher entspricht, oder ist eine einer numerierten Gruppe von Variablen, die ein Vektor genannt werden. Zum Beispiel setzt v [3]:=0 den Wert der Variablen Nummer 3 im Vektor v auf o und v[0]+1 erhöht den Wert der Variablen mit der Nummer 0 um 1.

Eine Variable wird durch eine Erklärung wie z. B.

VAR v:

P

eingeführt, welche v zur Verwendung im Prozeß P einführt.

5. PROZEDUREN

Eine Prozedurdefinition kann einem Prozeß einen Namen geben. Zum Beispiel

PROC sguare (n, sqr) sqr := n * n

definiert die Prozedur "square".

Der Prozedurname kann als eine Abkürzung für den Prozeß verwendet werden. Zum Beispiel

square (x, sqrx)

bedeutet

sqrx := x*hx

6. AUSDRÜCKE

Ein Ausdruck wird aus Operatoren, Variablen, Nummern, den Wahrheitswerten TRUE und FALSE und den Klammern (und) konstruiert.

TRUE ist ein Wert, der nur aus 1 Bit besteht und FALSE ist ein Wert, der nur aus 0 fit besteht.

Die Operatoren +, -, *, / stellen, wie üblich, Addition, Subtraktion, Multiplikation und Division dar.

Für die Operatoren =1< > ,> und wird das Ergebnis wie unten gezeigt erzeugt:

x=y richtig, falls x gleich y ist

x< > y richtig, falls x ungleich y ist

x> y richtig, falls x größer als y ist

x y richtig, falls x kleiner oder gleich y ist.

Für die Operatoren , und > < wird jedes Bit des Ergebnisses aus den entsprechenden Bits der Operanden gemäß der folgenden Tabelle erzeugt:

Für den Operator NOT wird jedes Bit des Ergebnisses aus dem entsprechenden Bit des Operanden gemäß der folgenden Tabelle erzeugt:

x NOT x 0 1

1 0.

Für die Operatoren und

x« wird der Wert von x um y Bits nach links geschoben, freigegebene Bitpositionen werden mit 0-Bits aufgefüllt, x»y wird der Wert von x um y Bits nach rechts geschoben, freigegebene Bitstellen werden mit 0-Bits aufgefüllt.

Die obige allgemeine Schreibweise in der Sprache OCCAM wird nun für den Mikrocomputer des Beispiels angewandt.

Die Registervariablen werden wie folgt definiert:

IPTR stellt die Inhalte des Befehlszeigerregisters 67 dar,

WPTR stellt die Inhalte des Arbeitsbereichszeigerregisters 73 dar,

LPTR stellt die Inhalte des Listenzeigerregisters 74 dar,

AREG stellt die Inhalte des A-Registers 71 dar,

BREG stellt die Inhalte des B-Registers 72 dar,

OREG stellt die Inhalte des Operandenregisters 65 dar.

Eine Übertragung von einem Register zu einem anderen wird durch eine Zuweisung dargestellt, z. B.:

BREG: =AREG

das bedeutet, daß die Inhalte des A-Registers in das B-Register kopiert werden, wobei die vorherigen Inhalte des Registers B ersetzt werden.

Der Speicher im Transputer wird durch einen Vektor dargestellt:

memory

Ein individuelles Wort im Speicher wird durch Billigung des Vektors identifiziert, z. B.:

memory [AREG]

das die Inhalte des Wortes im Speicher meint, dessen Adresse sich in den Inhalten des A-Registers befindet.

Eine Übertragung zwischen dem Speicher und einem Register wird in ähnlicher Weise durch eine Zuweisung, z. B.

memory [AREG] := WPTR

dargestellt, die bedeutet, daß die Inhalte des Wortes im Speicher, dessen Adresse der Inhalt des A-Registers ist, durch die Inhalte des Arbeitsbereichszeigerregisters ersetzt wird.

Drei Prozeduren (PROC) "run", "wait" und "moveto" treten häufig in der folgenden Beschreibung auf. Sie werden wie folgt definiert, wobei die Verbindung [Prozeß] die Inhalte des Prozeßregisters 47 einer seriellen Verbindung 25 darstellt und NIL einen speziellen Wert darstellt, der nicht der Arbeitsbereichszeiger irgendeines Prozesses ist. READY stellt einen weiteren speziellen Wert dar, der von den seriellen Verbindungen verwendet wird:

1 PROC run (w)

2 IF

3 w< > READY

4 SEQ

memory [LPTR - 2] := w

6 LPTR := w

7 w = READY

8 SKIP

1 PROC wait SEQ

3 memory [WPTR - 1] := IPTR

4 für jede externe Anforderung von der seriellen Verbindung

5 SEQ

6 run (Verbindung [Prozeß])

7 Verbindung [Prozeß] := NIL

8 WPTR := memory [WPTR - 2)

9 IPTR := memory [WPTR - 1]

1 PROC moveto (w)

2 SEQ

3 IF

4 WPTR = LPTR

5 LPTR := w

6 WPTR < > LPTR

7 memory [w - 2] := memory [WPWR - 2)

8 WPTR := w

In den obigen Prozeduren sind die Zeilenzahlen aus Gründen einer Bezugnahme in der unten folgenden Erläuterung hinzugefügt worden.

Funktions- und Operationsdefinitionen

Diese werden nun unten unter Verwendung der oben definierten Schreibweise aufgestellt.

vom Arbeitsbereich laden

Definition: SEQ BREG := AREG AREG := memory [WPTR + OREG]

Zweck: um den Wert eines Platzes in den Arbeitsbereich des laufenden Prozesses zu laden.

zum Arbeitsbereich speichern

Definition: SEQ memory [WPTR + OREG] := AREG AREG := AREG

Zweck: um einen Wert in einen Platz im Arbeitsbereich des laufenden Prozesses zu speichern.

den Zeiger in den Arbeitsbereich laden

Definition: SEQ BREG := AREG AREG := WPTR + OREG

Zweck: um einen Zeiger an einen Platz im Arbeitsbereich des laufenden Prozesses zu laden

um einen Zeiger zum ersten Platz eines Vektors von Plätzen im Arbeitsbereich des laufenden Prozesses zu laden

vom Arbeitsbereich laden und inkrementieren

Definition: SEQ BREG := AREG AREG := memory [WPTR + OREG] memory [WPTR + OREG) :=AREG +1

Zweck: um den Wert eines Platzes im Arbeitsbereich des laufenden Prozesses zu laden und den Platz zu inkrementieren

um die Verwendung der Arbeitsbereichsplätze als Ringzähler zu fördern, wobei auf Null inkrementiert wird

um die Verwendung der Arbeitsbereichsplätze als Inkrementierungszeiger auf Vektoren von Wörtern oder Bytes zu fördern.

vom Vektor laden

Definition: AREG := memory [AREG + OREG]

Zweck: um einen Wert von einem äußeren Arbeitsbereich laden

um einen Wert von einem Vektor von Werten zu laden

um einen Wert zu laden, wobei ein Wert als ein Zeiger verwendet wird (Indirektion) - in diesem Fall OREG = 0

zum Vektor speichern

Definition: SEQ memory [BREG + OREG]:= AREG AREG : =BREG

Zweck: um einen Wert in einem Platz in einem äußeren Arbeitsbereich zu speichern

um einen Wert in einem Vektor von Werten zu speichern

um einen Wert zu speichern, wobei ein Wert als ein Zeiger (Indirektion) verwendet wird - in diesem Fall OREG = 0

lade wortweise

Definition: SEQ BREG := AREG AREG := OREG Zweck: um einen Wert zu laden

addiere wortweise

Definition: AREG := AREG + OREG

Zweck: um einen Wert zu laden um einen Zeiger auf einen Platz in einem äußeren Arbeitsbereich zu laden

um einen Zeiger auf einem Platz in einem Vektor von Werten zu laden

springe

Definition: IPTR := IPTR + OREG

Zweck: um eine Vorwärts- oder Rückwärtssteuerung zu übertragen, Schleifen, Ausgänge von Schleifen, Fortsetzung nach bedingten Programmabschnitten vorzusehen

springe nicht auf Null

Definition IF AREG < > o IPTR := IPTR + OREG AREG = 0 SKIP

Zweck: um eine Vorwärts- oder Rückwärtssteuerung zu übertragen, nur wenn ein von Null abweichender Wert geladen ist, wobei eine bedingte Ausführung von Programmabschnitten und bedingten Schleifenausgängen vorgesehen ist

um einen Vergleich eines Wertes mit einer Gruppe von Werten zu fördern

lade den Zeiger in den Code

Definition: SEQ BREG := AREG AREG := IPTR + OREG

Zweck: um in das A-Register die Adresse eines Befehles zu laden, damit die Adressen eines Datenvektors, der ein Teil des Programmes bildet, geladen wird

Prozedur aufrufen

Definition: SEQ memory [WPTR - 1] := IPTR IPTR := AREG AREG := WPTR moveto (WPTR + OREG

Zweck: um einen effizienten Prozeduraufaufmechanismus vorzusehen

um eine Codeteilung zu fördern, bei der zwei identische Prozeduren auf dem gleichen Prozessor ausgeführt werden

Indirekte Funktionen arbeite

Definition: operate (OREG)

Zweck: Durchführen einer Operation, die die Inhalte des Operandenregisters (OREG) als Code verwendet, der die erforderliche Operation definiert.

Vorbereitende Funktionen prefix

Definition: OREG := OREG«4

Zweck: um Befehlsoperanden, die nicht im Bereich 0-15 liegen, darstellen zu können, die einen oder mehrere vorbereitende Befehle verwenden

negative prefix

Definition: OREG := (NOT OREG)«4

Zweck: um negative Operanden darstellen zu können, die einen einzelnen negativen vorbereitenden Befehl verwenden, der von Null oder mehr vorbereitenden Befehlen gefolgt wird.

Operationen reverse

Definition: SEQ OREG := AREG AREG := BREG BREG := OREG

Zweck: um die Inhalte der A- und B-Register auszutauschen

um die Operanden eines asymmetrischen Operators umzukehren, wo dies nicht zweckmäßig in einem Übersetzer getan werden kann

gleich Null

Definition: IF AREG: =TRUE AREG< > 0 AREG:=FALSE Zweck: um zu testen, daß A einen von Null abweichenden Wert hält

um eine logische (allerdings nicht bitweise) Negation durchzuführen

um durchzuführen A = 0 als eqz A < > 0 als eqz, eqz wenn A = 0 als jnz wenn A < > 0 als eqz, jnz

größer

efinition: IF REG > AREG AREG := TRUE BREG < = AREG AREG := PASSE

Zweck: um A und B zu vergleichen (wobei sie als zwei komplementäre Integers behandelt werden), wobei -1 (wahr) geladen wird, wenn B größer als A ist, 0 (falsch) andernfalls

um B< A durch Umkehren der Operanden zu implementieren

um B A als (gt, eqz) und B =A durch Umkehren der Operanden und (gt, eqz) zu implementieren

und

Definition: AREG := AREG BREG

Zweck: um das bitweise UND von A und B zu laden, wobei jedes Bit auf 1 gesetzt wird, wenn die entsprechenden Bit sowohl in A als auch B auf 1 gesetzt sind, andernfalls 0

um zwei wahre Werte logisch mit UND zu verknüpfen

oder

Definition: AREG := BREG AREG

Zweck: um das bitweise ODER von A und B zu laden, wobei jedes Bit auf 1 gesetzt wird, wenn eines der entsprechenden Bit von A und B gesetzt ist, andernfalls 0

um zwei wahre Werte logisch mit ODER zu verknüpfen

exclusive oder

Definition: AREG := BREG AREG

Zweck: um das bitweise exklusive ODER von A und B zu setzen, wobei jedes Bit auf 1 gesetzt wird, wenn die entsprechenden Bit von A und B unterschiedlich sind, andernfalls 0

um bitweise nicht als (1d1 -1, xor) zu implementieren

addier

Definition: AREG:= BREG + AREG

Zweck: um die Summe von B und A zu laden um Adressen von Wörtern oder Bytes in Vektoren zu berechnen

subtrahiere

Definition: AREG := BREG - AREG

Zweck: um A von B zu subtrahieren, wobei das Ergebnis geladen wird

um durchzuführen A = B als sub, egz A < > B als sub, eqz, eqz wenn A = B als sub, jnz, . . wenn A < > B als sub, eqz, jnz, . .

laufender Prozeß

Definition: SEQ memory [AREG - 1] := BREG run (AREG)

Zweck: um einen Prozeß an das Ende der aktiven Prozeßliste hinzuzufügen

pause

Definition: SEQ run (WPTR) wait

Zweck: um temporär einen Stop im laufenden Prozeß durchzuführen

um die Prozessorzeit zwischen den Prozessen zu teilen, die sich gleichzeitig auf der aktiven Prozeßliste befinden

verbinde

Definition: IF memory [ARG]= 0 moveto (memory [AREG + 1]) memory [AREG] < > 0 SEQ memory [AREG] : = memory [AREG - 1] wait ()

Zweck: um zwei parallele Prozesse zu verbinden; zwei Wörter werden verwendet, wobei eines ein Zähler, der andere ein Zeiger aufeinen Arbeitsbereich ist. Wenn der Zählerstand 0 erreicht, wird der Arbeitsbereich gewechselt

synchronisiere

Definition: If memory [AREG] = NIL SEQ memory [AREG] := WPTR wait () memory [AREG] < > NIL SEQ run (memory [AREG)] memory [AREG] := NIL

Zweck: um zwei Prozessen unter Verwendung eines Kanals eines Synchronisierung und eine Kommunikation zu erlauben

zurückkehren

Definition: moveto (AREG) IPTR := memory [WPTR - 1] AREG := BREG

Zweck: um von einer aufgerufenen Prozedur zurückzukehren

Bytes rotieren

Definition: AREG := (AREG«8) (AREG»(Bits pro Wort -8)

Zweck: um die Bytes im A-Register zu rotieren, damit ein 8-Bit Bytewerte kombiniert werden können, um einen einzigen Wortwert zu bilden, damit ein Wortwert in mehrere Bestandteile von 8-Bitwerten geteilt werden kann

nach rechts schieben

Definition: AREG := AREG»1

Zweck: um die Inhalte des A-Registers um einen Platz nach rechts zu schieben

nach links schieben

Definition: AREG := AREG«1

Zweck: um die Inhalte des A-Registers um einen Platz nach links zu schieben

Es ist ersichtlich, das der obige Funktionssatz direkte Funktionen, indirekte Funktionen und vorbereitende Funktionen enthält. Am Beginn der Ausführung eines beliebigen Befehles wird, unabhängig von der für diesen Befehl ausgewählten Funktion, der vorbestimmte Satz von Bitpositionen im Befehlspuffer 63, welche den Funktionsteil des Befehles empfängt, eingesetzt wird, um eine Eingabe an den Dekoder 64 zu liefern, wobei die anderen vorbestimmten Bitpositionen im Befehlspuffer 63, die den Datenteil jedes Befehles darstellen, verwendet werden, um die niederwertigsten vier Bitstellen des Operandenregisters 65 zu laden. Wenn die Funktion eine direkte Funktion ist, agiert der Prozessor dann in Übereinstimmung mit der ausgewählten Funktion auf die Inhalte des Operandenregisters 65. Wenn die Funktion eine indirekte Funktion ist, werden die Inhalte des Operandenregisters 65 eingesetzt, um das Wesen der auszuführenden Operation zu bestimmen und die Operation wird aufgrund von Daten bewirkt, die in anderen Registern gehalten werden. Am Ende eines jeden Befehls, bei dem die Funktion direkt oder indirekt ist, wird das Operandenregister 65 auf Null gelöscht. Wenn die Funktion eine vorbereitende Funktion ist, arbeitet der Prozessor, um existierende Daten im Operandenregister 65 auf Positionen höherer Wertigkeit zu übertragen und dann in freigestellte Positionen niederer Wertigkeit zu übertragen, welche von Datenteilen des Befehles hergeleitet sind.

Am Anfang eines jeden Befehls wird der Befehlszeiger inkrementiert. Folglich zeigt der Befehlszeiger immer auf den nächsten auszuführenden Befehl.

Das Operandenregister 65 wird für verschiedene Zwecke eingesetzt. Die "Daten", die es mit jedem Befehl empfängt, können ein literaler Wert sein, um in einer Berechnung verwendet zu werden oder im Fall einer indirekten Funktion die Definition einer angeforderten Operation sein. Eine weitere wichtige Verwendung ist, daß für einige wichtige Funktionen die Datenwerte im Operandenregister 65 mit den Daten im Arbeitsbereichszeigerregister 73 kombiniert werden, um eine Adresse zu lokalisieren, bei der der Wert einer bestimmten Variablen zu finden ist oder gespeichert werden soll. Beispielsweise wird das Arbeitsbereichszeigerregister 73 den Arbeitsbereichszeiger WPTR des laufenden Prozesses enthalten. Dieser zeigt auf eine Referenzspeicheradresse für den Arbeitsbereich Variablen oder andere Zeiger werden in diesem Arbeitsbereich an Adressplätzen definiert und gespeichert sein, welche um einen bestimmten Wert von der Adresse versetzt sind, die durch den Arbeitsbereichszeiger WPTR angezeigt wird. Dieser Versatz wird im allgemeinen durch einen Befehlsteil spezifiziert und im Operandenregister 65 gespeichert. Tatsächlich wird das Laden und Speichern von den Arbeitsbereichsbefehlen implizit auf einen Speicherplatz verweisen, der durch die Kombination (dargestellt durch die additive Summe) der Inhalte des WPTR-Registers 73 und des Operandenregisters 65 festgelegt ist . Darüber hinaus werden die Inhalte des Operandenregisters 65 mit den Inhalten der anderen Register, wie z. B. des A-Registers 71 oder des IPTR-Registers 67, zum Zugreifen auf die Vektoren oder zum Verzweigen im Programm kombiniert. Beispiele hiervon werden unten gegeben.

Es ist ersichtlich, daß die direkten Funktionen ausgewählt werden, um die am häufigsten angeforderten Aktionen innerhalb des Mikrocomputers abzudecken, damit die Leistungsfähigkeit der Operation maximiert wird. Durch Einsatz von vier Bits, um das Funktionselement jedes Befehles darzustellen, setzt der Funktionssatz die Codes 0 bis 15 ein, obwohl keine Funktion dem Code 12 zugeordnet worden ist. Der Code 13 wird verwendet, um die indirekte Funktion anzuzeigen, die in diesem Fall die Funktion "operate" ist, welche die niederwertigsten 4 Bit des in das Operandenregister 65 in gewöhnlicher Weise zu ladenden Befehles ist, allerdings werden dann die Inhalte dieses Operandenregisters vom Prozessor eingesetzt, um eine Operation aufgrund von in anderen Registern gehaltenen Daten festzulegen. Es versteht sich, daß auf diese Weise die Anzahl der Operationen ausgebaut werden kann, während die Gleichförmigkeit eines 8-Bit-Befehls beibehalten wird. Durch den Einsatz der Präfix- oder negativen Präfixfunktionen vor dem Befehl "operate", können die Inhalte des Operandenregisters 65 variiert werden, um ein viel größere Auswahl an Operationen vorzusehen als oben dargelegt ist. Die Verwendung von pfix und nfix wird unten unter Bezugnahme auf Fig. 8 detaillierter beschrieben werden, jedoch ist es zuerst notwendig, weiter die Betriebsweise des Mikrobefehlsprogrammes 13 zu beschreiben.

Das Mikrobefehlsprogramm ist die Einrichtung zum Erzeugen von Steuersignalen, welche die Schalter 56 und die Schnittstellensteuerlogik 15 (Fig. 3) steuern, um die angeforderte "Funktion" jedes sequentiellen Befehls durchzuführen, der im Befehlspuffer 63 vom Mikrocomputerprogramm ankommt. Das Mikrobefehlsprogramm besteht aus einer Liste von in Reihen und Spalten des ROM 13 gespeicherten Mikrobefehlen. Das ROM 13 sieht einen Ausgangssignal, Mikrowort genannt, vor, welches aus 68 Bit bestehen kann, die jeweils ein Steuersignal liefern und in eine Mehrzahl von unterschiedlichen Feldern aufgeteilt sind, wobei jedes Feld aus einer vorbestimmten Gruppe von Bitpositionen besteht. Das Ausgangssignal wir zu jedem beliebigen Zeitpunkt an ausgewählte Bitpositionen geliefert, abhängig vom ausgewählten Mikrobefehl. Jedes Feld kann sich auf einen bestimmten Bereich der Steuerung beziehen, beispielsweise steuert ein Feld, welches Register an den Bus X angeschlossen wird, ein anderes Feld steuert, welches Register an den Bes Z angeschlossen wird, ein anderes Feld steuert, welches Register an den Bus y angeschlossen ist, ein anderes Feld steuert die Aktion der ALU 55 und ein anderes Feld steuert ein Rückführen der Signale an den Multiplexer 9 und das MIR 80. Ein Feld steuert die Schnittstellensteuerlogik 15 und liefert Mikrobefehlsausgangs- Signale, wie z. B. "READ", "WRITE" und "Next instruction required (NEXT)", um dem Mikroprogramm zu erlauben, den Informationsaustausch zwischen Registern und dem Speicher 19 über die Schnittstelle 14 zu steuern.

Der bestimmte im ROM 13 ausgewählte Mikrobefehl hängt von der Adresse im MIR 80 ab, das ein 7-Bit-Register ist, welches eine Reihen und Spaltenauswahl im ROM 13 vorsieht. Am Beginn jedes durch den Befehlspuffer 63 empfangenen Befehles wird die "Funktion" durch den Dekodierer 64 dekodiert und über den Zustandsmultiplexer 9 hindurchgeführt, um eine Adresse zur Auswahl des Mikrobefehls im ROM 13 vorzusehen. Einige Funktionen brauchen nur einen Mikrobefehl, um die Funktion auszuführen, wobei in diesem Fall das ROM 13 ein Mikrowortausgangssignal liefert, das von der durch den Dekodierer 64 dekodierten Adresse abhängt und die Funktion wird in einem Operationszyklus des ROM 13, welcher hier als Untergruppenzyklus bezeichnet wird, vervollständigt. Andere Funktionen erfordern eine Folge von Mikrobefehlen und deshalb Untergruppenzyklen. In diesem Fall versieht der Dekodierer 64 das MIR 80 mit einer Adresse für das ROM 13, um den ersten Mikrobefehl, der für diese Funktion nötig ist, auszuwählen. Danach fährt das Mikroprogramm fort, eine Folge von Mikrobefehlen auszuführen, wobei jeder einen Untergruppenzyklus übernimmt und jeder Mikrobefehl in ein Feld seines Ausgangsmikrowortes 7-Bit für das MIR 80 liefert, um die Adresse des nächsten in der Folge auszuführenden Mikrobefehls zu identifizieren. Die niederwertigsten zwei Bit des MIR 80 können bedingt gesetzt werden, so daß der nächste Untergruppenbefehl als ein Ergebnis von Zuständen ausgewählt wird, welche durch eine vorherigen Untergruppenzyklus erzeugt wurden, und über den Multiplexer 9 zurückgeführt werden, um die Adresse im MIR 80 herbeizuführen. Dies erlaubt es dem nächsten Mikrobefehl aus vier möglichen Optionen ausgewählt zu werden, abhängig beispielsweise von den Werten in den verschiedenen in Fig. 3 gezeigten Registern. Wenn die zwei bedingten Bit des MIR 80 nicht bedingt gesetzt sind, dann wird der nächste durch die Adresse im MIR 80 angezeigte Mikrobefehl unbedingt ausgeführt. Wenn alle Mikrobefehle ausgeführt worden sind, um eine Operation des Befehls im Befehlspuffer 63 zu erreichen, wird das Steuersignal "NEXT" in einem Feld des Mikrobefehlsausgangssignales des ROMs 13 erzeugt, wodurch der nächste Befehl vom Speicher 19 zum Befehlspuffer 63 angefordert wird.

Jeder Untergruppenzyklus besteht aus zwei Phasen, einer Ursprungsphase und einer Zielphase. Die vom ROM 13 erzeugten Steuersignale fallen in drei Gruppen; jene, welche nur während der Ursprungsphase aktiv sind, jene, welche nur während der Zielphase aktiv sind, und jene, welche während des den gesamten Untergruppenzyklusses aktiv sind. Um das Auftreten und die Dauer der Steuersignale zu steuern, kann die Zeitsteuerung vier verschiedene, in Fig. 6 angezeigte Markierungssignale bereitstellen. Dies sind eine Ursprungsmarkierung 150, eine Zielmarkierung 151, eine Spaltenvorladungsmarkierung 152 und eine Mikrobefehlsmarkierung. Die Ursprungsmarkierung ist ein Zeitsteuerungssignal, das einem Register erlaubt, seine Inhalte auf dem Bus zu plazieren und dessen Dauer lang genug ist, damit die arithmetische Logikeinheit ein Ergebnis bilden kann. Die Zielmarkierungssignale können den Registern erlauben, Daten vom Bus zu akzeptieren. Die Mikrobefehlsmarkierung wird eingesetzt, um die Adresse des nächsten Mikrobefehls vom Zustandsmultiplexer 9 zu erzeugen. Die Spaltenvorladungsmarkierung wird eingesetzt, um die Busleitungen X und Y auf einen hohen Zustand für die nächste Ursprungsmarkierung vorzuladen. Die relativen Zeitabläufe und Zeitspannen dieser Markierungen sind in Fig. 6 gezeigt. Sie werden von der in Fig. 7 gezeigten Anordnung erzeugt. Die Taktimpulse vom Anschluß 28 (Fig. 1) erzeugen ein Signal GEHT für den Anfang jedes Untergruppenzyklusses. Dieses Signal wird durch vier aufeinanderfolgende Verzögerungseinheiten innerhalb der CPU 12 geleitet, so daß die Mikrobefehlsmarkierung 153 vom Ausgang der ersten Verzögerungseinheit 154 abgezweigt wird, die Zielmarkierung 151 wird vom Ausgang der zweiten Verzögerungseinheit 155 abgezweigt, das Spaltenvorladungssignal 152 wird vom Ausgang der dritten Verzögerungseinheit 156 abgezweigt und die Ursprungsmarkierung 150 wird vom Ausgang der vierten Verzögerungseinheit 157 abgezweigt wird. Die Operation des Prozessors ist deshalb zum externen Takteingangssignal 28 synchronisiert.

EINSATZ VON OPERANDEN MIT VARIABLER LÄNGE

Wie bereits oben erläutert, - kann der Mikrocomputer mit Operanden variabler Länge arbeiten. Obwohl jeder Befehl einem Operanden 4 Bitplätze zuweist, ist es möglich, im Operandenregister 65 einen Operanden von bis zu 16 Bit aufzubauen, indem die Funktionen pfix und nfix entsprechend den Codes 14 und 15 im oben aufgestellten Funktionssatz verwendet wen. Diese Operation kann am besten unter Bezugnahme auf Fig. 8 verstanden werden. Diese zeigt das Operandenregister 65 mit vier Abschnitten mit jeweils 4 Bit. Die arithmetische Logikeinheit 55 ist mit vier Abschnitten, die 4 Bit ansteigender Wertigkeit entsprechen, gezeigt und die Verbindung zwischen dem O-Register 65 und der arithmetischen Logikeinheit 55 wird über ein Gate 90 gesteuert, welches selektiv eine Übertragung über den Bus Y zur arithmetischen Logikeinheit steuert. Die Busse X und Y sind jeweils in vier Teile getrennt gezeigt, wobei jeder vier Bit Daten unterschiedlicher Wertigkeit handhabt, z. B. Y[3 : 0] stellt den Teil des Busses Y dar, der die vier Stellen der niedrigsten Wertigkeit handhabt, wohingegen Y [15 : 12] die vier Stellen höchster Wertigkeit handhabt und ähnliches gilt für den Bus Z. Jeder von den niederwertigsten 4 Bit abweichende Abschnitt des Operandenregisters 65 kann über ein Gate 91 vom Bus Z versorgt werden oder kann alternativ eine Null vom Gate 92 zugeführt werden. Der Befehl vom Befehlspuffer 63 in Fig. 8 ist aufgeteilt, so daß die niederwertigsten vier Bit zu den niederwertigsten vier Bitplätzen des O-Registers geleitet werden und das Funktionselement eingesetzt wird, um eine Adresse im Mikrobefehlsprogramm 13, wie zuvor unter Bezugnahme auf Fig. 3 beschrieben, auszuwählen. Die Wahrheitstabelle von Fig. 8 zeigt drei alternative Möglichkeiten, bei der die Funktion weder pfix noch nfix noch keine von beiden entspricht. Sie listet auch die entsprechenden Steuersignale auf, welche auf den Leitungen 100 bis 104 vom Mikrowortausgang des ROM 13 geleitet werden und die Längen von diesen Signalen auf.

Die in diesem Fall eingesetzten Mikrowortausgangssteuersignale sind folgende:

1. OPD NOT 0 - bedeutet, daß das Operandenregister 65 nicht mit Nullen versorgt ist, wenn die Wahrheitstabelle eine "1" aufweist, allerdings mit Nullen versorgt ist, wenn die Wahrheitstabelle eine "0" aufweist.

2. NEXT - bedeutet, daß das Operandenregister 65 mit dem nächsten Operanden vom Befehlspuffer 63 geladen werden wird, wenn die Wahrheitstabelle eine "1" aufweist, allerdings nicht, falls die Wahrheitstabelle eine "0" aufweist.

3.Y FROH OPD - bedeutet, daß der Bus Y den Operanden vom Operandenregister 65 empfängt, wenn die Wahrheitstabelle eine "1" aufweist, allerdings nicht, wenn die Wahrheitstabelle eine "0" aufweist.

4. Z FROH Y - bedeutet, daß der Z-Busausgang von der ALU 55 Daten vom Bus Y empfangen wird, wenn die Wahrheitstabelle eine "1" aufweist, allerdings nicht, wenn die Wahrheitstabelle eine "0" aufweist.

5. Z FROH NOT Y - bedeutet, das die ALU 55 das Signal auf dem Bus Y dazu bringt, zum Bus Z eingefügt und geleitet zu werden, wenn die Wahrheitstabelle eine "1" aufweist, allerdings nicht, wenn die Wahrheitstabelle eine "0" aufweist.

Die Dauer dieser fünf Steuersignale in jedem Untergruppenzyklus ist in Fig. 8 gezeigt, in der S nur die Dauer in der Ursprungsphase, D nur die Dauer in der Zielphase und S + D die Dauer in beiden angibt.

Das Mikrowortsteuersignal auf der Leitung 100 betätigt die Gates 91 und 92, damit sich der Bus Z in das Operandenregister 65 entladen kann als Antwort auf die Funktionen pfix und nfix, wohingegen jede andere Funktion die drei höchstwertigen Stufen des Operandenregisters 65 veranlaßt, durch ein Eingangssignal über das Gate 92 auf Null gesetzt zu werden. Alle Befehle erzeugen das Steuersignal NEXT aufgrund des letzten Untergruppenzyklus und dieses wird auf die Leitung 101 gelegt, um das Operandenregister 65 mit dem nächsten Operanden zu laden. Die Leitung 102 empfängt das Signal "Y FROH OPD" und schließt das Operandenregister über das Gate 90 an den Bus Y sowohl für pfix als auch nfix. Die Leitung 113 empfängt das Steuersignal "Z FROM Y" und veranlaßt die arithmetische Logikeinheit 55, um das Signal auf dem Bus Y für pfix, allerdings nicht für nfix an den Bus Z zu senden. Die Leitung 104 empfängt "Z FROH NOT Y" und erlaubt dem Signal auf Y invertiert und über die ALU 55 an den Z-Bus für nfix, allerdings nicht für pfix angelegt zu werden. Die Signale auf den Leitungen 100, 103 und 104 existieren während der Ursprungs- und Bestimmungsphasen jedes Untergruppenzyklusses, wohingegen das Signal auf der Leitung 101 nur innerhalb der Bestimmungsphase existiert und das Signal auf der Leitung 102 nur in der Ursprungsphase existiert. Wenn die Funktion pfix ist, ist ersichtlich, daß die Signale, die einem wahren Zustand entsprechen, an die Leitungen 100, 101, 102 und 103 angelegt werden und auf diese Weise werden die vier Bit des Operanden im niederwertigsten Abschnitt des Operandenregisters 65 durch die arithmetische Logikeinheit zur nächstwertigen Stufe des Operandenregisters 65 vorgerückt, wodurch weitere vier Bit des Operanden in die niederwertigsten Positionen des Operandenregisters 65 geladen werden können. Diese Operation wird jedesmal wiederholt, wenn ein Befehl mit der Funktion pfix abgenommen wird bis zu einem Haximum von 16 Bit des Operanden. In ähnlicher Weise ist, wenn die Funktion nfix ist, der Prozeß im wesentlichen ähnlich, was das Ermöglichen betrifft, jede aufeinanderfolgenden vier Bit des Operanden in eine höhere Stufe des O-Registers 65 zu schieben, ohne daß Nullen nach jedem Befehl eingeschrieben werden. Dies erlaubt einem negativen Operanden, bis auf ein Haximum von 16 Bit aufgebaut zu werden. Die Wahrheitstabelle zeigt an, daß, wenn die Funktion weder pfix noch nfix ist, das Steuersignal auf der Leitung 100 dazu führt, daß am Ende diese Befehles Nullen in die drei höherwertigen Stufen des O-Registers 65 geleitet werden (die die Bits 15 bis 4 darstellen).

PLANEN VON PROZESSEN

Wie bereits angedeutet, kann der Mikrocomputer eine Anzahl von gleichzeitig ablaufenden Prozesses bearbeiten. Er sieht hierfür ein System zum Planen vor, um festzulegen, welcher Prozeß zu einem beliebigen Zeitpunkt durchgeführt werden soll. Zu einer beliebigen Zeit hält das WPTR-Register 73 (Fig. 3) den Arbeitsbereichszeiger des gerade ausführenden Prozesses. Allerdings bilden der Arbeitsbereich des laufenden Prozesses und die Arbeitsbereiche der anderen Prozesse, die warten, ausgeführt zu werden, eine Liste, in der eine Stelle jedes Arbeitsbereiches den Arbeitsbereichszeiger des nächsten Prozesses auf der Liste hält. Eine andere Stelle in jedem Prozeßarbeitsbereich hält den Befehlszeiger, der den nächsten, für diesen Prozeß auszuführenden Befehl identifiziert, wenn er der laufende Prozeß wird. Darüber hinaus enthält das LPTR-Register 74 die Adresse des Arbeitsbereiches für den letzten Prozeß, der gerade wartet, ausgeführt zu werden. Auf diese Weise können neue Prozesse an das Ende der Liste hinzugefügt werden und das LPTR-Register 74 zeigt immer das augenblickliche Ende der Liste an. Der Prozessor führt normalerweise die Prozesse auf der Liste nur in der Reihenfolge aus, die einen nachfolgenden Prozesse nachfolgt, wenn der augenblickliche Prozeß eine "pause"-Operation (Code 9 in der Operationsliste) ausführt oder wenn der augenblickliche Prozeß sich selbst neu plant, indem eine "join"-Operation (Code 10 in der Operationsliste) oder eine Synchronisieroperation (Code 11 in der Operationsliste) ausgeführt wird. Bei jeder dieser Situationen hört ein augenblicklicher Prozeß auf, weiter Befehle auszuführen und der Prozessor sichert den Befehlszeiger IPTR im Prozeßarbeitsbereich, wie bei 36 in Fig. 2 angezeigt ist, und bewegt sich zum nächsten Prozeß, der durch die Adresse des nächsten Prozesses identifiziert worden ist, was durch 35 in Fig. 2 gezeigt ist, und lädt dann für den neuen Prozeß IPTR in das IPTR-Register 67. Ein Nullprozeß wird vorgesehen und der Nullprozeß läuft ab, wenn kein anderer Prozeß aktiv ist, so daß es immer mindestens einen laufenden Prozeß gibt.

Die oben definierten Prozeduren "run", "wait" und "moveto" werden beim Planen eingesetzt. Ein Prozeß wird "geplant", wenn er der augenblickliche Prozeß ist oder sich auf der verbundenen Liste der Prozesse befindet, welche warten, ausgeführt zu werden. Ein Prozeß wird "ausgeplant", wenn er von der verbundenen Liste genommen wird. Ein ausgeplanter Prozeß wird nie wieder ausgeführt werden, wenn ihn nicht ein anderer Prozeß oder Befehl plant, d. h. ihn an die Ende der verbundenen Liste hinzufügt. Er wird umbenannt werden, daß das LPTR-Register 74 (Fig. 3) eingesetzt wird, um den Arbeitsbereichszeiger für den letzten Prozeß auf der Liste zu speichern. Also muß er immer eingestellt werden, wenn ein Prozeß auf die verbundene Liste hinzugefügt wird. Auch wenn ein Prozeß geplant werden soll, muß die CPU 12 in der Lage sein, zu bestimmen, welcher Befehl als nächstes für den Prozeß ausgeführt werden soll. Dies wird getan, indem der geeignete Befehlszeiger IPTR gespeichert wird, der sich im IPTR-Register 67 befindet, während der Prozeß abläuft. Ein solches Speichern wird zum Beispiel am Speicherplatz 36 (Fig. 2) getan.

Beim Beschreiben dieser Prozeduren ist es zweckmäßig, auf Fig. 4 Bezug zu nehmen, welche die Arbeitsbereiche 32 und 33 am deutlicher sowie die Register 65, 67, 71, 73 und 74 zeigt. Figur 4 zeigt repräsentative Speicheradresse und -inhalte der Arbeitsbereiche.

Der Prozeß, der den Arbeitsbereich 32 aufweist, wird zum augenblicklichen Prozeß gemacht, indem sein Arbeitsbereichszeiger WPTR in das Register 73 eingesetzt wird. In diesem Fall ist WPTR gleich 10000. Wenn der Prozeß der augenblickliche Prozeß wird, findet der Prozessor den nächsten auszuführenden Prozeß durch Prüfen von WPTR-1, d. h. die Inhalte beim Speicherplatz 9999, um einen Zeiger 84 für einem Befehl zu finden und lädt diesen Zeiger in das IPTR-Register 67. Während dies der augenblickliche Prozeß ist, wird der Prozessor die Inhalte des IPTR- Registers 67 verwenden, um zum nächsten Befehl zu zeigen.

Während der Bearbeitung, wird er Variablen verwenden, deren Adressen durch Kombinierung eines Referenzwertes , wie z. B. WPTR oder die Inhalte des A-Registers 71 gebildet werden, und ein Operand in das Register 65 plaziert wird. In einer Ladung der Arbeitsbereichsoperation wird ein Operand "2" erwähnt werden, egal was sich im Speicherplatz 10002 befindet, während der Prozeß, der dem Arbeitsbereich 32 entspricht, am laufen ist. Wenn der Prozeß stoppen soll, wird in der verbundenen Liste nachgesehen. Die Elemente 85 und 86 sind Teil der verbundenen Liste. Der Prozessor wird bei WPTR-2 nachsehen, um WPTR 85 am Speicherplatz 9998 zu finden, welcher auf den nächsten Arbeitsbereich zeigt. Der Zeiger 85 wird die Zahl 11000 enthalten, die auf den Arbeitsbereich 33 zeigt. Wenn der dem Arbeitsbereich 33 entsprechende Prozeß der letzte Prozeß auf der verbundenen Liste ist, dann wird das LPTR-Register 74 den Zeiger 11000 enthalten. Der Nicht-Zeiger 86 wird im Speicherplatz 10998 gespeichert werden, bis ein Prozeß der verbundenen Liste hinzugefügt wird.

Den drei Prozeduren nun zuwendend, wird PROC run (w) verwendet, um einen Prozeß zu planen, der durch w definiert ist, d. h. er wird der verbundenen Liste hinzufügt. Diese Prozedur ist oben definiert worden und nun wird auf diese Definition und die in der Definition verwendeten Zeilenzahlen Bezug genommen.

Wenn der Wert von w der spezielle Wert "READY" ist, wird keine Aktion ausgeführt. Eine weitere Erklärung davon wird später unter Bezugnahme auf Informationsaustausche zwischen verschiedenen Mikrocomputern folgen. Andererseits ist w ein Zeiger auf einen Prozeßarbeitsbereich und die Zeilen 5 und 6 werden aufeinanderfolgend ausgeführt werden. In Zeile 5 bedeutet LPTR die Inhalte des LPTR-Registers 74, das ein Zeiger zur Referenzadresse für den Arbeitsbereich des letzten Prozesses auf der verbundenen Liste ist. Der Speicher, dessen Adresse LPTR-2 ist, würde die Adresse des Arbeitsbereichszeigers für den nächsten Prozeß enthalten, allerdings ist noch keiner da, weil LPTR dem letzten Prozeß entspricht. Die Zeile 5 weist nun w (der Arbeitsbereichszeiger im Prozeß w) dem Speicherplatz LPTR-2 zu, wodurch sich nun der Prozeß w am Ende der verbundenen Liste befindet. An diesem Punkt zeigen die Inhalte des LPTR-Registers 74 nicht auf den letzten Prozeß w' jedoch auf den vorletzten Prozeß. Dies wird in Zeile 6 korrigiert, die in das LPTR-Register 74 den Arbeitsbereichszeiger für den Prozeß w einbringt. Wegen diesen Schritt können weitere Prozesse der verbundenen Liste hinzugefügt werden, ohne den Prozeß w unbeabsichtigt zu löschen, was geschehen würde, wenn das LPTR-Register 74 nicht mit neuen Daten versehen wäre. Unter Bezugnahme auf Fig. 4 würde, wenn nur zwei Prozesse geplant werden, wie gezeigt, und der Prozeß w einem Arbeitsbereich entspricht, dessen Zeiger 12000 ist, PROC run (w) 12000 in den Speicher [10998] und 12000 in das Register 74 eingeben.

Die "wait" genannte Prozedur kann allein oder zusammen mit PROC run (w) eingesetzt werden. Es plant von selbst den laufenden Prozeß aus und gibt das System frei, um den nächsten Prozeß auszuführen, wobei er ausgeführt wird, wo er in sein Programm paßt, anstelle von dessen ersten Befehl. Nun wird Bezug auf die vorherige Definition PROC wait genommen. Wenn die Prozedur "wait" aufgerufen wird (Zeile 1), wird eine Sequenz (Zeile 2) mit vier Schritten begonnen (Zeilen 3, 4, 8 und 9) Die Zeilen 4-7 beziehen sich auf externe Anforderungen und eine Diskussion hiervon kann verschoben werden, obwohl eine Verbindung [Prozeß] die Inhalte des Prozeßregisters 47 der seriellen Verbindung 25 (Fig. 2) darstellt. In Zeile 3 ist memory [WPTR-1] der Speicherbereich bei der Adresse WPTR-1, die auf der Bezugsadresse WPTR des augenblicklichen Prozeß basiert ist. Dieser Speicherplatz wird in der bevorzugten Ausführungsform verwendet, um zum nächsten auszuführenden Prozeß zu zeigen, wenn der Prozeß wiederbegonnen wird. Die Inhalte des IPTR-Registers 67 zeigen immer auf den nächsten auszuführenden Befehl für den laufenden Prozeß. Also speichert Zeile 3 einfach im Speicher (vorzugsweise auf dem Chip) den Zeiger auf den nächsten auszuführenden Befehl. Wenn die Prozedur PROC run (w) dem PROC wait vorangegangen war, dann wird zu dieser Zeit der laufende Prozeß (w) am Ende der verbundenen Liste hinzugefügt worden sein (durch PROC run(w) wird das LPTR-Register 74 mit neuen Daten (auch durch PROC run (w)) versehen worden sein) und nun wird der Zeiger auf den nächsten Befehl für den Prozeß w an einem bekannten Platz, memory [WPTR-1], gespeichert worden sein, was die Arbeitsbereichszeigeradresse (WPTR) für den Prozeß w betrifft. Somit ist der Prozeß w bereit, um nun deaktiviert zu werden. Die Zeile 8 schaut auf die verbundene Liste für den nächsten Prozeß. Dessen Arbeitsbereich wird durch die Inhalte bei der Adresse WPTR-2 des augenblicklichen Arbeitsbereich angezeigt. Also weist Zeile 8 dem WPTR-Register 73 den Arbeitsbereichszeiger für den nächsten Prozeß auf der verbundenen Liste zu. Nun wurde die Adresse fortgeschaltet und das System findet als nächstes heraus, welcher für diesen Prozeß der nächste Prozeß ist, indem zum Zeiger, der im Speicher, dessen Adresse WPTR-1 ist, gespeichert ist, geschaut wird. Um Fig. 4 zu ,verwenden, beachte man, daß der Arbeitsbereich 32 gerade läuft und dessen Prozeß einen Befehl empfängt, die PROC wait enthält. Anfänglich ist WPTR 10000. In Zeile 8 wird das Register 73 auf die Inhalte gesetzt, die an der Speicheradresse 9998 gefunden werden, welche der Zeiger 11000 sein wird. In Zeile 9 wird das Register 67 mit dem Befehlszeiger gesetzt, der bei der Speicheradresse 10999 gefunden wird. Somit wird der augenblickliche Prozeß, wenn PROC run (w) von PROC wait gefolgt wird, an das Ende der Liste hinzugefügt (dessen Arbeitsbereichszeiger wird auf der verbundenen Liste gespeichert), der Zeiger auf dessen nächsten Befehl wird im Speicher gespeichert, er wird deaktiviert und der nächste Befehl auf der verbundenen Liste wird begonnen, wobei am passenden Befehl begonnen wird. All das wird getan, indem nur vier Register verwendet werden. Diese Anordnung erlaubt das Planen und Ausplanen von Prozessen, die von der Anzahl her nur durch die Menge des Speichers im System begrenzt sind.

Die mit "moveto" bezeichnete Prozedur kann eingesetzt werden, um den Arbeitsbereichsreferenzzeiger auf eine verschiedene Adresse im Arbeitsbereich für den laufenden Prozeß zu setzen, ohne daß notwendigerweise auf einen neuen IPTR gewechselt wird. Somit könnte moveto (10200), wenn ein Prozeß seinen Referenzarbeitsbereichszeiger auf 10000 hat, verwendet werden, um die Register für einen Wechsel des Referenzzeigers auf 102)) für den gleichen Prozeß setzen. Dies wird im folgenden unter Bezugnahme auf die vorherige Definition von PROC moveto (w) beschrieben werden. Die Zeile 2 der Definition erklärt, daß dies ein Folge von Schritten ist. Die Zeilen 3 und 8 sind in gleicher Weise vom linken Rand versetzt, so daß sie beide in Folge ausgeführt sein werden. Angenommen wird, daß sich das System nicht im letzten Prozeß befindet. Also wird Zeile 4 falsch sein, so daß das System auf Zeile 6 springen wird. Die Bedingung in Zeile 6 wird wahr sein, so daß Zeile 7 ausgeführt werden wird. Die Zeile 7 setzt die Inhalte der Speicheradresse w-2 auf den Arbeitsbereichszeiger für den nächsten Prozeß auf der verbundenen Liste. Als nächstes ändert Zeile 8 die Inhalte des WPTR-Registers 73 auf den Wart w. Nun zeigt das Register 73 auf eine neue Referenzadresse für den laufenden Prozeß. Beim üblichen Versatz (minus 2) von dieser neuen Referenzadresse wird ein Zeiger zum Arbeitsbereich für den nächsten auszuplanenden Prozeß gefunden werden. Für den Fall, daß es keinen nächsten Prozeß gibt, dann wird Zeile 4 wahr werden und das LPTR-Register 74 wird seine Inhalte eingestellt haben, um auf w als Referenzadresse für den letzten Prozeß (Zeile 5) zu zeigen, nachdem das Register zum Halten eines Zeigers auf die Referenzadresse des laufenden Prozesses eingestellt sein wird, um auf w zu zeigen.

Nachdem nun Fig. 4 unter Bezugnahme auf das Planen beschrieben wurde, werden einige Funktionen und Operationen unter Bezugnahme auf Fig. 4 weiter beschrieben werden.

load from workspace

Die Funktion "load from workspace" kopiert die Inhalte an einen speziellen Speicherplatz und legt sie implizit im A-Register ab. Diese Funktion und Konfiguration der bevorzugten Ausführungsform bezieht sich implizit auch auf einen Speicher, dessen Adresse durch einen Versatz vom augenblicklichen Arbeitsbereichszeiger, der als Referenz dient, definiert ist. Diese Referenzadresse ist immer im WPTR-Register 73 gespeichert und der Versatz ist im Operandenregister 65 enthalten. Der Ausdruck "memory [WPTR + OREGE] bezieht sich deshalb auf die Inhalte des Speichers, dessen Adresse durch Addition (Summierung) der Inhalte des WPTR-Registers 73 und Registers 65 gefunden wird. Ein "load" bezieht sich auf das A-Register 71 und die Inhalte des Stapels werden durch ein Register nach unten geschoben, d. h. die Inhalte des A-Registers werden in das B-Register geschoben (um Platz für die in AREG zu ladenden Daten zu schaffen) und die Inhalte von BREG werden in das C-Register geladen, falls vorhanden. Unter Bezugnahme auf Fig. 4 bedeutet "load from workspace", die Codes 0 2 verwendend, lade die Variable 2 in das A-Register.

Dieser Befehl "store to workspace" meint implizit, bewege, was immer sich im A-Register 71 befindet, zum Speicherbereich, dessen Adresse von der Referenzadresse (die im WPTR-Register 73 enthalten ist) um den im Operandenregister enthaltenden Versatz versetzt ist. Auch der Stapel bewegt sich nach oben (BREG bewegt sich in das ARGE und CREG bewegt sich in das BREG). Bezugnehmend auf Fig. 4, bedeutet diese Funktion dann, wenn WPTR=10000 und OREG =1 ist, speichere die Inhalte des A-Registers 71 im Speicher auf den Speicherplatz 10001, das die Variable 1 ist.

load pointer into workspace

Die Funktion "load pointer into workspace" speichert keine Daten im Arbeitsbereich. Statt dessen lädt sie das A-Register mit einem Zeiger auf einen besonderen Platz im Arbeitsbereich. Dies wird z. B. in Verbindung mit dem Befehl "load from vector" verwendet, der auf einen besonderen Teil des Vektors Bezug nimmt, der im Arbeitsbereich gespeichert werden kann. Somit wird unter Bezugnahme auf Fig. 4 auf einen Arbeitsbereich 32 durch den Arbeitsbereichszeiger WPTR, der 10000 ist, Bezug genommen. An einem bekannten Platz innerhalb des Arbeitsbereiches kann sich ein Vektor befinden. Der Vektor wird eine Vielzahl von Plätzen, wie z. B. 10200, 10201 und 10202 aufweisen. Der Anfang des Vektors wird ein bestimmter Versatz (200) weg vom Arbeitsbereichs- Zeiger (10000) sein. Somit wird, um den Anfang des Vektors zu finden, der Versatz (200) in das Operandenregister 65 geladen werden und dann wird der Befehl "load pointer into workspace" die Adresse 10200 in das A-Register plazieren, welches auf den Anfang des Vektors zeigt. Danach wird die Operation "load from vector" verwendet werden, um bestimmte Speicherplätze unter Bezug auf den Anfang des Vektors zu finden und deshalb wird er den Versatz im Operandenregister 65 verwenden, jedoch in Verbindung mit dem A-Register 71 anstelle des Arbeitsbereichszeigerregisters 73.

load literal

Der Befehl "load literal" lädt, was immer sich im Operandenregister 65 befindet, wortweise in das A-Register 71 (die Spitze des Auswertungsregisters). Unter Bezugnahme auf Fig. 5 werden die letzten vier Bit jedes, beliebig gegebenen Befehls in das Operandenregisters 65 geladen werden, allerdings können durch Verwendung der vorbereitenden Befehle mehr als vier Bit im Operandenregister geladen werden. Aus illustrativen gründen wir jedoch ein Befehl mit den Codes in Dezimaldarstellung von 6 13 bedeuten, lade die Zahl 13 in das A-Register 71 und schiebe die vorherigen Inhalte des A-Registers in das B-Register 72.

jump

Der Befehl "jump" wird zur Verzweigung in einem Programm eingesetzt. Der für den laufenden Prozeß als nächstes vom Prozessor auszuführende Prozeß ist durch die Inhalte des IPTR-Registers 67 angezeigt, das den Befehlszeiger enthält. Der Springbefehl fügt die Inhalte des Operandenregisters 65 dem Befehlszeiger hinzu. Durch die Verwendung der vorbereitenden Funktionen kann der Befehlszeiger Werte aufweisen, die hinzuaddiert oder davon subtrahiert wurden, um nach vorn oder hinten in einem Programm zu springen.

call procedure

Die Funktion "call procedure" verwendet die Prozedur "moveto", die oben beschrieben wurde. "Call procedure" speichert zuerst IPTR im Speicher an einem üblichen Platz für den nächsten auszuführenden Befehl (z. B. Speicherplatz 9999 in Fig. 4) Als nächstes überträgt sie die Inhalte des A-Registers 71 in das Befehlszeigerregister 67, das mit dem Zeiger auf einen nächsten auszuführenden Befehl geladen worden sein werden, nachdem die Funktion "call procedur" abgeschlossen ist. Dann wird das A- Register 71 mit dem Arbeitsbereichszeiger geladen. Dem folgend, wechselt die Prozedur "moveto" zum Referenzzeiger WPTR, so daß er normalerweise auf eine andere Adresse im laufenden Arbeitsbereich zeigt. Es sei daran erinnerte daß die Prozedur "moveto ()" die Inhalte des WPTR-Registers 73 auf das setzen wird, was immer sich innerhalb der dem Wort "moveto" folgenden Klammer befindet. Somit weist das System nun nach einer "call procedure" den Arbeitsbereichszeiger auf einen anderen Platz zeigend auf, innerhalb des gleichen Arbeitsbereiches im laufenden Prozeß und ist vorbereitet, um einen anderen Befehl auszuführen, der zuvor im A-Register 71 enthalten war. Die umgekehrte Operation wird durch Verwendung der RETURN-Operation bewirkt.

Dies Operation "run process" wird im allgemeinen bei der Bildung eines Prozesses eingesetzt, der seinen eigenen Arbeitsbereich und Satz von Befehlen aufweist. Das A-Register 71 wird mit einem Arbeitsbereichszeiger für den Arbeitsbereich für den neuen Prozeß geladen worden sein und das B-Register 72 wird mit einem geeigneten Befehlszeiger für den neuen Prozeß geladen worden sein. Die Operation "run process" speichert den Befehlszeiger im Speicher an der geeigneten Stelle versetzt vom Arbeitsbereichszeiger und dann ruft sie die oben beschriebene Prozedur PROC run () auf, welche, wie oben diskutiert, den in den Arbeitsbereichszeiger in der Klammer verwendet. Wie diskutiert, wird dies den neuen Prozeß planen, d. h. sie wird den neuen Prozeß zur verbundenen Liste hinzufügen.

pause

Die Operation "pause" erscheint in einem Programm, um jeden einzelnen Prozeß zu hindern, die ALU 55 ausschließlich von anderen Prozessen zu benutzten. Diese Operation wird in Schleifen durch den Compiler eingefügt. Dies Operation fügt den laufenden Prozeß an das Ende der verbundenen Liste hinzu, speichert die notwendigen Zeiger, veranlaßt den laufenden Prozeß dazu, die Ausführung für die Zeit zu beenden und macht den nächsten Prozeß auf der verbundenen Liste zum laufenden Prozeß. Die Inhalte des Auswertungsstapel werden nicht erhalten, weil "pause" zu einer Zeit ausgeführt wird, wenn solche Inhalte ohne Beschädigung des Prozesses gelöscht werden können.

join

Diese Operation "join" wird z. B. verwendet, wenn gleichzeitig ablaufende Prozesse erscheinen und ist dazu vorgesehen, daß sie alle an einem Punkt im Programm zu gleichen Zeit sein sollten. Betrachtet man einen ursprünglichen Prozeß P(0), der an einem bestimmten Punkt im Programm ist, spreizt sich P(0) in n gleichzeitig ablaufende Unterprozesse P(1), P(2), P(3) . . . P(n) auf. Wenn dies getan ist, ist ein letzter Prozeß P(n+1) auszuführen. Allerdings sollte ein solcher letzter Prozeß nicht auftreten bis alle P(1) . . . P(n) beendet wurden. Die Operation "join" wird hierfür verwendet. Ein Zähler wird im Arbeitsbereich eingerichtet und das A-Register 71 zeigt auf den Speicher, bei dem der Zählerstand gespeichert ist. Der Zählerstand entspricht der Anzahl von Unterprozessen, die noch aktiv sind (nicht beendet). Jeder Unterprozeß endet mit einer Operation "join". Nachdem ein Unterprozeß seine Operation "join" erreicht, überprüft er seinen Zählerstand. Wenn der Zählerstand Null ist, dann geht das Programm unter Verwendung der Prozedur "moveto" zum letzten Prozeß. Wenn der Zählerstand nicht Null ist, wird der Zählerstand um Eins dekrementiert und dann wird der Unterprozeß, wie oben beschrieben, veranlaßt zu "warten". Die anderen Unterprozesse werden ausgeführt bis der Zählerstand Null erreicht ist.

synchronise

Die Operation "synchronise" ist für gleichzeitig ablaufende Prozesse besonders wichtig, da dessen Verwendung sicherstellt, daß zwei Prozesse zu einem Zeitpunkt am gleichen Punkt sein werden. Dies wird weiter in Verbindung mit Fig. 9 und der Erläuterung, die "Informationsaustausch zwischen Prozessen auf dem gleichen Mikrocomputer" genannt ist, diskutiert werden. Allerdings kurz gesagt, wenn zwei Prozesse X und Y auf dem gleichen Chip miteinander zu kommunizieren wünschen, angenommenerweise, weil ein Prozeß Daten berechnet, die der andere Prozeß benötigt, wird ein Kanal 40, 41, 42 oder 43 (Fig. 2) verwendet. Jeder Prozeß wird eine Operation "synchronise" aufweisen. Der erste die Operation "sync" erreichende Prozeß wird auf den Kanal schauen. Die Kanaladresse wird in das A-Register 71 geladen worden sein, womit sich "memory [AREG]" auf den Kanal bezieht. Der Ausdruck "NIL" bezieht sich auf eine vorbestimmte Größe, die als eine Null erkannt ist. Wenn NIL durch den ersten Prozeß in einem ersten Teil des Kanales gefunden wird, wird ein solcher Prozeß seinen Arbeitsbereichszeiger in den ersten Teil des Kanales plazieren und sich dann selbst ausplanen. Er wartet nun auf den Prozeß Y, um seine Operation "sync" zu erreichen. Wenn dies geschieht, wird der Prozeß Y den ersten Teil des gleichen Kanales überprüfen und er wird NIL nicht finden, allerdings wird er statt dessen irgendeinen Arbeitsbereichszeiger finden. Als Antwort plant er den Prozeß X (fügt ihn an das Ende der verbundenen Liste). Der erste Teil des Kanals kehrt zu NIL zurück. Im allgemeinen wird es mindestens einen zweiten Teil am Kanal geben, bei dem Daten zum Übertragen von einem Prozeß zu einen anderen Prozeß stattfinden wird. Die Synchronisieroperationen treten im allgemeinen auch paarweise auf. Die ersten Operationen "sync" in zwei Prozessen können den Prozeß veranlassen, auf Daten zu warten und sie dann übertragen, wenn er bereit ist. Die zweiten Befehle "sync" veranlassen Bestätigungen. Somit wird ein Prozeß, der Daten von einem Prozeß gerade eingibt, "sync" durchführen. Wenn die Daten nicht bereit sind, wird er "wait" durchführen. Wenn die Daten durch den Versorgungsprozeß bereit sind, wird dieser Versorgungsprozeß den empfangenen Prozeß planen, welcher dann die Daten übernehmen wird. Dann bestätigen "sync"-Befehle jeweils die Übertragung. Das erste "sync" vom Prozeß, der die Daten liefert, wird anzeigen, daß die Daten zur Übernahme bereit sind.

INFORMATIONSAUSTAUSCH ZWISCHEN PROZESSEN AUF DEM GLEICHEN MI- KROCOMPUTER

Wie bereits erläutert, erlaubt der Mikrocomputer Informationsaustausch zwischen Prozessen, die auf dem gleichen oder auf unterschiedlichen Mikrocomputern sein können. Zum Beispiel kann ein Prozeß das Hessen einer von einem Automotor zurückgelegten Strecke und ein zweiter Prozeß das Hessen des Spritverbrauches bezogen auf die für dieses Fahrzeug zurückgelegten Strecke sein. Der erste Prozeß kann als Eingangssignal Daten empfangen, die die Umdrehungen des Fahrzeugrades darstellen und ein Ausgangssignal liefern, das die zurückgelegten Heilen darstellt. Der zweite Prozeß kann als Eingangssignal Daten empfangen, die sich auf die Spritverbrauchsmenge beziehen, allerdings muß er auch mit dem ersten Prozeß kommunizieren, um eine Information über die zurückgelegte Strecke zu erhalten, bevor er ein brauchbares Ausgangssignal, im Hinblick auf den Spritverbrauch bezogen auf die Strecke, liefert. Im Falle der Prozeß-zu-Prozeß- Kommunikation auf dem gleichen Mikrocomputer wird ein Informationsaustausch in diesem Ausführungsbeispiel durch die in Fig. 2 angezeigten Kanäle 40 bis 43 durchgeführt. Dieses Operation bringt die Verwendung der Synchronisieroperation mit sich, dies erfordert einen Programmbefehl, der aus dem Funktionscode 13 und dem Operationscode 11 der obigen Funktions- und Operationsliste besteht. Jeder Kanal 40 bis 43 besteht aus zwei aufeinanderfolgenden Wortplätzen im Speicher, wobei einer einen "Prozeßplatz" und der andere einen "Datenplatz" bereitstellt. Der Kanal ist ein unidirektionaler Kommunikationskanal, der durch zwei und nur zwei Prozesse zu einer Zeit aufgeteilt wird. Wenn ein aktiver Prozeß x wünscht mit einem Prozeß y auf dem gleichen Mikrocomputer zu kommunizieren, folgt er einer Sequenz, die unter Bezugnahme auf die Fig. 9a bis 9e beschrieben werden wird. Zuerst identifiziert der Prozeß x die Adresse des Kanales (mit 40 markiert) und lädt die Daten, die er wünscht, in den Datenplatz des Kanals übertragen zu, werden. Er führt auch einen Befehl für eine Synchronisieroperation aus. Angenommen, daß der Prozeßplatz nicht schon einen Arbeitsbereichszeiger des Prozesses y hat, der wartet, um Daten zu empfangen, veranlaßt die Synchronisieroperation den WPTR des Prozesses x in den Prozeßplatz aufgezeichnet zu werden und verwendet eine "wait"-Prozedur, um den Prozeß auszuplanen. Dies ist die in Fig. 2k gezeigte Position. Der Prozeß x wartet nun bis der Prozeß y bereit ist, Daten zu empfangen. Wenn der Prozeß y wünscht die Daten zu empfangen, führt er einen Befehl für eine Synchronisieroperation aus, um zu sehen, ob der Kommunikationskanal 40 bereit ist, Daten zu senden. Beim Ausführen dieses Befehles lokalisiert der Prozeß y den Arbeitsbereichszeiger des Prozesses x im Prozeßplatz des Kanal es 40 und die Ausführung der Synchronisieroperation veranlaßt, wie aus der in der Operationenliste aufgestellten Synchronisationsoperation gesehen werden kann, eine "run"-Prozedur, um den Arbeitsbereichszeiger des Prozesses x vom Kanal 40 zurückzubewegen und den Prozeß x an das Ende der Prozesse zu setzen, die auf Ausführung warten. Dies ist die in Fig. 9c gezeigte Stellung. Der Prozeß y liest dann die Daten vom Datenplatz des Kanales 40 und führt dann einen weiteren Befehl für eine Synchronisieroperation aus, um anzuzeigen, daß er die Daten empfangen hat. Dies lädt den Arbeitsbereichszeiger des Prozesses y in den Prozeßplatz des Kanales 40 und veranlaßt den Prozeß y zu warten. Die plant den Prozeß y aus, wobei der Kanal 40 im in Fig. 9d gezeigten Zustand gelassen wird. Wenn einmal die Liste, auf die der Prozeß x wartet, den Prozeß x erreicht, so daß der Prozeß x reaktiviert ist, führt er einen weiteren Befehl für eine Synchronisieroperation aus, die nun den Arbeitsbereichszeiger des Prozesses y im Prozeßplatz des Kanales 40 lokalisiert und dies erlaubt es dem Prozeß x, weiter bearbeitet zu werden. Zur gleichen Zeit veranlaßt er eine "run"-Prozedur auf dem Prozeß y, so daß der Prozeß y wieder an das Ende der Prozeßwarteliste hinzugefügt wird und bereit ist, ausgeführt zu werden. Der Kommunikationskanal 40 befindet sich dann in dem in Fig. 9e gezeigten Zustand, wobei der Prozeß x fortfährt und der Prozeß y auf der Liste wartet. Auf diese Weise wird eine Synchronisierung der Kommunikation erreicht, indem beide Prozesse in einer "Handshake"-Operation arbeiten, bei der beide Prozesse zwei Befehle für Synchronisieroperationen ausführen, von denen einer den Prozeß ausplant und dieser ausgeplante Prozeß nur auf die Liste zurückgelegt wird, wenn ein geeignetes Signal von dem anderen Prozeß des Informationsaustauschprozesses empfangen worden ist.

Ein spezielles Beispiel von Programmen und Befehlsfolgen, die notwendig sind, um bei zwei kommunizierende Prozesse auf dem gleichen Mikrocomputer durchzuführen, werden unter Bezugnahme auf Fig. 10 beschrieben werden. Diese illustriert zwei Prozesse, auf die oben Bezug genommen wurde, um zurückgelegte Heilen und den Spritverbrauch eines Motorfahrzeuges zu messen. Der Mikrocomputer 170 weist in seinem Speicherbereich einen ersten Arbeitsbereich 171 für den ersten Prozeß, der die Variable "Umdrehungen" zählt, und einen zweiten Arbeitsbereich 172 für den zweiten Prozeß auf, der die Variable "Heilen" zählt. Der Arbeitsbereich 171 weist einen Wortplatz 173 auf, der die Adresse des Eingangskanales 174, genannt "Umdrehung", enthält, welche einen Teil der seriellen Verbindung bildet, die angeordnet ist, um eine Heldung für jede Radumdrehung von einem externen Umdrehungsdetektor (nicht gezeigt) zu empfangen. Der Arbeitsbereich 171 hat eine weiteren Wortplatz 175, der die Adresse eines Zweiwortspeicherkanales 176, "Heilen"-Kanal genannt, enthält, welcher in diesem Fall ein Ausgangssignal vom Prozeß des Arbeitsbereiches 171 empfängt, das eine zurückgelegte Heile für jeweils 1000 Umdrehungen des Fahrzeugrades anzeigt.

Für diesen ersten Prozeß ist das die OCCAH-Sprache verwendende Programm folgendes:

1. VAR Umdrehungen:

2. WHILE TRUE

3. SEQ

4. Umdrehungen:=0

5. WHILE Umdrehungen < 1000

6. SEQ

7. Umdrehung ? ANY

8. Umdrehungen:= Umdrehungen +1

9. Heile ANY

Die Zeilenzahl sind nicht Bestandteil des Programmes, sind jedoch aus Gründen einer einfacheren Erklärung hinzugefügt worden. Zeile 1 erklärt die Existenz einer Variablen; sie wird "Umdrehungen" genannt. Zeile 2 ist eine Endlosschleife, weil die Bedingung TRUE immer wahr ist. Der Start ist bei Null Umdrehungen (Zeile 4). Die Zeile 7 wartet auf irgendeine Eingabe vom Kanal namens > < Umdrehungen". Wenn ein Eingangssignal empfangen wird, wird die Variable "Umdrehungen" um eins erhöht. Möglicherweise wird es 1000 Umdrehungen gegeben haben und die Zeile 5 wird falsch werden. Die Zeilen 6, 7 und 8 werden dann übersprungen werden und Zeile 9 wird eine Größe namens "Heile" an den Kanal ausgeben.

Der Compiler wird diese OCCAH-Ausdrücke in die folgende Maschinenbefehle umsetzen:

Befehlsfolge Programm in der Sprache OCCAM Funktion Code Daten VAR Umdrehungen Umdrehung? ANY Umdrehungen: = Umdrehung + 1 Meile! ANY pause

Nocheinmal, die Zeilennummern sind nur zu erläuternden Zwecken eingefügt worden. Die Zeilen 1, 4 und 21 sind einfach Referenzplätze im Programm. Die Zeile 2 lädt den Wert 0 in das A-Register 71. Die Zeile 3 speichert die Daten des A-Registers in den Arbeitsbereich. Weil der Datenteil des Befehls 0 ist, tritt kein Versatz zwischen der Referenzadresse für diesen Prozeß auf. Somit enthält nun das Arbeitsbereichszeigerregister 73 einen Arbeitsbereichszeiger WPTR, der auf eine Referenzadresse im Speicher zeigt, wo eine 0 für die Variable "Umdrehungen" gespeichert ist. Die Zeile 5 lädt das A-Register 71 vom Arbeitsbereich. Weil der Datenteil des Befehles (der in das Operandenregister 65 geladen werden würde) 0 ist, ist der Versatz der Referenzadresse WPTR des Arbeitsbereichs 0. In den Zeilen 6, 7 und 8 ist der Dezimalwert 1000 hinzuzufügen. Dies erfordert eine vorbereitende Operation, weil 1000 nicht dargestellt werden kann, indem vier binäre Bit im Datenteil des Befehles verwendet werden. Somit wird der Funktionscode 14 (pfix) verwendet. Die Dezimalziffer 1000 ist binär 1111101000. Da dies zehn Bit erfordert und der Datenteil von Standardbefehlen vier Bit ist, sind drei Schritte erforderlich, um diesen Wert in das Operandenregister zu laden. Die Zeile 8 enthält den Code für die Funktion "load literal", so daß zu dieser Zeit das A-Register 71 mit dem binären Wert von 1000 geladen sein wird. Dies führt zur Übertragung der Inhalte des A-Registers (die 0 sind) zum B-Register 72.

Die Zeile 9 fordert eine indirekte Funktion an, die Operation "greater than". Dies führt zu einem Vergleich der A- und B-Register. Wenn die Inhalte des B-Registers größer als die Inhalte des A-Registers sind, wird diese Operation zu FALSE (0) führen.

Die Zeile 10 ist die Operation "jump nonzero". Wenn die Ergebnisse der Operation in Zeile 9 wahr sind, wird das A-Register auf einen von 0 abweichenden Wert gesetzt sein und die Zeile 10 wird einen Sprung um neun Zeilen nach vorne veranlassen, was durch die Zahl "9" im Datenteil des Codes angezeigt ist. Diese sollte das Programm zur Zeile 21, dem Ausgangsteil, springen. Angenommen, daß die Umdrehungen noch nicht gezählt worden sind, wird als nächstes Zeile 11 ausgeführt. Dieses Laden von der Arbeitsbereichsfunktion weist einen Operanden von +1 auf, was bedeutet, daß der, Versatz von der Referenzadresse +1 ist. Bei dieser Speicheradresse wird die Adresse des Kanales, der "Umdrehung" genannt ist, gefunden werden und diese Adresse wird vom Arbeitsraum in das A-Register 71 geladen werden. Die Zeile 12 veranlaßt eine Synchronisationsoperation. Die Zeile 13 lädt wieder die Adresse des Kanales "Umdrehung" und die Zeile 14 synchronisiert wieder, um die Eingabeoperation zu vervollständigen. In diesem einfachen Beispiel werden keine Daten übertragen. Die Zeile 15 lädt nun die Variable, welche sich im Arbeitsbereich, Versatz 0, befindet, in das A-Register, d. h. sie lädt den augenblicklichen Wert der "Umdrehungen" in das A-Register. Die Zeile 16 addiert wortweise den Datenwert 1 zu den Inhalten des A-Registers. Die Zeile 17 speichert die Inhalte des A-Registers in den Arbeitsbereich mit einem Versatz, der gleich 0 ist. Folglich ist die Variable "Umdrehungen" nun als Antwort auf den Empfang von Daten vom Kanal "Umdrehung" inkrementiert worden. Die Zeile 18 ist eine Pauseoperation, die es dem nächsten Prozeß erlaubt, ausgeführt zu werden, wobei dieser augenblickliche Prozeß dem Ende der Liste hinzugefügt wird. Man beachte, daß zu diesem Zeitpunkt im Programm die Inhalte der A-Register 71 und B-Register 72 nicht relevant für den Prozeß sind. Die Zeilen 19 und 20 führen einen Rückwärtssprung aus, in dem eine negative vorbereitende Funktion verwendet wird. Die Zeile 22 lädt die Inhalte des Arbeitsbereiches, der um zwei Plätze vom Bezugsplatz versetzt ist. Dies wird die Adresse des Kanales, der "Meile" genannt wird, sein und sie wird in das A-Register geladen werden. Eine Operation "sync" wird bei Zeile 23 ausgeführt. Das Ausgangssignal wird durch eine weitere "sync" vervollständigt, was bei Zeile 25 geschieht. Bei Zeile 26 wird eine weitere Pause eingefügt, um den nächsten Prozeß zu planen und diesen Prozeß an das Ende der verbundenen Liste hinzufügen. Bei den Zeilen 27 und 28 wird ein Sprung rückwärts ausgeführt, indem eine negative, Vorbereitung verwendet wird. Der zweite auf die Variable "Meilen" bezogene Prozeß verwendet den Arbeitsbereich 172. Der Arbeitsbereich 172 hat einen Arbeitsplatz 177, der für den Kanal 176 "Meile" die Adresse enthält, die verwendet wird, um ein Eingangssignal an den Prozeß des Arbeitsbereiches 172 zu liefern. Ein weiterer Wortplatz 178 weist die Adresse eines zweiten Eingangssignales auf, das in diesem Fall ein Kanal 179 ist, der Kanal "Sprit" genannt wird, der ein Teil einer seriellen Verbindung ist, die angeordnet ist, um eine Nachricht von einem externen (nicht gezeigten) Spritventil jedesmal zu empfangen, wenn eine Gallone Sprit verbraucht ist. Der Arbeitsbereich 172 weist einen weiteren Wortplatz 180 mit einer Adresse eines Ausgangskanales 181 auf, der Kanal "Verbrauch" genannt wird, welcher einen Teil einer seriellen Verbindung bildet, die angeordnet ist, um die zurückgelegte Strecke auszugeben, während die letzte Gallone Sprit verbraucht wurde. Natürlich muß der Prozeß im Arbeitsbereich 172 mit dem Prozeß im Arbeitsbereich 171 kommunizieren, um über einen Kanal 176 Nachrichten zu erhalten, die die Anzahl der zurückgelegten Meilen angezeigt. Die Befehlsfolge und das Programm für den Prozeß im Arbeitsbereich 172 sind folgende:

Befehlsfolge Programm in oben definierter OCCAM Funktion Code Daten pause VAR Meilen Meilen: = 0 WHILE TRUE ALT Meile? ANY Meile: = Meile + 1 Sprit? ANY SEQ Verbrauch: Meilen Meilen: = 0

INFORMATIONSAUSTAUSCH ZWISCHEN PROZESSEN AUF VERSCHIEDENEN MIKROCOMPUTERN

Ein Netzwerk von miteinander verbundenen Mikrocomputern ist in Fig. 11 gezeigt, in der vier Mikrocomputer dargestellt sind. Es versteht sich, daß das Netzwerk in zwei oder drei Richtungen, falls erforderlich, ausgeweitet werden kann. Jeder der Mikrocomputer weist eine ähnliche Struktur auf und ist mit der seriellen Verbindung eines anderen Mikrocomputers über zwei unidirektionalle Drähte 185 und 186 miteinander verbunden, die sich jeweils zwischen dem Ausgangsanschluß 27 eines Mikrocomputers und dem Eingangsanschluß 26 eines anderen Mikrocomputers erstrecken. Die Drähte 185 und 186 werden jeweils nur für diese zwei Anschluß-zu-Anschluß- Verbindungen eingesetzt und werden nicht mit anderen Mikrocomputern oder Speicherverbindungen geteilt. Ein Informationsaustausch zwischen Prozessen in verschiedenen Mikrocomputern wird im allgemeinen in ähnlicher Weise bewirkt, indem eine identische Folge von Synchronisationsoperationen verwendet wird und dies wird unter Bezugnahme auf die Fig. 2, 11, 12 und 13 beschrieben werden. Anstelle des Kanales 40 (Fig. 2) weist eine serielle Verbindung einen Eingangskanal 45 und einen Ausgangskanal 46 auf, die jeweils aus einem Prozeßregister 47 und einem Datenregister 48 bestehen, welche auf die gleiche Weise adressiert werden können als die Wortplätze der Speicherkanäle 40 bis 43. Sie werden allerdings durch die Steuerlogik 50 betrieben, welche weiterhin unter Bezugnahme auf die Fig. 15 und 16 beschrieben wird.

Wenn Daten durch die seriellen Verbindungen zwischen zwei Mikrocomputern übertragen werden, findet es in der Form einer Serie von Datensträngen statt, die seriell in der Form von Paketen, wie in Fig. 13a und 13b gezeigt, übertragen werden. Ein Datenpaket wird durch einen Ausgangsanschluß 27 an einen Eingangsanschluß 26 übertragen und weist die in Fig. 13a gezeigte Form auf. Es beginnt mit zwei aufeinanderfolgenden Bit des Wertes 1, gefolgt von 16 Datenbit und einem letzten Stopbit mit dem Wert 0. Ein Bestätiungspaket, wie in Fig. 13b gezeigt, wird vom Ausgangsanschluß 27 eines Mikrocomputers, der ein Datenpaket empfängt zum Eingangsanschluß 26 des Mikrocomputers gesendet, der das Datenpaket sendete. Das Bestätigungspaket besteht aus einem Startbit mit dem Wert 0, gefolgt von einem Stopbit des Wertes 0. Die Ausgangskontrolllogik jeder seriellen Verbindung sorgt für jeden Ausgangsanschluß 27, um Bits des Wertes 0 kontinuierlich zu übertragen, wenn er keine Daten oder Bestätigungspakete sendet und folglicherweise ignoriert die Eingangssteuerlogik sämtliche Signale auf dem Eingangsanschluß 26 bis es ein Startbit "1" eines Pakets empfängt.

Wenn das Prozeßregister des Eingangs- oder Ausgangskanales den Arbeitsbereichszeiger (WPTR) eines Prozesses hält, ist die Steuerlogik 50 in der Lage, an der CPU (12) Anforderungen (Eingabe- oder Ausgabeanforderungen genannt) zu generieren, damit die CPU 12 den Prozeß durch Hinzufügen seines Arbeitsbereichszeigers auf die auf der Liste wartende Durchführung einplant. Die Synchronisierlogik 10 sieht einen Auswähler vor, der durch die CPU 12 verwendet wird, um jedes der Anforderungssignale von den seriellen Verbindungen der Reihe nach zu überprüfen. Wann immer ein aktiver Prozeß durch Ausführung der Prozedur "wait" ausgeplant wird, schaut die CPU 12, ob es irgendwelche Anforderungen von der seriellen Verbindung gibt. Wenn es mehrere externe Anforderungen gibt, betreut die CPU 12 alle davon der Reihe nach bevor es den nächsten Prozeß auf der Liste durchführt. Die CPU 12 betreut alle Anforderungen durch Einplanen des Prozesses, der im Prozeßregister des Kanales, der die Anforderungen generierte, hält, und setzt das Prozeßregister 47 auf NIL zurück. Das Prozeßregister 47 der Eingangs- und Ausgangskanäle in einer Verbindung 25 enthält den speziellen Wert READY, wenn dieser Kanal bereit ist, einen Informationsaustausch durchzuführen. Die Synchronisieroperation wird die Prozedur "run" auslösen, welche den speziellen Wert READY detektiert und aktiviert, anstelle des Einplanens eines Prozesses, die Steuerlogik 50 in der Verbindung. Die Steuerlogik in einer Verbindung kann eine Synchronisieroperation auf einem Kanal durchführen. Die Synchronisieroperation testet den Prozeßplatz auf dem Kanal. Wenn der Wert NIL ist, ersetzt sie den Wert mit dem speziellen Wert READY und wartet, bis eine Synchronisieroperation, die durch einen Prozeßbefehl auf dem Prozeßregister ausgelöst wird, den Wert auf NIL zurücksetzt. Andererseits generiert sie eine Anforderung an die CPU 12, um den Prozeß im Prozeßregister, wie oben beschrieben, zu planen und die CPU setzt dann den Wert des Prozeßregisters auf NIL zurück. Als ein Ergebnis kann der Prozeß die Synchronisieroperation einsetzen, um mit der Steuerlogik 50 in einer Verbindung 25 auf die gleiche Weise synchronisiert zu werden, wie es der Fall ist, wenn ein anderer Prozeß synchronisiert wird.

Die Ausgangssteuerlogik 50 in einer Verbindung 25 synchronisiert sich zuerst mit einem Prozeß, der das Prozeßregister im Ausgangskanal verwendet, überträgt dann Daten in Datenpaketen vom Datenregister in den Ausgabekanal über den Ausgangsanschluß 27 (Fig. 2 und 11), wartet dann auf ein Bestätigungspaketssignal auf dem Eingangsanschluß 26, synchronisiert sich dann mit dem Prozeß wieder, der das Prozeßregister im Ausgangskanal verwendet. Die Ausgangssteuerlogik 50 führt diese Operation wiederholt durch. Die Eingangssteuerlogik in einer Verbindung wartet zuerst auf Daten vom Eingangsanschluß 26, um im Datenregister im Eingangskanal anzukommen, synchronisiert sich dann mit dem Prozeß, der das Prozeßregister im Eingangskanal verwendet, synchronisiert sich dann wieder mit dem Prozeß, der das Prozeßregister im Eingangskanal verwendet, überträgt dann das Bestätigungspaketssignal zum Ausgangsanschluß 27. Die Eingangssteuerlogik führt diese Operation wiederholt durch.

Im folgenden ist angenommen, daß ein Prozeß x, der vom Mikrocomputer 1 in Fig. 11 bearbeitet wird, wünscht, Daten über eine serielle Verbindung zu einem Prozeß y, der vom Mikrocomputer 2 bearbeitet wird, auszugeben. Um diese Ausgabe zu bewirken, speichert der Prozeß x die auszugebenden Daten im Datenregister 187 des Ausgabekanals und führt eine Synchronisieroperation auf dem Prozeßregister 188 aus, um die serielle Verbindung zu veranlassen, die Übertragung von Daten über den Anschluß 27 zu beginnen. Der Prozeß führt dann weiter eine Synchronisieroperation auf dem gleichen Prozeßregister 188 aus, um zu warten, bis ein Bestätigungspaket über den Eingangsanschluß 26 des Mikrocomputers 1 empfangen wird. Das Bestätigungspaket gibt zu erkennen, daß der Prozeß y, der vom Mikrocomputer 2 bearbeitet wird, die Daten eingegeben hat. Für die Eingabe führt der Prozeß y eine Synchronisieroperation auf dem gleichen Prozeßregister 189 des Eingabekanals des Mikrocomputers 2 aus, um für das Datenpaket zu warten, um vom Anschluß 26 des Mikrocomputers 2 anzukommen. Er übernimmt dann die Daten vom Datenregister 190 und führt eine weitere Synchronisieroperation aus, um zu veranlassen, daß das Bestätigungssignal vom Ausgangsanschluß 27 des Mikrocomputers 2 gesendet wird.

Fig. 12 zeigt aufeinanderfolgend die Inhalte der Prozeßregister 188 und 189 während einer typischen Folge von Operationen, die auftreten, wenn die Prozesse x und y über die serielle Verbindung kommunizieren. Die Bezugszeichen 188 a-e stellen auf einanderfolgende Zustände der Inhalte des Prozeßregisters 188 dar und die Bezugszeichen 189 a-e repräsentieren in ähnlicher Weise auf einanderfolgende Zustände der Inhalte des Prozeßregisters 189. Zuerst adressiert der Prozeß x den Ausgabekanal des Mikrocomputers 1 und lädt die auszugebenden Daten in das Datenregister 187 und führt eine Synchronisieroperation auf dem Ausgabeprozeßregister 188 durch. Angenommen, daß das Prozeßregister 188 den speziellen Wert READY 188a enthält, der anzeigt, daß die serielle Verbindung zur Ausgabe bereit ist, setzt die Synchronisieroperation den Wert des Prozeßregisters 188 'auf NIL 188b. Als Ergebnis veranlaßt die Steuerlogik die Daten vom Datenregister 187 über die einzige Drahtverbindung 185 zum Eingangsdatenregister 190 im Mikrocomputer 2 übertragen zu werden. Vorausgesetzt, daß der Prozeß y noch nicht auf die Eingabe wartet, verändert die Steuerlogik im Mikrocomputer 2 den Wert des Prozeßregisters 189 von NIL 189a auf READY 189b, wobei angezeigt wird, daß die Daten empfangen worden sind. Der Prozeß y führt dann eine Synchronisieroperation auf dem Prozeßregister 189 aus, was den Effekt hat, daß sich der Wert des Prozeßregisters von READY 189b auf NIL 189c ändert. Angenommen, daß der Mikrocomputer 2 bereit ist, ein Bestätigungssignal zum Mikrocomputer 1 zu übertragen, verändert die Steuerlogik den Wert des Prozeßregisters 189 zurück auf READY 189d. Der Prozeß y übernimmt dann die Daten vom Datenregister 190 des Eingangskanales und führt eine weitere Synchronisieroperation auf dem Prozeßregister 189 durch. Dies setzt die Register 189 auf NIL 189e zurück. Als ein Ergebnis überträgt die Steuerlogik ein Bestätigungssignal über die einzige Drahtverbindung 186. Dieses-Bestätigungssignal wird über den Eingangsanschluß 26 des Mikrocomputers 1, der den Prozeß x, bevor das Bestätigungssignal empfangen wird, eine zweite Synchronisieroperation durchführt, wird der Prozeß x durch die Prozedur "wait" ausgeplant und sein Arbeitsbereichszeiger wird im Prozeßregister 188 (188) gespeichert.

Wenn das Bestätigungspaket empfangen wird, generiert die Steuerlogik der seriellen Verbindung eine Anforderung an die CPU des Mikrocomputers 1, um den Prozeß x zu planen. Diese Anforderung wird durch die CPU des Mikrocomputers 1 bereitgestellt, sobald der laufende Prozeß ausgeplant ist und die CPU fügt den Prozeß x an das Ende der Liste hin und setzt das Prozeßregister auf NIL (188d) zurück. Die Steuerlogik setzt nun das Prozeßregister auf READY (188e) zurück, wodurch angezeigt wird, daß die Verbindung für eine weitere Ausgabe bereit ist. Der Zustand der seriellen Verbindungen ist der gleiche, wie er vor dem Informationsaustausch stattfand, wie in der Folge von Fig. 12 gezeigt, bereit für den nächsten Informationsaustausch. Fig. 14 illustriert die Operation der zuvor beschriebenen Prozesse auf zwei getrennten Mikrocomputern unter Bezugnahme auf Fig. 11. In diesem Fall befindet sich der Arbeitsbereich 171 zum Zählen der Umdrehungen auf einem Mikrocomputer 191, während der Arbeitsbereich 172 zum Zählen der Meilen sich auf einem getrennten Mikrocomputer 192 befindet. Die zwei Mikrocomputer 191 und 192 sind über entsprechende serielle Verbindungen 25 verbunden. In den Fig. 14 und 10 werden ähnliche Bezugszeichen für ähnliche Teile verwendet. Die einzige Änderung ist, daß der Kanal "Meile" 176 in Fig. 10 durch einen Kanal "Meile" 176a in Fig. 14 ersetzt ist, der einen Ausgangskanal einer seriellen Verbindung im Mikrocomputer 191 bildet und ein Kanal "Meile" 176b einen Eingangskanal einer seriellen Verbindung im Mikrocomputer 192 bildet. Die Befehlsfolge und das Programm, das verwendet wird, um die zwei Prozesse in Fig. 14 zu betreiben, sind im wesentlichen ähnlich zu den bereits in Fig. 10 beschriebenen, außer, daß die Adresse des Kanals "Meile", die von jedem der Prozesse verwendet wird, nun vielmehr die Adresse eines Kanales einer seriellen Verbindung als ein Kanal im Speicher sein wird.

BESCHREIBUNG EINER VERBINDUNGSSTEUERLOGIK

Die Steuerlogik 50 (Fig. 2) für jeden der Eingangs- und Ausgangskanäle der seriellen Verbindungen wird nun detaillierter unter Bezugnahme auf die Fig. 15 und 16 beschrieben werden, in denen Fig. 15 die Steuerlogik für den Ausgangskanal 46 und Fig. 16 die Steuerlogik für den Eingangskanal 45 zeigt.

Für eine Ausgabe synchronisiert sich die Steuerlogik 50 (Fig. 2) einer Verbindung zuerst mit einem Prozeß, indem das Ausgabeprozeßregister 47 (Fig. 15) verwendet wird, dann überträgt es Daten vom Ausgabedatenregister 48 zum Anschluß 27, wartet dann auf das Bestätigungssignal vom Anschluß 26, synchronisiert sich dann mit einem Prozeß wieder, indem das Ausgabeprozeßregister 47 verwendet wird. Die Steuerlogik 50 führt diese Operation wiederholt durch.

Für eine Eingabe wartet die Steuerlogik 50 (Fig. 2) einer Verbindung zuerst auf Daten, die vom Eingabeanschluß 26 ankommen, und übertragt sie zum Eingabedatenregister 48, synchronisiert sich dann mit einem Prozeß, in dem das Eingabeprozeßregister 47 (Fig. 16) verwendet wird, synchronisiert sich dann wieder mit dem Prozeß, in dem das Eingabeprozeßregister verwendet wird, überträgt dann das Bestätigungssignal zum Anschluß 27. Die Steuerlogik 50 führt diese Operation wiederholt durch.

Die von den Ausgabe- und Eingabeprozeßregistern 47 übernommenen Werte können NIL sein, das anzeigt, daß weder der Prozeß noch die Steuerlogik auf eine Synchronisierung wartet, READY, das anzeigt, daß die Steuerlogik zum Synchronisieren wartet oder es kann der Arbeitsbereichszeiger eines Prozesses sein, der zur Synchronisierung wartet.

In einer Verbindung ist jedes Prozeßregister 47 und jedes Datenregister 48 über einen Adreßdekodierer 193 an den Bus 16 angeschlossen. Der Bus 16 beinhaltet Signalleitungen für die Adresse, Daten und Steuerung. Die Steuerung enthält ein Signal "write", ein Signal "read" und ein Signal "busy". Das Signal "busy" wird verwendet, um sicherzustellen, daß sowohl die CPU als auch die Verbindungssteuerlogik nicht versuchen, den Wert des Prozeßregisters gleichzeitig zu verändern.

Jedes Prozeßregister 47 in einer Verbindung beinhaltet eine Logik 194, um zu detektieren, ob der Wert im Prozeßregister READY, REAL oder ein Arbeitsbereichszeiger ist.

Das Ausgangsdatenregister 48 (Fig. 15) ist mit dem Ausgangsanschluß 27 über ein UND-Gatter 195 und ODER-Gatter 196 verbunden. Das Eingabedatenregister 48 (Fig. 16) ist direkt mit dem Eingangsanschluß 26 verbunden.

Jedem Prozeßregister in einer Verbindung ist ein Anforderungslatch 197 zugeordnet, das durch die CPU getestet werden kann. Wann immer die CPU eine Prozedur WAIT durchführt, wird der Zustand sämtlicher Anforderungslatchs getestet. Wenn ein Anforderungslatch gesetzt ist, wird der Prozeß, dessen Arbeitsbereichszeiger in dem entsprechenden Prozeßregister gehalten wird, durch Hinzufügen dessen Arbeitsbereichszeigers an das Ende der Liste geplant. Das Anforderungslatch wird immer dann gelöscht, wenn die CPU an das Pozeßregister schreibt.

Die Eingabe und Ausgabe von Daten über die Verbindung wird durch Zustandsrechner 282, 283, 284 und 285 gesteuert. Jeder Zustandsrechner besteht aus einem Statusregister, um den augenblicklichen Zustand zu halten, und aus einem programmierbaren Logikarray. Das programmierbare Logikarray reagiert auf den Wert des Statusregisters und auf die Eingangssignale für den Zustandsrechner und erzeugt ein vorgegebenes Muster von Ausgangssignalen und einen neuen Wert für das Statusregister. Ein Zähler 286 wird verwendet, um Bits, wie sie über die Verbindung übertragen werden, zu zählen und ein weiterer Zähler 287 wird eingesetzt, um Bits zu zählen, wie sie über die Verbindung empfangen werden.

Die Eingabe- und Ausgabekanalsteuerung und die Datenzustandsrechner weisen folgende Eingangssignale und Ausgangssignale auf, wobei der Name des Eingangssignales oder Ausgangssignales den Zweck des Signals anzeigt.

AUSGANGSSTEURUNGSZUSTANDSRECHNER 285
(Figur 15) Bezugszeichen Signal-Name Zweck Eingaben: Speicherbus beschäftigt Reset Transputer rückgesetzt Prozeßregister = READY Prozeßregister = NIL Prozeßregister hält Arbeitsbereichszeiger Daten vom Ausgabedatenregister gesendet Bestätigung vom Eingabezustandsrechner empfangen Ausgaben: Setze CPU-Anforderung Löse Datenübertragung aus Setze Prozeßregister auf READY Setze Prozeßregister auf NIL Bestätige Empfang der Bestätigung
AUSGANGSDATENZUSTANDSRECHNER 284
(Figur 15) Bezugs-Zeichen Signal-Name Zweck Eingaben: Reset Transputer rückgesetzt Löse Datenübertragung aus Teste, falls Bitzählerstand Null Löse Bestätigungsimpulsübertragung aus Ausgaben: Setze Bitzähler auf die Anzahl der zu sendenden Bits Zähle Bitzähler um Eins herab Setze Ausgangsanschluß auf Eins Setze Ausgangsanschluß auf das niederwertigste Bit Schiebe das Datenregister um einen Platz Datenübertragung vollständig Bestätigungsübertragung vollständig
EINGABESTEUERUNGSZUSTANDSRECHNER 283
(Figur 16) Bezugszeichen Signal-Name Zweck Eingaben: Reset Speicherbus beschäftigt Transputer rückgesetzt Daten empfangen vom Anschluß Prozeßregister = READY Prozeßregister = NIL Prozeßregister hält einen Arbeitsbereichszeiger Übertragung der Bestätigung vollständig Ausgaben: Setze CPU-Anforderung Setze Prozeßregister auf READY Setze Prozeßregister auf NIL Löse Bestätigungsübertragung aus Bestätigung des Empfangs von Daten
EINGABEDATENZUSTANDSRECHNER 282
(Figur 16) Bezugszeichen Signal-Name Zweck Eingaben: Reset Transputer rückgesetzt Daten vom Anschluß Teste, falls Bitzählerstand Null Ausgaben: Setze Bitzähler auf die Anzahl der zu empfangenen Bits Erniedrige Bitzähler um eins Schiebe das Datenregister um einen Platz, unter Übernahme des niederwertigsten Bits vom Anschluß Datenempfang vollständig Bestätigungsempfang vollständig

Die Folgen jedes Zustandsrechners sind unten unter Bezugsnahme auf den augenblicklichen Zustand, den nächsten Zustand, die Eingabe und die Ausgabe jedes Rechners aufgelistet.

In jedem Zustand sind die unter der Spalte "Ausgaben" aufgelisteten Ausgaben Eins und alle anderen Ausgaben Null. Alle Eingaben werden ignoriert, mit Ausnahme derjenigen, die in den Spalten "Eingaben" erwähnt sind. Die Symbole , und Δ werden verwendet, um die boolschen-Operationen und, oder bzw. nicht anzugeben.

AUSGABESTEUERUNGSZUSTANDSRECHNER 285
Zustand Eingaben Ausgaben nächster Zustand Reset
AUSGABEDATENZUSTANDSRECHNER 284
Zustand Eingaben Ausgaben nächster Zustand Reset databits
EINGABESTEUERUNGSZUSTANDSRECHNER 283
Zustand Eingaben Ausgaben nächster Zustand Reset
EINGABEDATENZUSTANDSRECHNER 282
Zustand Eingabe Ausgaben nächster Zustand Reset start databits

Wie in Fig. 16 gezeigt, enthält die Eingabesteuerlogik ein Flip-Flop 280, das an den Ausgang 246 des Eingabedatenzustandsrechners 282 angeschlossen ist. Ein weiteres Flip-Flop 281 ist an den Ausgang 245 des Eingabedatenzustandsrechners 282 angeschlossen. Beide Steuerungszustandsrechner werden von Taktimpulsen gesteuert, die vom Takt 28 abgeleitet sind. Für einige der Verbindungen werden beide Datenzustandsrechner auch durch Taktimpulse gesteuert, die vom Takt 28 stammen. Für die in den Fig. 15 und 16 gezeigte Verbindung werden die Datenzustandsrechner durch Taktimpulse gesteuert, die vom einem, bezogen auf die Phase des Taktes 28, unterschiedlichen Takt 22 stammen, was es ermöglicht, diese Verbindung mit einer geringeren Geschwindigkeit zu betreiben. Die unterschiedlichen Taktfrequenzen können erhalten werden, um ein Maximum an Effizienz zu erreichen in Abhängigkeit vom Typ des betriebenen Mikrocomputernetzwerkes. Wenn Mikrocomputer nahe aneinander gruppiert werden, können Kommunikationen zwischen ihnen schneller durchgeführt werden, wobei in diesem Fall eine höhere Taktfrequenz verwendet werden kann. Eine niedrigere Taktfrequenz kann verwendet werden, um eine zufriedenstellende Kommunikation zu erzielen, bei der die Mikrocomputer voneinander entfernter sind und eine niedrigere Betriebsgeschwindigkeit erfordern.

Bei beiden zeichnen die Eingabe- und Ausgabekanäle des Steuerungszustandsrechners den Inhalt des Prozeßregisters 47 auf und erzeugen, sofern geeignet, eine CPU-Anforderung auf der Leitung 199, indem das Latch 197 gesetzt wird.

Der Ausgabesteuerungszustandsrechner 285 synchronisiert sich zuerst mit einem Prozeß unter Verwendung des Ausgabeprozeßregisters 47. Er verwendet dann das Signal "datago" 211, um zu veranlassen, daß der Ausgabedatenzustandsrechner 282 die Daten über den Anschluß 27 in das Ausgabedatenregister 48 ausgibt. Der Ausgabedatenzustandsrechner 284 sendet die Daten in der unter Bezugnahme auf Fig. 13a beschriebenen Weise und schiebt die Daten in das Register 48 bis ein Zählerstand im Zähler 286 überläuft. Wenn dies geschehen ist, gibt er das Signal "datagone" 205 an den Ausgabesteuerungszustandsrechner zurück, um anzuzeigen, daß die Datenübertragung vollständig ist und daß das Signal "datago" entfernt werden sollte. Der Ausgabesteuerungszustandsrechner wartet dann auf das Signal "ackready" 264 vom Latch 280, das kennzeichnet, daß der Eingabedatenzustandsrechner 282 ein Bestätigungspaket, wie in Fig. 13b beschrieben, vom Anschluß 26 empfangen hat. Als Antwort auf das Signal "ackready" 264 gibt der Ausgabesteuerungszustandsrechner ein Signal "acktaken" 265 aus, daß das Letch 280 rücksetzt. Die Ausgabesteuerungslogik verwendet dann das Ausgabeprozeßregister 47, um sich wieder mit dem ausgebenden Prozeß zu synchronisieren.

Der Eingabedatenzustandsrechner 282 und der Mikrocomputer am anderen Ende der Verbindung warten gerade für ein "start bit", um auf dem Eingabeanschluß 26 zu erscheinen. Wenn ein Datenpaket detektiert wird, schiebt der Eingabedatenzustandsrechner 282 dieses Mikrocomputers Daten in das Datenschieberegister 48, bis der Zähler 287 anzeigt, daß die passende Anzahl von Bit empfangen worden ist und setzt dann das Latch "data received" 281. Der Eingabesteuerungszustandsrechner 283 detektiert das Signal "dataready" 262 und antwortet, indem das Letch "data received" 281 rückgesetzt wird. Er synchronisiert sich dann mit einem eingebenden Prozeß unter Verwendung des Eingabeprozeßregisters 47. Er synchronisiert sich dann wieder mit dem eingebenden Prozeß unter Verwendung des Prozeßregisters 47, um zu bestätigen, daß der Prozeß die Daten vom Datenregister 48 übernommen hat und verwendet dann das Signal "ackgo" 261, um den Ausgabedatenzustandsrechner zu veranlassen, ein Bestätigungspaket über den Anschluß 27 zu übertragen. Wenn der Ausgabedatenzustandsrechner 284 gerade keine Daten überträgt, erzeugt er die Start- und Stopbits, die das in Fig. 13b beschriebene Bestätigungspaket bilden. Der Eingabedatenzustandsrechner 282 des Mikrocomputers, der das Datenpaket übertrug, detektiert das Bestätigungspaket und setzt das Latch "acknowledge receiced" 280. Wie oben beschrieben, hat der Ausgabesteuerungszustandsrechner 285 des übertragenden Mikrocomputers hierauf gewartet und setzt nach dem Detektieren des Signals das Latch 280 zurück und führt eine zweite Synchronisieroperation durch. Der Zustand der Verbindungslogik sowohl in den Ausgabe- als auch Eingabeverbindungen ist nun der gleiche, wie sie vor dem stattfindenden Informationsaustausch war, so daß sie für die nächste Übertragung bereit ist.

CHIP- UND SPEICHERAUFBAU

Wie oben erwähnt, ist der Mikrocomputer dieses Beispiels insbesondere vorteilhaft, da er genügend Speicher in Form eines RAM auf den Chip (integrierte Schaltungsanordnung) aufweist, um den Mikrocomputer zu befähigen, ohne einen externen Speicher zu gebrauchen, zu arbeiten, obwohl ein externer Speicher eingesetzt werden kann, falls es erforderlich ist. Es gibt eine Reihe von Problemen, um genügend Raum für einen adäquaten Speicher auf dem gleichen Chip wie den Prozessor vorzusehen. Es ist notwendig, sowohl den für jede Speicherzelle erforderlichen Bereich zu minimieren, als auch Rauschstörungen im RAM von der asynchron arbeitenden Schaltung, wie zum Beispiel einem Prozessor auf dem gleichen Chip, zu reduzieren, während gleichzeitig ein zufriedenstellende Herstellerausbeute von akzeptierbaren Mikrocomputern aus einer Anzahl von Siliziumchips vorgesehen wird, insbesondere, da der Speicher der größte und dichteste Bestandteil, der auf dem Chip gebildet wird, sein kann.

Um den für jede Speicherzelle erforderlichen Bereich zu minimieren, verwendet dieses Beispiel statische RAM-Zellen (SRAM), welche höhere Impedanzwiderstandslasten verwenden als die konventionelleren Depletion-Transistorlasten oder komplementären Pull-up-Transistoren. Die in diesem Beispiel verwendete Herstellungstechnologie setzt einen Film eines polykristallinen Siliziums mit hohem spezifischen Widerstand ein, in welchem die Widerstandslasten ausgebildet sind. Der Speicher kann 32 K Bit SRAM aufweisen, wobei jede Zelle aus Transistoren mit Steueranschlüssen besteht, die in einem Film aus polykristallinen Silizium gebildet sind. Die Transistorsteueranschlüsse und Widerstandslasten können in gleichen oder anderen Filmen aus polykrystallinen Silizium gebildet werden.

Die Widerstandslasten der SRAMs sind auf Störungen von elektrischen Rauschen, das in das Siliziummaterial eingeführt wird, in das sie ausgebildet sind empfindlich und die gespeicherten Daten können durch beliebige Minoritätsträger, die vorhanden sein können, verschlechtert werden. Um das SRAM von Störungen, die durch eine andere Chip-Schaltung oder von Hinoritätsträgern, die durch eine andere Schaltung auf den Chip injiziert sind, zu schützen, wird das SRAM in einem elektrisch isolierten Bereich des Siliziums, wie in Fig. 17 gezeigt, ausgebildet. Ein n-Kanalsubstrat 300 wird mit separaten p-Wannen 301 und 302 ausgebildet. Das Feld der RAH-Zellen wird von der anderen Schaltung und zugeordneter Substratstörungen isoliert, indem das RAM-Feld in der p-Wanne, die mit 301 bezeichnet ist, plaziert wird. Dies isoliert die RAH-Zellen von den Minoritätsträgern, die im Substrat durch die Potentialbarriere zwischen Wanne und Substrat erzeugt ist und alle Minoritätsträger, die innerhalb der Wanne erzeugt werden, weisen eine höhere Wahrscheinlichkeit auf, um im Substrat gesammelt zu werden. In Fig. 17 ist das RAM-Feld ein n-Kanalfeld sein, das in der p-Wanne 301 plaziert ist. Alle n-Transistoren der peripheren Schaltung sind vom RAM-Feld isoliert, indem sie in einer weiteren p-Wanne 302 plaziert sind.

Diese Technik ist vollständig kompatibel sowohl zur NMOS als auch p-Wannen-CMOS-Herstellungstechnologie. Im augenblicklichen Beispiel wird eine p-Wannen-CHOS verwendet und alle p-Kanaltransistoren der peripheren Schaltung sind auf dem n-Substrat plaziert und durch die Potentialbarriere zwischen Wanne und Substrat vom RAM-Feld isoliert. Jede ein Speicherfeld enthaltende Wanne ist von einer metallischen Erdung umgeben, die die Speicherfeldwanne an deren Umfang über eine stark dotierte p-Diffusion kontaktiert. Innerhalb des Speicherfeldes befindet sich eine p-Diffusion, die die Wanne für jedes Paar Zellen mit Masse kontaktiert. Eine Substratvorspannung ist nicht nötig.

Um eine akzeptable Herstellungsausbeute der Produkte aus Siliziumchips zu liefern, ist eine Speicherredundanz eingebaut. Der Speicher ist in Reihen und Spalten unterteilt, die über Reihen- und Spaltendekodierer zugreifbar sind. Zusätzlich zu den normalen Reihen und normalen Spalten sieht die Redundanz einige zusätzliche Reihen und Spalten zusammen mit zusätzlichen Reihen- und Spaltendekodierern vor, um einen Zugriff auf die zusätzlichen Reihen und Spalten zu erhalten. Die zusätzlichen Spaltendekodierer und zusätzlichen Spaltenreihendekodierer enthalten jeweils Sicherungen, die beispielsweise durch die Verwendung eines Lasers aufgetrennt werden können, so daß, wenn irgendwelche defekten Reihen oder Spalten während eines Testes festgestellt werden, die Sicherungen durch Lasertechniken aufgetrennt werden können, um die Reihen- oder Spaltendekodierer von beliebigen normalen Reihen oder Spalten unbrauchbar zu machen, welche als defekt herausgefunden worden sind, und das Ersetzen der Reihe oder Spalte von den redundanten Reihen oder Spalten kann in eine freigegebene Position gebracht werden, indem der geeignete zusätzliche Reihendekodierer oder zusätzliche Spaltendekodierer mit der Adresse der defekten Reihe oder Spalte programmiert wird.

Um zu erlauben, daß eine N-Wannen-CNOS-Herstellungstechnologie verwendet wird, können die folgenden alternativen Isoliertechniken eingesetzt werden. Bezugnehmend auf Fig. 18 wird ein Substrat (405) vom p-Typ mit niedrigem spezifischem Widerstand eingesetzt, auf das eine Epitaxialschicht vom p-Typ mit hohem spezifischem Widerstand ausgebildet wird.

Das Zellenfeld wird in diese Epitaxialschicht im Bereich (401) ausgebildet und vollständig von einer tiefen n-Wannen- Diffusion (402) umgeben. Die von einer anderen Schaltung im Bereich (403) erzeugten Minoritätsträger werden an die n-Wannen (402) angezogen sein, wo sie harmlose Majoritätsträger werden oder werden im stark dotierten Substrat (405) vom p-Typ rekombinieren. P-Kanal-Transistoren werden in N-Wannen (404) plaziert, wo sie durch die Potentialbarriere von der Wanne zum Substrat isoliert werden.

ZUSÄTZLICHES MATERIAL

Die Erfindung ist nicht auf die Einzelheiten des vorangegangenen Beispieles beschränkt. Zum Beispiel kann die von den Registern 47 vorgesehene Funktion, obwohl die seriellen Verbindungen, die in Fig. 2 gezeigt sind, separate Prozeßregister 47 aufweisen, durch Speicherplätze im RAH 19 bewirkt werden. In diesem Fall muß die CPU fähig sein, die serielle Verbindung, die sie bedient, zu identifizieren und dies kann erreicht werden, indem jeder Kanal der seriellen Verbindung separat an die Synchronisierlogik 10 in Fig. 2 angeschlossen wird.

Eine Gruppe von Datenregistern und Bussen ist in Fig. 3 gezeigt und in einigen Fällen kann es wünschenswert sein, zwei solche Gruppen in einen Mikrocomputer einzufügen oder sogar zwei CPUs in einem Mikrocomputer zu haben.

Das oben beschriebene Prinzip der Verwendung der Funktionen pfix und npfix zur Variation der Länge eines Operanden, ist bei einem Mikrocomputer mit beliebiger Wortlänge anwendbar.

Die Erfindung ist weder auf einen Rechner beschränkt, der mit 16 Bit Wörtern noch mit 16-Bit Operandenregistern arbeitet, beispielsweise können Prozessoren mit einer Wortlänge von 8 Bit oder einem Vielfachen von 8 Bit diese Befehle verwenden. Die Erfindung ist insbesondere auf Mikrocomputer mit 32-Bit-Wörtern anwendbar.

Die CPU kann in einem Ausführungsstapel weitere Register enthalten, wie z. B. ein CREG oder sogar DREG zusätzlich zu den A- und B-Registern. Einige Funktionen und Operationen können dann modifiziert werden, um die zusätzlichen Register zu ermöglichen. Zum Beispiel:

Areg: = Breg kann ersetzt werden durch SEQ

Areg := Breg

Breg := Creg

Creg := Dreg

Breg: = Areg kann ersetzt werden durch SEQ

Dreg := Creg

Creg := Breg Breg := Areg

Andere Funktionen oder Operationen können natürlich hinzugefügt werden, um die zusätzlichen Register zu nutzen. Obwohl die hierin beschriebene und in Fig. 3 gezeigte Ausführungsform nur ein A-Register und ein B-Register enthält, werden in einer bevorzugten Ausführungsform der vorliegenden Erfindung drei Register in einem Stapel verwendet.

Es versteht sich, daß in der obigen Beschreibung der Funktionensatz eine Vielzahl von Funktionen auflistet, die von einer erweiterbaren Liste von Operationen gefolgt wird, welche durch Verwendung der indirekten Funktion "operate" ausgewählt werden können. In allen Fällen können diese Funktionen und Operationen als Formen eines Befehls betrachtet werden, die im Programm einsetzbar sind, um den Mikrocomputer zu betreiben. Allerdings kann die Liste von Funktionen und Operationen, um die oben diskutierten Vorteile für ein festes Format des Befehls, wie in Fig. 5 gezeigt, zu erhalten, als ein Satz von Primärbefehlen (die aus den direkten Funktionen, vorbereitenden Funktionen und indirekten Funktionen bestehen), und einer Gruppe von Sekundärbefehlen (die aus Operationen bestehen, welche durch die Verwendung der indirekten Funktion ausgewählt werden können) betrachtet werden. Um die Effizienz zu maximieren, erfordern die Primärbefehle, die am häufigsten verwendet werden, nur vier Bit des in Fig. 5 gezeigten Befehlsformates und somit können andere vier Bit für in das Operandenregister 65 zu ladende Daten verwendet werden und als ein Operand für die Befehle verwendet werden. Für die Sekundärbefehle, die am wenigsten verwendet werden, werden alle 8 Bit des in Fig. 5 gezeigten Befehlsformates gebraucht, um den erforderlichen Befehl zu identifizieren. Folglich ermöglicht das feste Format des in Fig. 5 gezeigten Befehles, daß keine Daten an einen Sekundärbefehl angefügt werden und die Sekundärbefehle arbeiten deshalb mit Daten, die in vom Operandenregister 65 abweichenden Registern gehalten werden.

Obwohl das in Fig. 4 gezeigte Befehlsformat 8 Bit umfaßt, die in zwei Hälften geteilt sind, versteht es sich, daß andere Bit-Längen verwendet werden können und daß die Aufteilung in eine Funktion und Daten nicht notwendigerweise gleiche Bit-Längen für die zwei Teile vorzusehen braucht.

Es versteht sich, daß die vorliegende, hier beschriebene Anordnung eine Kombination vorsieht, die dramatisch die Effizienz und den Durchsatz des Mikrocomputers verbessert. Durch Verwendung von Befehlen mit einem konstanten Format, durch das Vorhandensein eines Funktionssatzes, bei dem die am meisten verwendeten Funktionen direkt verfügbar sind, wobei andere Funktionen indirekt verfügbar sind,'durch eine Anordnung zum Informationsaustausch zwischen Prozessen und eine Synchronisierung zwischen diesen, durch Erlauben eines Informationsaustausches von Punkt zu Punkt zwischen Mikrocomputern und durch Vorsehen eines Speichers auf dem gleichen Chip wie jeder Mikroprozessor, kann ein Mikrocomputer gemäß der verschiedenen Aspekte der Erfindung eine Geschwindigkeit von 10 Mio. Befehlen pro Sekunde erreichen. Eine Anordnung, die auf einer Platine von nur 10 Inch x 20 Inch untergebracht ist, sollte fähig sein, eine Geschwindigkeit von 1000 Mio. Befehlen pro Sekunde zu erreichen. Eine Transputer- (Warenzeichen) -Mikrocomputeranordnung, die OCCAM (Warenzeichen) einsetzt, sollte fähig sein, Geschwindigkeiten zu erreichen, die ungefähr zwei Größenordnungen schneller als z. B. ein Motorolar 68000, der PASCAL verwendet, ist. Ein einziger Transputer, der in OCCAM programmiert ist, sollte ungefährt zwei- oder dreimal schneller als ein einziger 68000 Mikroprozessor sein, der PASCAL verwendet. Beim Stand der Technik ist, wenn die Mikrocomputer in einem Array hinzugefügt werden, der schrittweise Gewinn der Leistungsfähigkeit zunehmend geringer und wird mit einer Erweiterung der Prozessoren geringer. Allerdings ist durch die Verwendung des Mikrocomputers dieses Beispieles das Anwachsen der Leistungsfähigkeit eine lineare Funktion der Anzahl von Prozessoren. Somit ist ersichtlich, daß die vorliegende Kombination eine dramatisch erhöhte Leistungsfähigkeit im Hinblick auf den Stand der Technik erreicht.


Anspruch[de]

1. Verfahren zum Ausführen von gleichzeitig ablaufenden Prozessen in einem Computersystem mit einem Netzwerk von miteinander verbundenen integrierten Schaltungsanordnungen, wobei jeder gleichzeitige Prozeß ein Programm mit einer Hehrzahl von Befehlen ausführt, bestehend aus:

Bilden eines jeweils ersten Indikators für jeden Prozeß, um den Prozeß zu identifizieren;

Bilden eines jeweils zweiten Indikators für jeden Prozeß, um eine Programmstufe für den Prozeß anzuzeigen;

für jede integrierte Schaltungsanordnung zeitliches Planen einer Hehrzahl von Prozessen zur Ausführung durch einen Prozessor dieser Anordnung, einschließlich des Anzeigens eines laufenden Prozesses, der vom Prozessor ausgeführt wird, identifizieren eines oder mehrerer Prozesse, die eine auf die Ausführung durch den Prozessor wartende Ansammlung bilden, in Abhängigkeit von einem die Ausführung des laufenden Prozesses beendenen Befehl, Speichern eines zweiten Indikators für den laufenden Prozeß, Ändern der Anzeige des laufenden Prozesses, um den nächsten Prozeß in der Ansammlung anzuzeigen, und sodann Ausführen des nächsten Prozesses auf einer Programmstufe, die durch den zweiten Indikator des nächsten Prozesses gezeigt wird;

Information austauschen zwischen gleichzeitigen Prozessen durch eine Hehrzahl von getrennt adressierbaren Informationsaustauschkanälen, wobei die Informationsaustauschkanäle jeweils Speicherstellen aufweisen und aus Kanälen (40, 43) der ersten Art bestehen, um den Datenaustausch zwischen Prozessen an der gleichen integrierten Schaltungsanordnung (11) zu gestatten, sowie aus Kanälen (25) einer zweiten Art, um den Datenaustausch zwischen Prozessen an der einen integrierten Anordnung und einer anderen integrierten Schaltungsanordnung zu gestatten, wobei jeder Prozeß eines Informationsaustausch-Prozeßpaares eine Folge von Befehlen in einem Programm einschließlich eines Informationsaustauschbefehls ausführt, wobei diese Folge so ausgebildet ist, daß sie eine Adresse eines Kanals der ersten oder zweiten Art in Abhängigkeit davon identifiziert, ob der andere Prozeß an der gleichen integrierten Schaltungsanordnung oder an einer anderen integrierten Schaltungsanordnung auftritt, die den Informationsaustausch-Befehl umfassende Befehlsfolge die gleiche ist unabhängig von der Art des durch das Kanaladressieren ausgewählten Kanals, und wobei derjenige Prozeß des genannten Paares, welcher der erste zum Ausführen des Informationsaustausch-Befehls ist, in Abhängigkeit von der Ausführung der genannten Folge aus der zeitlichen Planung genommen wird mit einer Speicherung seines Indikators in dem Kanal und sein gespeicherter Indikator verwendet wird, um den Prozeß in Abhängigkeit von der Ausführung der Programmfolge durch den zweiten der genannten Prozesse in dem Paar wieder zeitlich einzuplanen.

2. Verfahren nach Anspruch 1, gekennzeichnet durch Anzeigen des laufenden Prozesses, der von jedem Prozessor gerade ausgeführt wird, Bewirken eines Informationsaustausches zwischen Prozeßpaaren durch Kanäle der ersten und zweiten Art, wobei jeder Prozessor auf eine Befehlsfolge einschließlich eines Informationsaustausch-Befehls anspricht, um die Ausführung des laufenden Prozesses zu stoppen und eine Anzeige des nächsten Prozesses als laufender Prozeß zu bewirken, wodurch der Prozessor seine Prozeßzeit mit mehreren gleichzeitigen Prozessen teilt und Prozesse zeitlich so einplant, daß er einen Informationsaustausch zwischen gleichzeitigen Prozessen bewirkt und dadurch ein Paar von Informationsaustauschprozessen synchronisiert.

3. Verfahren nach Anspruch 1 oder 2, bei welchem im Speicher jeder Schaltanordnung ein Arbeitsbereich mit einer Hehrzahl von adressierbaren Speicherstellen für jeden Prozeß eingerichtet wird, in Stellen jedes Arbeitsbereiches dem Prozeß dieses Arbeitsbereiches zugeordnete Variable eingeschrieben werden, und eine verbundene Liste von Prozessen gebildet wird, die auf die Ausführung durch den Prozessor warten, indem in dem Arbeitsbereich jedes Prozesses eine Anzeige des ersten Zeigerwertes des Prozesses vorgesehen wird, der als nächster Prozeß durch den Prozessor ausgeführt werden soll.

4. Verfahren nach einem der Ansprüche 1, 2 oder 3, bei welchem in einem Informationsaustauschkanal ein Zeigerwert gespeichert wird, um den Zustand des Informationsaustauschkanals anzuzeigen und auf eine Befehlsfolge einschließlich eines Informationsaustausch-Befehls anzusprechen, indem der Zustand dieses Kanals getestet wird und, wenn er nicht schon durch einen Prozeß-Beschreibungssatz besetzt ist, der Prozeß beendet wird, der den Informationsaustausch-Befehl ausgeführt hat, und sein Prozeß-Beschreibungssatz in eine Speichereinrichtung für den Kanal eingeschrieben wird.

5. Verfahren nach Anspruch 4, bei welchem die Speichereinrichtung eines Kanals bereits durch einen Prozeß-Beschreibungssatz besetzt ist, während ein Informationsaustausch-Befehl ausgeführt wird, der Prozeß, dessen Beschreibungssatz in der Speichereinrichtung sich befindet, zu der auf die Ausführung wartenden Ansammlung addiert wird und ein weiterer Wert, der nicht ein Prozeß-Beschreibungssatz ist, in die Speichereinrichtung eingeschrieben wird.

6. Verfahren nach Anspruch 5, bei welchem ein Prozessor so ausgebildet ist, daß er auf eine Befehlsfolge einschließlich eines Informationsaustausch-Befehls anspricht, indem der laufende Prozeß beendet und dadurch sein Prozeß-Beschreibungssatz aus einem diesen Wert enthaltenden Prozeßregister herausgenommen und der Prozessor veranlaßt wird, den nächsten Prozeß in einer Ansammlung auszuführen.

7. Verfahren nach Anspruch 6, bei welchem der Prozeß, der durch Ausführung einer Befehlsfolge einschließlich des Informationsaustausch-Befehls beendet wird, in die auf die Ausführung wartende Ansammlung zurückgebracht wird, wenn eine weitere Befehlsfolge einschließlich eines Informationsaustausch-Befehls durch einen weiteren Prozeß, der mit diesem Prozeß in Austausch zu treten wünscht, bewirkt wird.

8. Verfahren nach einem der Ansprüche 1 bis 7, gekennzeichnet durch das Anzeigen eines Zählwerts einer Anzahl von gleichzeitigen Prozessen, die auf einen ausgewählten Befehl in ihren Programmfolgen ansprechen sollen, um in entsprechenden Programmstufen in ihren Programmfolgen zusammengebracht zu werden, das Ausführen eines der Prozesse, bis der ausgewählte Befehl erreicht ist, Beenden des Prozesses und Einstellen des Zählwerts, Ausführen nachfolgender Prozesse, bis der Zählwert anzeigt, daß die vorbestimmte Anzahl auf entsprechende Programmstufen gebracht worden ist, und sodann Ermöglichen der fortgesetzten Ausführung des Programms des laufenden Prozesses.

9. Verfahren nach einem der Ansprüche 1 bis 8, bei welchem eine Kanaladresse in eine vorgeschriebene Speicherstelle eingeschrieben wird, wodurch in Abhängigkeit von der Ausführung des Informationsaustausch-Befehls der Prozessor eine Kanaladresse aus der Speicherstelle bestimmt und den durch diese Kanaladresse identifizierten Kanal adressiert.

10. Mikrocomputer für die Verwendung in einem Netzwerk zur Ausführung des Verfahrens nach Anspruch 1, wobei der Mikrocomputer einen Speicher und einen Prozessor auf einer integrierten Schaltungsanordnung aufweist, welche so ausgebildet ist, daß sie eine Hehrzahl von gleichzeitigen Prozessen entsprechend einer Hehrzahl von Programmschritten ausführt, wobei die Programmschritte aus einer Hehrzahl von Befehlen für die aufeinanderfolgende Ausführung durch den Prozessor bestehen, und wobei der Mikrocomputer eine Zeitplanungseinrichtung zur zeitlichen Planung der Ausführung einer Hehrzahl von Prozessen durch den Prozessor aufweist, wobei die Zeitplanungseinrichtung besteht aus

(I) einer Einrichtung zur Anzeige des laufenden Prozesses, der vom Prozessor gerade ausgeführt wird,

(II) einer Einrichtung zur Identifizierung eines oder mehrerer Prozesse, die eine auf die Ausführung durch den Prozessor wartende Ansammlung bilden,

(III) einer Einrichtung zum Addieren eines oder mehrerer weiterer Prozesse zu dieser Ansammlung,

(IV) einer Anzeigeeinrichtung für den nächsten Prozeß, um den Prozeß in der Ansammlung anzuzeigen, der vom Prozessor als nächster ausgeführt werden soll, und

einem Programmstufenanzeiger für jeden gleichzeitigen Prozeß,

einen oder mehrere Austauschkanäle (40-43) einer ersten Art zum Nachrichtenaustausch zwischen gleichzeitigen Prozessen in der integrierten Schaltungsanordung (11), einen oder mehrere Austauschkanäle (25) einer zweiten Art mit Einrichtungen (26, 27) zur Verbindung mit einer anderen integrierten Schaltungsanordnung, um einen Nachrichtenaustausch zu oder von einem Prozeß in einer anderen integrierten Schaltungsanordnung zu ermöglichen, wobei die Kanäle der ersten und zweiten Art jeweils Speicherstellen sowie adressierbare Stellen aufweisen, wodurch Prozeß-Prozeß-Austausche On-Chip und Off-Chip durch Auswahl einer geeigneten Kanaladresse bewirkt werden können, Einrichtungen (109, 50) zum zeitlichen Einplanen und Ausplanen von Prozessen, die eine Nachrichtenübertragung durch den Kanal oder die Kanäle der ersten und zweiten Art bewirken, wobei der Prozessor in Abhängigkeit von einer Befehlsfolge einschließlich eines Informationsaustausch-Befehls betätigbar ist, um die Ausführung des laufenden Prozesses durch den Prozessor zu stoppen und den gestoppten Prozeß bei Beendigung des Austausches der genannten Ansammlung hinzuzufügen.

11. Mikrocomputer nach Anspruch 10, dadurch gekennzeichnet, daß die Informationsaustauschkanäle einer ersten Art Speicherstellen (40, 41, 42, 43) in dem Speicher (19) umfassen, um einen Informationsaustausch zwischen gleichzeitigen Prozessen zu ermöglichen, die durch den gleichen Mikrocomputer ausgeführt werden.

12. Mikrocomputer nach Anspruch 10 oder 11, dadurch gekennzeichnet, daß die Informationsaustauschkanäle einer zweiten Art eine oder mehrere Informationsaustausch-Verbindungsglieder (25) umfassen, die durch zugeordnete Verbindungen mit gleichartigen Verbindungsgliedern in weiteren Schaltanordnungen verbunden werden können, wobei jedes Informationsaustausch-Verbindungsglied ein Register (47) zum Aufnehmen eines Prozeß-Beschreibungssatzes oder eines anderen Zeigerwerts enthält, der den Zustand des Informationsaustauschkanals für die Verwendung zur Synchronisierung von sich durch diesen Kanal austauschenden Prozessen anzeigt.

13. Mikrocomputer nach Anspruch 10 oder 11 oder 12, in welchem die Speichereinrichtung (19) eine Programmfolge für jeden gleichzeitigen Prozeß enthält, wobei die Programmfolgen Informationsaustausch-Befehle zum Adressieren von Kanälen (40-43, 25) der ersten und zweiten Art enthalten, und wobei jede einen Informationsaustausch-Befehl umfassende Programmfolge unabhängig von der Art des durch die Kanaladressierung ausgewählten Kanals die gleiche ist.

14. Mikrocomputer nach einem der Ansprüche 10 bis 13, dadurch gekennzeichnet, daß der Mikrocomputer auf einer einzigen integrierten Schaltungsanordung (11) ausgebildet ist.

15. Netzwerk von miteinander verbundenen Mikrocomputern jeweils nach einem der Ansprüche 10 bis 14, dadurch gekennzeichnet, daß jeder Mikrocomputer (11) Informationsaustausch-Verbindungsglieder (25) aufweist, die mit einem weiteren Mikrocomputernetzwerk durch eine Verbindung (185, 186) verbunden sind, die lediglich zum Nachrichtenaustausch zwischen den zwei miteinander verbundenen Mikrocomputern dient, wobei der Prozessor (12) jedes Mikrocomputers so ausgebildet ist, daß er eine Verbindung mit Prozeßsynchronisierung zwischen Mikrocomputern bewirkt und die Ausführung eines laufenden Prozesses beendet, sowie weitere Prozesse zu einer auf die Ausführung gemäß der bewirkten Synchronisierung wartenden Ansammlung addiert.







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

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

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