Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
デバイスファイルは、iノードがデバイスファイル属性を持つことと、データブロックを持たない(通常のファイルシステムではだが)ことを除けば、通常ファイルと同じである。
デバイスファイルの作成は、vfs sys_mknod(do_mknod)関数においてlookup_dentry関数を用いてファイルを登録する親ディレクトリのiノードを求めた後、そのiノードのmknodオペレーションを呼び出すことにより実現されている。ext2ファイルシステムでは、ext_mknod関数が呼び出される。(正確には、mknod処理のパラメータで、デバイス以外に 通常ファイルやパイプも生成可能である)
ext2_mknod(親ディレクトリのiノード, 登録するdentry) フリーiノードを一つ確保(ext2_new_inode関数) iノードの初期化 このiノードを親ディレクトリに登録(ext2_add_entry関数) ディレクトリエントリに、このファイルのiノード番号を書き込む switch(ファイルタイプ) case 通常ファイル: iノードに通常ファイル用のiノードオペレーションテーブル登録 case キャラクタデバイス: iノードにキャラクタデバイス用のiノードオペレーションテーブル登録 case ブロックデバイス: iノードにブロックデバイス用のiノードオペレーションテーブル登録 case パイプ: iノードにパイプファイル用のiノードオペレーションテーブル登録(init_fifo関数) ◇iノードの遅延書き込み要求(mark_inode_dirty関数) ◇ディレクトリブロックの遅延書き込み要求(mark_buffer_dirty関数) if(SYNC属性 ?) { ◆ディレクトリブロックの書き込み(ll_rw_block関数, wait_on_buffer関数) } 新規作成したファイルのdentryとiノードをリンク(d_instantiate関数) ディレクトリブロック用のバッファ解放(brelse関数)
デバイスファイルの削除は、通常ファイルと同じくunlink処理で行われる。処理手順は全く同じである。
問題点
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST1
[PageInfo]
LastUpdate: 2008-08-27 14:46:02, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members