)B_DONEフラグが立っていた場合は、デバイスへのアクセスを行いません。ディスクキャッシュの役割を果たしています。)は実装がごちゃごちゃしているように思えます。大きな流れは、通常の読み出し処理→先読み処理(B_ASYNC)→通常読み出しの後処理、てな感じです。先読み処理は、デバイスからの読み出し処理完了を待ちません。)が呼び出されてB_BUSYフラグが勝手にリセットされます。B_ASYNC書き込みの場合はデバイスへの書き込み終了を待ちません。)が呼び出されB_BUSYフラグが勝手にリセットされます。通常書き込みの場合はデバイスへの書き込み終了を待ちます。)を呼び出してB_BUSYフラグをリセットします。)などでバッファを取得しておく必要があります。)を呼び出しB_BUSYフラグをリセットしav-listに戻すだけです。)で書いたように、av-listからそのバッファを取得するときにB_ASYNCで書き込まれます。)が呼ばれ、B_DELWRIのバッファがまとめてB_ASYNCで書き込まれます。)による初期状態も理解しておくと、バッファの全体像が見えてくるでしょう。状態遷移図は改良の余地があると思っています。この図だけで理解しようとせず、ソースを見ながら補足的に使うことをお勧めします。エラー周りは省略しました。B_ASYNC動作に関してどこでエラーを拾うのかなどはきちんと考える必要がありそうです。私もまだ理解できていません。次回はようやくファイルシステムに入っていくつもりです。Physics月別アーカイブはてなブログをはじめよう!takahiroxさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。