OPコマンドを待ち合わせるECBをECBLISTでWAITする時の注意

By 神居 - Posted: 2010/09/10 Last updated: 2010/09/10 - One Comment

オペレーター・コマンド待ち合わせのECBをECBLISTに含める場合の注意

MODIFY/STOPコマンドによってオペレーター・コマンドを受け取るには、EXTRACTマクロでCOMエリアのアドレスを求め、そこからポイントされているMODIFY/STOPコマンドECBを求めます。その後QEDITマクロによってコマンド・キューを初期設定してから、MODIFY/STOPコマンドECBでWAITします。コンソールからMODIFY/STOPコマンドが投入されるとECBがPOSTされます。COMエリアからCIBをたどり、入力されたコマンド文字列を得る、という流れになります。
MSPでもVOS3でもこの流れに関しては同じです。しかしMODIFY/STOPコマンドECBによって単独でWAITするのではなく、自分自身のプログラム・イベントのECBと共にマルチイベントでWAITする場合は注意が必要です。MODIFY/STOPコマンドECBを含めたマルチイベントでのWAITを行う場合、MODIFY/STOPコマンドECB領域の記憶保護キーが0になっていることが理由です。


※MSP/VOS3におけるこのような現象は、1990年代前半頃に調査した結果です。データベース製品を担当してた先輩から「昔、お客さんからソフトを立ち上げてるだけで使ってないのに何でこんなにCPUが上がってるの?って聞かれたことがある、そしたらさ...」という話が発端でした。同じようにECBLISTでマルチイベントのWAITしている自分の担当製品では同じMSPでそんなことは起きてないのに何で?ということから自分でもいろいろ調べてみたわけです。その後機会があって2001年にもテストしましたが変わっていませんでした。しかしそれから10年近く経ってますので、もしかしたらOSの動きも変わっているかも知れません。

Posted in API、インターナルの違い, システムプログラマーのための手引きいろいろ • • Top Of Page

One Response to “OPコマンドを待ち合わせるECBをECBLISTでWAITする時の注意”

Comment from caspar
Time 2013年5月9日 at 15:23

ぬ? 私の知ってるSPKAはSI形式じゃなくてS形式なので、SPKA 0とかやったら落ちると思いますが。もしかしてOS IVの方言なのかな…

ところで今回初めてEVENTSを使おうとしています。何でだか標準形式しか見当たらないので、マクロの展開形だけ確認しようとアセンブルしたら、ICM命令のマスク値がバグってる気がして困惑したりしています。