II. ソフトウェア構成の範囲
本システムは、チャネルハードウェアユニットを駆動するハンドラプログラムと、ユーザーの伝送要求を実行するネットワークプログラムという2つの主要プログラムに基づいている。
通信は全二重であるため、これらの各プログラムは2つの部分に分かれていると見なすことができる。一方は出力データを扱い、他方は入力データを扱う。(Fig. 1参照)
これら2つのプログラムは、バッファプールを介してデータを交換し、インターフェーステーブルを介して論理情報を交換する。
以下では、各プログラムの出力部分のみに注目する(Fig. 2参照)。入力部分も非常によく似ているであろう。
II-1. ネットワークプログラム
II-1-1. 多重化機能
このプログラムは、送出メッセージを多重化する(そして受信メッセージを分配する)。多重化とは、ユーザー(または発呼者、または相手)のすべての要求を積み重ね、ハンドラが送信し続けられるようにバッファプールを満たすことである。
多重化(および分配)は、リンク識別番号に基づいている。(リンク=2人のユーザー間の論理接続)。多重化の問題は、ユーザーのプログラムとネットワークプログラムとの間のインターフェースと密接に関係しており、それは実際には...(unreadable)オペレーティングシステムである(後述の「質問」を参照)。
II-1-2. 出力メッセージ処理
ユーザーのプログラムがテキストを送出しようとするときは、次の情報を示さなければならない(マクロを通じて、または呼び出しパラメータとして):テキストの位置、バイト単位のテキスト長、および宛先。
これらのデータを用いて、ネットワークプログラムは次のことを行う:
-
16ビットのホストヘッディングを準備する(1ビット:トレース、2ビット:予備、8ビット:リンク識別番号、5ビット:宛先ホスト)
-
ヘッダーとテキストの間に16ビットのマーキングを挿入し、テキストがワード境界から始まるようにする。このマーキングは、テキストの最初のビットに先行する1つの1からなり、さらにその前に、隙間を埋めるために15個の0が置かれる。
-
ユーザーのテキストの長さを検査する - それが1006バイトを超える場合
+- -+
|8080 (max host message length) - 32 (heading + marking)|
|-------------------------------------------------------|
| 8 (byte = 8 bits) |
+- -+
プログラムはテキストを、最大長が1006バイトである一連のメッセージに分解する - これらの各メッセージの前には、上で説明したようなヘッディングが置かれる。
備考:その場合、ヘッディングの予備ビットの1つを、複数のメッセージが同じテキストに属することを示すために使用できる。
-
メッセージを構成するEBCDIC文字をASCII文字に_トランスコード_する。
-
メッセージの内容でプールのバッファを_満たす_。
-
インターフェーステーブルの内容を_更新_し、充填ポインタを移動する(後述)。
II-2. ハンドラプログラム
このプログラムは、ネットワークプログラムによって、またはI/O割り込みによって起動される。
このプログラムは非常に短くなるであろう。マスターモード(特権命令)でコーディングされ、オペレーティングシステムのI/Oスーパーバイザに組み込まれるべきである。
このプログラムは次のことを行う:
-
チャネルハードウェアユニットを_制御_する。送信を開始し、場合によってはバッファ間のデータチェーニングを行い、割り込みを受信したときにさまざまなデバイス状態を検査する。
-
ネットワークプログラムによって満たされたバッファを_空にする_。
-
インターフェーステーブルを_探索_し_更新_する(後述)。
-
場合によっては、IMPとの制御伝送手順を保証することができる(「質問」を参照)。
II-3 バッファとインターフェーステーブル
II-3-1 バッファ
それらは、最大ホストメッセージのテキスト+ヘッディングとマーキング(1006 + 4 = 1010バイト)を格納するのに十分な大きさでなければならない。
したがって、バッファサイズは256ワード(1024バイト)に選ぶことができる。バッファの数については、それがリンクの利用率を決定する -
II-3-2 インターフェーステーブル
ネットワークプログラムが、送信データの位置と長さをハンドラに通知するのは、このテーブルを通じてである。
このテーブルは、2つのポインタを持つリングテーブルとすることができる。1つは充填用、もう1つは取り出し用である。それらはそれぞれ、ネットワークプログラムとハンドラプログラムによって更新される。
[Length] of the message
contained
in the buffer
^
|
+--------------+----------+
| Buffer addr. | nb bytes |
+--------------+----------+
| | | <== Filling pointer
+--------------+----------+ |
| | V
| |
// //
| |
| |
| |
+--------------+----------+
| Buffer addr. | nb bytes | <== eEtracting pointer
+--------------+----------+ |
| Buffer addr. | nb bytes | V
+--------------+----------+