[[PageNavi(internal22-navi)]]
{{{ comment
h2w-title:ファイルアクセスの排他処理
}}}
= ファイルアクセスの排他処理 = #SECTION0310200000000000000000
複数のプロセスから、同時一つのファイルに対する構造の変更処理が行われないように、またファイル参照中にその構造が変更されてしまわないように、ファイルシステムはファイルの排他処理を行っている。各ファイルのメモリiノード中にロックフラグ(i_semメンバ)を用意し、下記の場合ファイルiノードのロック操作を行っている。
* 書き込みを行うファイル(writeシステムコール)
* トランケート対象のファイル(do_truncate関数)
* パス名の検索処理中のディレクトリ(real_lookup関数)
* ファイル生成時の親ディレクトリ(open_nami関数)
* ディレクトリファイル、デバイスファイル、シンボリックリンクファイル 生成時の親ディレクトリ(do_mkdir, do_mknod, do_symlink関数)
* ファイルのリンク時の親ディレクトリ(do_link関数)
* ファイルのアンリンク時の親ディレクトリ(do_unlink関数)
* ディレクトリ削除時の対象ディレクトリと親ディレクトリ(do_rmdir関数)
* ファイルの移動時の、移動元の親ディレクトリと移動先の親ディレクトリ (do_rename関数)
ファイル構造に依存しない処理ではiノードのロックを行っていない。例えば、ファイルのread処理ではiノードのロックを行わないので、ファイルへのwrite処理中でも、ファイルからのread処理が行えることを意味している。
'''補足説明'''
ディレクトリ操作では、二つのiノードを同時にロックする場合があるが、デッドロックを避けるため必ずメモリiノードが配置されているアドレス順でロックを行っている。
----
''(NIS)HirokazuTakahashi [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1
[[PageNavi(internal22-navi)]]