Path: jaist-news.jaist!coconuts.jaist!wnoc-tyo-news!news.nc.u-tokyo.ac.jp!makino From: makino@grape.c.u-tokyo.ac.jp (Jun Makino) Newsgroups: fj.comp.lang.c Subject: Re: aio_write() Date: 14 Oct 1998 13:40:39 GMT Organization: College of Arts and Sciences, Univ. of Tokyo Lines: 46 Message-ID: <7029kn$4u1@news.nc.u-tokyo.ac.jp> References: <6vvuua$4ho$1@ginger.media.kyoto-u.ac.jp> NNTP-Posting-Host: provence.c.u-tokyo.ac.jp X-Newsreader: mnews [version 1.19PL2] 1996-01/26(Fri) Xref: jaist-news.jaist fj.comp.lang.c:2512 <6vvuua$4ho$1@ginger.media.kyoto-u.ac.jp>の記事において tsuru@cr.scphys.kyoto-u.ac.jpさんは書きました。 > サンプルプログラムの中では、 > > for(;;) > { > ADC_1Msample(); > FileWrite_1Msample_with_aio_write(); > } > > のような使い方をしています。つまり、ADCで1Msampleした後、その1Msampleの > データを aio_write()で一気に書いてある訳です。 > > しかし、今一つ aio_write() の動作が良く分かりません(というか > 理解に自信がありません)。 > > 例えば、aio_write()の代わりに write()を使うとどういうことになるのか?など。 > 申し訳ないのですが、どなたかご存知の方がいらっしゃいましたら教えて > いただけないでしょうか? ええと、ユーザープロセスからみた違いは、write では戻ってきた時に すでに処理が終っている(ユーザーが準備したバッファから、カーネル のバッファなり物理的なディスクなりへの書き込みが終っている)のに 対し、 aio_write ではそういう保証はない(というか、むしろ積極的に 書き込みが終る前に制御を返す)ということです。 従って、 aio_write では、書き込みが終ったかどうかをチェックしない といけないわけで、チェックしないでバッファの中身を変更すると、変 更した結果のほうが書かれてしまうかもしれないということになります。 そのかわり、ディスクへの書き込みの終了を待たないで次の作業に移れ るというメリットがあるわけです。つまり、上の例では、 > FileWrite_1Msample_with_aio_write(); のところで非同期出力にしておくと、次の ADC_1Msample() とディスク への書き込みが並列動作する(はずである)わけです。ここで只の write だと、実際に書き込みが終るまでユーザプロセスは寝てます。 ところで、 12 bit で 10 MHz ということは、 16 bit word で返したと して 20 MB/s でデータが来るわけですよね。非同期にするとか小細工し ても、並のディスクでは追いつかないのでは?連続して 20 MB/s も出ま す? 牧野@東大駒場