[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 818] Re: フォーマットについて.



  こんばんは、川合です。


Myurika さんは 2000/06/08 20:43:15 の「[OSASK 807] Re: フォーマ
ットについて.」で書きました:

>  TOWNSでも後期にはFIFOバッファ積んでましたし、それは当然なのだと思います。
>  しかし、16バイトじゃ足りないのです(笑)。作りの悪いMIDIの曲だと、一瞬に
>して数十から、下手すると100バイトを超えるデータが発生することがあって、結
>構困りものなのですね。
># TOWNSのMIDIマネージャだと、人間にに判るぐらい処理が落ちることがありまし
>た。

  この「処理落ち」というのに関して、2つの可能性が僕にはあるよう
に思えます。Myurikaさんがどちらを想定なさっていたのかがわかりま
せんが、とりあえず両方のケースについてお答えします。

1.MIDIマネージャーは送ったつもりなんだけど、実はまだバッファに
    溜まっていて、それが累積して微妙なところでテンポが狂う。

2.単純にFIFOバッファがあふれて、あふれた分を送信するために割り
    込みがちょくちょくかかり、そのせいで全体の処理が遅くなる。

  1.については、FIFOの段数とは無関係であります。これは、本質的
には通信速度の問題であり、シリアルドライバーやハードウェアが努力
しても、通信速度を上げていただかないことには、改善にはなりません
。

  2.については、ご心配には及ばないかもしれません。僕と、ASKAの
表現力を信じてみてください。・・・って、根拠が無いと宗教家みたい
な発言になってしまうので、参考に簡単な計算をしてみます。

  PC16550での最高の通信速度は、115200bpsです。一方、16バイトのFI
FOをフルに活用すれば、160bit送信するごとにIRQ3かIRQ4が発生するこ
とになります(スタートビット、ストップビットが入るので1バイトで1
0bit必要)。ということは、1秒間に割り込まれる回数は、720回です
。これは、「たったの」720回だといってもよいでしょう。他のOSにと
って、秒間720回は楽ではないのかもしれませんが、OSASKにとっては、
まったく造作もないことです。よっぽどタイマールーチンの方がシビア
です。タイマールーチンはマイクロ秒オーダーで制御される世界であり
、そこからみればミリ秒オーダーの割り込みなどは余裕なのです。

>  で、その困りもののデータへの警告のために、送りきれない量のデータが発生
>していることをプレイヤが認識できた方が個人的には嬉しいわけです。

  これは、1.のケースに対処するために必要、という意味でしたら、
納得が行きます。・・・でしたら、busyなんていうあいまいなものでは
なくて、未送信バイト数そのものをアプリケーションにお知らせいたし
ます。これが0でなかったら、送信できていないデーターが存在すると
いうことを意味しているわけです。もちろん、未送信データーについて
は、FIFO内に入ってしまった分も含めて、アプリケーションが望んだタ
イミングでキャンセルすることもできます。いかがでしょうか?


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/