07.2 複数の非同期事象をFIFOで処理する(EVENTS)②

EVENTSマクロによって複数のECBをFIFOで処理することができます。複数のECBにPOSTされている状態でも、WAIT=YES指定のEVENTSマクロ発行毎に完了済みのECBが順番に通知されます。しかし、同時に多くの非同期事象が完了するような場合は、1つのECB毎にEVENTS SVCを呼び出していてはオーバーヘッドが大きいです。通知済みのECBをまとめてプログラムで認識できれば、より少ないオーバーヘッドで複数のECBを完了順に知ることができます。

完了済みECBのピックアップ処理の例

わかりやすい基本的な方法

より効率がよい方法(EVENTSの発行回数を最低限にする)

WAIT=YES指定のEVENTSマクロを発行した時点で複数のECBがPOST済みであれば、GR1が示す完了済みECBポインター・リストには複数のECBアドレスが登録されていて、最後のECBアドレスの先頭ビットは1になっています。これは、WAITマクロのECBLISTと同様の形式です。最初のECBをロードしたら、ポインター・リストのアドレスを+4すれば次のECBアドレスの格納エントリーに位置付けることができます。先頭ビットが1になっているエントリーのECBをロードして処理したら、そのポインター・エントリーのアドレスをLASTパラメーターに指定して再びWAIT=YES指定のEVENTSマクロを発行します。