Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
ディレクトリの生成も、基本的にファイルの生成と同様である。vfs sys_mkdir(do_mkdir)関数は、 パス検索(lookup_dentry関数)により親ディレクトリのiノードを求めた後、親ディレクトリのiノードのmkdirオペレーションを呼び出すことにより実現されている。
ext2ファイルシステムの場合は、 ext2_mkdir関数が呼び出される。
ext2_mkdir(親ディレクトリのiノード, 登録するdentry) フリーiノードを一つ確保(ext2_new_inode関数) iノードの初期化 - ファイルサイズ(i_sizeメンバ)を0クリア - 登録ブロック数(i_blocksメンバ)を0クリア - ディレクトリ操作テーブルを登録(ext2_dir_inode_operations, ext2_dir_operations) ディレクトリブロックの確保(ext2_bread関数を呼び出すことで実現) 確保したディレクトリブロックに”.”と”..”のエントリを書き込む. iノードのリンクカウントを2に初期化 ◇ディレクトリブロックの遅延書き込み要求(mark_buffer_dirty関数) ディレクトリブロックが入っているバッファの解放(brelse関数) ◇iノードの遅延書き込み要求(mark_inode_dirty関数) このiノードを親ディレクトリに登録(ext2_add_entry関数) 親ディレクトリのiノードのリンクカウントを1増やす ◇親ディレクトリのiノードの遅延書き込み要求(mark_inode_dirty関数) 新規作成したディレクトリのdentryとiノードをリンク(d_instantiate関数)
問題点, 注意点
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1
[ページ情報]
更新日時: 2008-08-27 14:18:30, 更新者: hiromichi-m
[権限]
表示:無制限, 編集:ログインユーザ, 削除/設定:メンバー