[printing-japan] Re: [printing-japan] Bi-di 資料

yoshida mikio-y @ zd6.so-net.ne.jp
2003年 12月 10日 (水) 09:24:51 PST


BBRの吉田です。

In message, "Masaki IWATA" <iwata @ axe-inc.co.jp>-san wrote on 
Thu, 11 Dec 2003 01:47:54 +0900...

> > |  プロセスタイプ:
> > |   プリンタステータスを勝手にプリンタから取得し続けて、それを
> > |   XML変換してバッファに格納しておく。また、XMLデータが準備
> > |   出来たら、パイプにその旨を示すデータ(仮にA)を書きこむ。
> > |   データAをパイプに書きこんだ後も、プロセス側はプリンタの
> > |   ステータスを読みこんで、XMLデータを更新し続ける。
> 
> ということは、プロセスタイプでは、bidi*Read() の呼び出し
> とは無関係に、自動的に(一定間隔で)ステータスポーリングを
> 行っているということですから、プリンタからのデータ read()
> 処理と bidi*Read() は、非同期ですね。
> # bidiStartRead() 時に、read() してからサスペンドするので
> # あれば、同期になりますが、それなら bidiStartRead() が呼
> # ばれた時だけ read() すれば済むわけですから...
> 
> このポーリング間隔は、Bi-di Plug-in が、自発的に PPD ファ
> イルから取得するということになりますね。
> 
> ということは、プロセスタイプの場合は、やはり Backend や
> printer daemon で入出力の排他処理を行っても、意味がない
> ですね。(bidiCtrl() 系は良く分かりませんが...)

ここで、入出力の排他といっているのは、Plug-inモジュールに対するデー
タの読み込みと書き込みの処理を対象にしていますか?
それともうひとつ確認ですが、
排他するのは、bidiStartRead, bidiRead, bidiEndRead のブロックと
bidiStartWrite, bidiWrite, bidiEndWrite のブロックと思えばよいですか?
#「意味がない」のニュアンスが分からないもので… 

> # プロセスタイプの Bi-di Plug-in が、印刷データの出力処
> # 理とは無関係に、ステータスデータの read() を行っている
> # ということは、共有ライブラリタイプの場合でも、
> # bidiStartRead(),bidiRead(),bidiEndRead() の手順さえ踏
> # んでいれば、*任意*のタイミングで割り込ませても問題ない
> # と判断して良さそうですね。(間隔はあけるとして)

これは、Plug-inモジュールに対する書き込み処理を割り込ませるというこ
とでしょうか?
だとすると、問題はないとしても、わざわざそうする必要があるのでしょう
か?

ところで、仕様書の方では、bidiStartRead, bidiRead, bidiEndRead のブ
ロック内に bidiStartWrite または bidiWrite または bidiEndWrite が来
るとエラーになるよう規定されています。 

> > |   bidiBeginRead が呼ばれたら、プロセス側はXMLデータの更新を
> > |   サスペンドし、XMLデータのパイプへの書きこみ準備を行う。
> > |   呼び出し側は、データAを読み飛ばす。
> 
> bidiStartRead() のことですよね。
> この場合、既にステータスデータがある訳ですから、ここでブ
> ロックすることはないですよね。(一度も read() していないと
> いうことなら、ブロックするのかもしれませんが...)
> 
> > |   bidiReadが呼ばれたら、プロセス側はXMLデータを順次パイプに
> > |   書きこむ。呼び出し側は、パイプからデータを順次読み込む。
> 
> ここでも、既にあるデータを吐き出すだけですから、ブロック
> することはないですね。
> 
> > |   bidiEndReadが呼ばれたら、プロセス側はXMLデータの更新を
> > |   再開する。
> > | 
> > |  共有ライブラリタイプ:
> > |   bidiBeginRead が呼ばれたら、plug-in はプリンタからステータスを
> > |   読みこんで、それをXML変換する。
> 
> 共有ライブラリタイプの場合は、ここでプリンタからのステー
> タスデータを read() する訳ですから、ブロックする可能性が
> ありますね。
> 
> > |   bidiReadが呼ばれたら、plug-inはXMLデータを呼び出し側に
> > |   順次返す。
> 
> ここでは、プロセスタイプの場合と同様、既にあるデータを吐
> き出すだけですから、ブロックすることはないですね。
> 
> > |   bidiEndReadでは特に何もしない。(read中フラグを落とすくらい?)
> 
> 以上のことから、bidi*Read() がブロックする可能性があるのは、
> bidiStartRead() のみであり、しかも、プロセスタイプの場合は
> 事実上ブロックすることはない。ということになりますが、これ
> で間違いはないでしょうか?

ハイ、間違いないと思います。

> --
> IWATA Masaki
>  岩田 正樹

----
吉田 幹  mikio-y @ zd6.so-net.ne.jp
(有)BBR





More information about the Printing-japan mailing list