- ユーザプログラムが端末にwriteシステムコールを発行
- ユーザ空間のデータがtty.t_outqに追加
- tty.t_outqの先頭データをKL11レジスタに設定して端末の出力処理を開始
- 出力端末の動作が完了するとKL11が割り込みをかけて、割り込みハンドラはtty.t_outqにデータが残っていれば出力処理を継続
最上位ビットが1になっていたときはtimeoutを実行する
TTHIWAとTTLOWATの間でキューのデータ数を確認する
klwrite
ttwrite呼び出し
klwrite(dev) { ttwrite(&kl11[dev.d_minor]); }
ttwrite
端末への出力時にデバイスドライバから呼び出される端末共通処理関数 (データをttyoutputに丸投げする)
/* * Called from the device's write routine after it has * calculated the tty-structure given as argument. */ ttwrite(atp) struct tty *atp; { register struct tty *tp; register int c; tp = atp; if ((tp->t_state&CARR_ON)==0) return; while ((c=cpass())>=0) { spl5(); /* 処理能力がレッドゾーンならすでに入っているものを出力しつつスリープ */ while (tp->t_outq.c_cc > TTHIWAT) { ttstart(tp); tp->t_state =| ASLEEP; sleep(&tp->t_outq, TTOPRI); } spl0(); /* 処理能力の範囲内ならデータをtty.t_outqに放り込む */ ttyoutput(c, tp); } /* 端末への出力処理を開始する */ ttstart(tp); }