inode_operations


Linux(vfs)

inode_operations

iノード操作関数テーブル
ファイルオープン時にinodeとファイルテーブルに設定される

struct inode_operations {

メンバ2.42.6説明
createファイルを作成する
lookup名前からiノードを取得/検索する
linkハードリンクファイルを作成する
unlinkファイルのアンリンク(削除)を行う
symlinkシンボリックリンクファイルを作成する
mkdirディレクトリを作成する
rmdirディレクトリを削除する
mknodスペシャルデバイスファイルやPIPEを作成する
renameファイル/ディレクトリの名前を変更する
readlinkシンボリックリンクファイルのパス情報を読み込む
follow_linkシンボリックリンクが指すパス名を解決する
put_link×シンボリックリンクのページ解放
truncateファイルサイズを変更する(切り詰める)
permissionACL動作
revalidate×メタデータの更新(kernel2.6ではgetattrの延長で呼ぶ)
setattriノードのデータ(メタデータ)を更新する(通称setmeta)属性変更等
getattriノードのデータ(メタデータ)を最新状態とする(通称getmeta)
setxattr×拡張属性設定(SELinux等で使用)
getxattr×拡張属性取得(SELinux等で使用)
listxattr×拡張属性取得(SELinux等で使用)
removexattr×拡張属性削除(SELinux等で使用)

};

一度利用したinodeは、ハッシュ構造でキャッシュしている。
inodeの更新は遅延書き込みで実現されている。 ディスクに未反映のiノードは
Dirtyの印がつけられた上でスーパブロックのdirtyリストにリンクされる。
(kupdateデーモン、sync/umount処理などでフラッシュ)
ディスクに反映済みのinodeは、inode_in_useリストにリンクされる。
利用されていないinodeはフリーリストinode_unusedにリンクされる。
ハッシュとフリーリストの両方に継っているという状態は存在しない。

複数のプロセスから、同時一つのファイルへの更新を排他するため、inodeにロック用のセマフォ(i_sem/i_zombie)がある。

以下の処理でinodeをロック(down)する。
複数ロックする際は、アドレス順でロックを行う。double_down(s1,s2)

    ・ページキャッシュ経由でのファイルへの書き込み
    ・ファイルのトランケート
    ・パス名の検索処理中のディレクトリ
    ・各種ファイル作成/削除/リンク時の親ディレクトリ
    ・ディレクトリ削除時の対象ディレクトリと親ディレクトリ
    ・ファイルrename時の移動元の親ディレクトリと移動先の親ディレクトリ
      ディレクトリの場合はさらにターゲットディレクトリも同時にロック
    ・fsyncシステムコール


ファイルのread処理ではiノードのロックを行わないので、ファイルへのwrite処中でもファイルからのread処理が行える。

※休憩( ・∀・)つ旦~

最新の20件

2006-12-20 2005-11-17 2005-11-09 2005-10-28 2005-10-24 2005-10-13

  • counter: 1050
  • today: 1
  • yesterday: 0
  • online: 1