Linux Kernel(2.6)の実装に関するメモ書き

generic_file_write()


Rev.3を表示中。最新版はこちら

1. 概要

ファイルシステム上のファイルにWriteするための汎用ルーチンgeneric_file_write()の解説。

generic_file_write()はファイルへの書き込みの際にVirtual File Systemのレイヤから呼び出される(図1)(*1)。generic_file_write()はVirtual File Systemから渡された書き込みデータを指定ファイルのページキャッシュに書き込み、Dirty状態にしておく。ページキャッシュへの書き込みのみでディスクへの書き込みはここでは行われない(*2)。ページキャッシュがDirty状態になっているので、ディスクには遅延して書き込まれる。

図1 generic_file_write()での書き込み処理

(*1) 各ファイルシステムのstruct file_operationsのwriteにgeneric_file_write()が登録されており、Virtual File Systemからfile->f_op->write()のようにして呼び出される。本関数を使用しないファイルシステムもある。

(*2) O_SYNCが指定されていた場合などは除く。

2. generic_file_write()の動作

generic_file_write()のプロトタイプは以下のとおり。

ssize_t generic_file_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)

fileは書き込み対象ファイル。buf,countは書き込みデータのバッファとバッファサイズ。pposはファイル内の書き込み位置を示す。

generic_file_write()は図1に示すように関数を呼び出し、ページキャッシュへの書き込みはgeneric_file_buffered_write()で行われる。

generic_file_buffered_write()は主に以下の手順でデータの書き込みを行う。

(1) prepare_write処理
(2) ページキャッシュへのデータの書き込み
(3) commit_write処理


関連ページ



最終更新 2007/09/28 12:16:00 - kztomita
(2007/09/28 11:59:15 作成)
添付ファイル
generic_file_write.png - kztomita


リンク
最近更新したページ
検索