Zum Hauptinhalt springen

Systemaufrufe und Steuerbefehle

Hier skizzieren wir die Mechanismen zum Aufbauen, Umschalten und Abbruch einer Verbindung. Wie oben erwähnt, interagiert das NCP über Systemaufrufe mit Benutzerprozessen und über Steuerbefehle mit anderen NCPs. Wir beginnen daher mit einer teilweisen Beschreibung der Systemaufrufe und Steuerbefehle.

Systemaufrufe unterscheiden sich von einem Betriebssystem zum anderen, daher ist die folgende Beschreibung nur als Anregung gedacht. Wir nehmen hier an, dass ein Prozess mehrere Ein-/Ausgabewege hat, die wir Ports nennen. Jeder Port kann mit einem sequenziellen E/A-Gerät verbunden sein und überträgt, solange er verbunden ist, Informationen nur in eine Richtung. Wir nehmen ferner an, dass der Prozess blockiert (zurückgestellt, schlafend) ist, während die Übertragung stattfindet. Das Folgende ist die Liste der Systemaufrufe:

Init      <port>, <AEN 1>, <AEN 2>, <foreign socket>
where <port> is part of the process issuing the Init
_
<AEN 1> |
and +- are 8-bit AEN's (see Figure 2)
<AEN 2> |
_|

Das erste AEN wird verwendet, um die Verbindung zu initiieren; das zweite wird verwendet, solange die Verbindung besteht.

<foreign socket> ist der 40-Bit-Socket-Name des fernen Endes der Verbindung.

Die niederwertigen Bits von <AEN 1> und <AEN 2> müssen übereinstimmen, und diese müssen das Komplement des niederwertigen Bits von <foreign socket> sein.

Das NCP verkettet <AEN 1> und <AEN 2> jeweils mit der Benutzernummer des Prozesses und der HOST-Nummer, um 40-Bit-Sockets zu bilden. Es sendet dann einen Steuerbefehl Request for Connection (RFC) an das ferne NCP. Wenn das ferne NCP positiv antwortet, wird die Verbindung aufgebaut und der Prozess wird entblockiert. Wenn das ferne NCP negativ antwortet, entblockiert das lokale NCP den anfordernden Prozess, teilt ihm jedoch mit, dass der Systemaufruf fehlgeschlagen ist.

Listen <port>, <AEN 1>

wobei <port> und <AEN 1> wie oben sind. Das NCP behält die Ports und <AEN 1> und blockiert den Prozess. Wenn ein RFC-Steuerbefehl eintrifft, der den lokalen Socket benennt, wird der Prozess entblockiert und benachrichtigt, dass ein fremder Prozess anruft.

Accept <AEN 2>

Nachdem ein Listen erfüllt wurde, kann der Prozess den Anruf entweder ablehnen oder annehmen und ihn auf einen anderen Socket umschalten. Um den Anruf anzunehmen, ruft der Prozess den Systemaufruf Accept auf. Das NCP sendet dann einen RFC-Steuerbefehl zurück.

Close <port>

Nach dem Aufbau einer Verbindung ruft ein Prozess Close auf, um die Verbindung abzubrechen. Close wird auch nach einem Listen aufgerufen, um einen Anruf abzulehnen.

Transmit <port>, <addr>

Wenn <port> an einen Sende-Socket angeschlossen ist, zeigt <addr> auf eine zu sendende Nachricht. Dieser Nachricht ist ihre Länge in Bits vorangestellt.

Wenn <port> an einen Empfangs-Socket angeschlossen ist, wird eine Nachricht unter <addr> gespeichert. Zuerst wird die Länge der Nachricht gespeichert.

Steuerbefehle​

Für die Kommunikation zwischen Netzsteuerprogrammen wurde ein Vokabular von Steuerbefehlen definiert. Jeder Steuerbefehl besteht aus einem 8-Bit-Operationscode zur Angabe seiner Funktion, gefolgt von einigen Parametern. Anzahl und Format der Parameter sind für jeden Operationscode festgelegt. Eine Folge von Steuerbefehlen, die für einen bestimmten Host bestimmt ist, kann in eine einzige Steuernachricht gepackt werden.

RFC   <my socket 1>, <my socket 2>.
<your socket>, (<link>)

Dieser Befehl wird gesendet, weil ein Prozess entweder einen Systemaufruf Init oder einen Systemaufruf Accept ausgeführt hat. Ein Link wird vom voraussichtlichen Empfänger zugewiesen, daher wird er weggelassen, wenn <my socket 1> ein Sende-Socket ist.

Es ist ein deutlicher Vorteil, dieselben Befehle sowohl zum Initiieren einer Verbindung (Init) als auch zum Annehmen eines Anrufs (Accept) zu verwenden. Wäre der antwortende Befehl anders als der initiierende Befehl, könnten zwei Prozesse sich gegenseitig aufrufen und blockiert werden, während sie auf die Antwort des jeweils anderen warten. Mit diesem Schema tritt kein Deadlock auf, und es bietet eine kompaktere Möglichkeit, eine Menge von Prozessen zu verbinden.

CLS      <my socket>, <your socket>

Die angegebene Verbindung wird beendet

CEASE    <link>

Wenn der empfangende Prozess seine Eingabe nicht so schnell verarbeitet, wie sie eintrifft, wird der Pufferspeicher im empfangenden Host genutzt, um die wartenden Nachrichten in eine Warteschlange zu stellen. Da im Allgemeinen nur begrenzter Speicherplatz verfügbar ist, muss der empfangende Host möglicherweise den sendenden Host daran hindern, weitere Nachrichten über die störende Verbindung zu senden. Wenn der sendende Host diesen Befehl empfängt, kann er den Prozess blockieren, der die Nachrichten erzeugt.

RESUME   <link>

Dieser Befehl wird ebenfalls vom empfangenden Host an den sendenden Host gesendet und hebt ein vorheriges CEASE auf.