[[PageNavi(internal24-navi)]]
{{{ comment
h2w-title:デバイスファイル作成と削除
}}}
= デバイスファイル作成と削除 = #SECTION0310140000000000000000
デバイスファイルは、iノードがデバイスファイル属性を持つことと、データブロックを持たない(通常のファイルシステムではだが)ことを除けば、通常ファイルと同じである。
デバイスファイルの作成は、vfs sys_mknod(do_mknod)関数においてlookup_dentry関数を用いてファイルを登録する親ディレクトリのiノードを求めた後、そのiノードのmknodオペレーションを呼び出すことにより実現されている。ext2ファイルシステムでは、ext_mknod関数が呼び出される。(正確には、mknod処理のパラメータで、デバイス以外に パイプも生成可能である。v2.4からは通常ファイルは生成 できなくなった。)
{{{
ext2_mknod(親ディレクトリのiノード, 登録するdentry, ...)
フリーiノードを一つ確保(ext2_new_inode関数)
iノードの初期化(init_special_inode(iノード、モード...)
このiノードを親ディレクトリに登録(ext2_add_entry関数)
◇iノードの遅延書き込み要求(mark_inode_dirty関数)
新規作成したファイルのdentryとiノードをリンク(d_instantiate関数)
init_special_inode(iノード、モード, ...)
switch(ファイルタイプ)
case キャラクタデバイス:
iノードにキャラクタデバイス用のiノードオペレーションテーブル
def_chr_fops登録
case ブロックデバイス:
iノードにブロックデバイス用のiノードオペレーションテーブル
def_blk_fops登録
ブロックデバイス管理構造体を確保し登録(bdget関数)
case パイプ:
iノードにパイプファイル用のiノードオペレーションテーブル
def_fifo_fops登録
}}}
デバイスファイルの削除は、通常ファイルと同じくunlink処理で行われる。処理手順は全く同じである。
'''問題点'''
1. SYNCモードでマウントの場合でも、初期化したiノードの 同期書き込みが行われておらず、 ゴミのiノードがディレクトリに登録されるタイミングがある。 システムクラッシュによりDUPブロックが発生する可能性がある。
----
''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1
[[PageNavi(internal24-navi)]]