Lions' 本読み (94)

朝練メモ。昨晩の続きを。
なんとなく 15 章を眺めるに

  • rkstrategy (5389) 手続きで入出力なリクエストを発行
  • rkintr (5451) 手続きは操作完了の割り込み

で全部ヤッツケちゃってる風に見えます。こんなんでええのかなぁ。
とりあえず別途 pdp11 なマニュアルは確認の方向にて。

rkstrategy 手続き

{書き込み, 読み込み}要求な構造体をリストにつないでリクエスト、というのがブロックデバイスへの一般的なリクエストの出しかたなんでしょうか。
とは言え、現時点で swap なナニしか取り扱っていないからここまで単純にモノが見えるのかな、という感触でもあります。swap 手続きでは

5206    *fp = B_BUSY | B_PHYS | rdflg;
5207    swbuf.b_dev = swapdev;
5208    swbuf.b_wcount = - (count<<5);
5209    swbuf.b_blkno = blkno;
5210    swbuf.b_addr = coreaddr<<6;
5211    swbuf.b_xmem = (coreaddr>>10) &077;
5212    (*bdevsw[swapdev>>8].d_strategy)(&swbuf);

swbuf (要求な構造体) を作って d_strategy 手続きに渡してます (実態は rkstrategy 手続き)。で、要求を処理する側では昨晩エントリに書いたような形で要求な構造体オブジェクトをリストに追加していく模様。
rk ディスクデバイス側ではその要求を順に取り出して処理していくのだろうと思われますが、このあたりの詳細がまだ見えてません。
で、処理が完了したら割り込みが入るんですね。以下なカンジで割り込みも登録されています。

0576 .globl      _rkintr
0577 rkio:       jsr     r0,call; _rkintr

で、この rkintr (5451) 手続きが何をしているかというと、要求なオブジェクトの先頭をとりだしてエラーチェックをした後に要求なリストを一つづらして iodone 手続きを呼び出してます。
微妙に腑に落ちていないのですが、週末もありますしこのまま先に進めてみます。