■パス検索 各種ファイルを操作するには、まずパス名をiノードに変換しなければならない。 以下にパス名をiノードに変換する関数の説明を行う。

Slides:



Advertisements
Similar presentations
「 R 入門」 第6章:リストとデータフレーム 6.3 データフレーム 発表日:10月30日 担当者:脇坂恭志郎.
Advertisements

実習1:コマンドシェルの使い方.
■プロセスとfileの関係 プロセスが一つファイルをオープンすると以下のようなデータ構造が作られる。
■ディレクトリエントリキャッシュ linuxではdentryという構造体に、ファイルパス名の情報を格納しメモリ上にキャッシングしている。
ファイルキャッシュを考慮したディスク監視のオフロード
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
Android端末の盗難対策のためのページキャッシュ暗号化
第6回 仮想記憶とページング ページング ページ取り出し方式 ページ置き換え方式 中間テスト(40分)
記 憶 管 理(1) オペレーティングシステム 第9回.
Linux インストール      のための基礎知識 物理実験 I 情報実験第9回 2003/12/12 中神 雄一.
物理実験 I 情報実験第9回 2004/12/10 小西 丈予 2003/12/12 中神 雄一
物理実験 I 情報実験第9回 Modified 2005/12/2 徳永 義哉Original 2003/12/12 中神 雄一
システムプログラミング 第6回、7回 main関数の引数 usageメッセージ システムコールのエラーメッセージ ファイル
Excel による データベース入門 Ver /9.
アルゴリズムとデータ構造 2013年6月18日
アルゴリズムとデータ構造1 2005年7月8日
アルゴリズムとデータ構造 2010年7月5日
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
■デバイスドライバIF - ドライバの登録 ブロックデバイスのドライバの登録は、register_blkdev関数を用いて、ブロックデバイスドライバの 登録テーブルblkdev[ ]に、デバイス名とデバイス操作関数テーブルの登録を行う。 unregister_blkdev関数はその逆に登録を抹消する。
2009/10/9 良いアルゴリズムとは 第2講: 平成21年10月9日 (金) 4限 E252教室 コンピュータアルゴリズム.
C言語 配列 2016年 吉田研究室.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
アルゴリズムとデータ構造 2012年6月14日
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
小型デバイスからのデータアクセス 情報処理系論 第5回.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
ファイルシステムキャッシュを 考慮したIDSオフロード
実習1:コマンドシェルの使い方.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
Linuxカーネルについて 2014/01.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
アルゴリズムとデータ構造 2011年6月14日
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
実際にたたいてAPI APIの初歩からプログラムまで使用方法のAtoZ.
二分探索木によるサーチ.
FreeBSDインストール 2002年4月10日.
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
プログラミング 2 ファイル処理.
Windows PowerShell Cmdlet
関数の定義.
アルゴリズムとデータ構造1 2006年6月16日
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
情報基礎Ⅱ (第11回) 月曜4限 担当:北川 晃.
演習2の解答例 2006年12月22日 海谷 治彦.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
仮想マシンを用いた 既存IDSのオフロード
プログラミング 4 探索と計算量.
オペレーティングシステム (ファイル) 2009年11月9日
オペレーティングシステム2006 ファイル管理 (3) 演習へのヒント他
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
Cプログラミング演習資料.
情報知能学科「アルゴリズムとデータ構造」
実装について 前田俊行.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
第5回 プログラミングⅡ 第5回
オペレーティングシステム (ファイル) 2006年11月16日
オペレーティングシステム (ファイル) 2008年11月17日
Inline 展開のアルゴリズム 長谷川啓
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
Cプログラミング演習資料.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
Presentation transcript:

■パス検索 各種ファイルを操作するには、まずパス名をiノードに変換しなければならない。 以下にパス名をiノードに変換する関数の説明を行う。 vfs path_walk関数(v2.4で関数名がlookup_dentry関数から変更された)はパス名をトークンに分割し、 順番にディレクトリを辿って行く。 パス検索はまずディレクトリエントリキャッシュ上にから見つからないか検索し、そこに見つからない 場合は、物理的なデバイス上に探しに行く。 物理的なデバイス上から読みだしたディレクトリエントリ情報は即座にディレクトリエントリキャッシュに 登録する。 その操作を繰り返し、パス名の最後までたどり着いたところで、その時参照しているdentryの参照数を 1増やして返却する。

大雑把なアルゴリズムは以下の通り。 引数にわたされるnameidataには、dentry情報、マウント情報、各種フラグが設定されている。 path_walk(パス名、検索開始位置のnameidata) nameidataで渡されたdentryを探索起点とする。 for(;;) { パス名から'/'で区切られたトークンを取り出す if(トークンが".") 何もせつcontinue if(トークンが"..") { dentryの親子関係のリストから親ディレクトリのdentryを求める。 必要ならmountポイントを遡る(__follow_up関数) } ディレクトリエントリキャッシュから、トークンに対応する dentryを求める(cached_lookup関数) if(ディレクトリエントリキャッシュになかった) { 物理デバイスからトークンに対応するディレクトリエントリを見つけ、 dentryを作成、キャッシュに登録する(real_lookup関数) マウントポイントなら、マウント先のrootのdentryに変換する(__follow_down関数) シンボリックリンクファイルなら、シンボリックリンク先のdentryに変換(do_follow_link関数) if(パス名が終了) return 最後に求めたdentryをnameidataに登録

ディレクトリエントリキャッシュにヒットしない場合は、 real_lookup(トークン) dir = parent->d_inode; iノードをロック 再度d_lookup関数でdentryが登録されていないかチェック dentryの領域確保(d_alloc関数) ディレクトリファイルからトークン(ファイル名)に対応するiノードを求め、dentryとリンクする。 (各ファイルシステム固有の処理 iノードのlookupオペレーション) iノードのロック解除 return dentry

■パス検索 - その他の主なパス検索処理関数 ■パス検索 - その他の主なパス検索処理関数 cached_lookup() d_lookup()を利用して、ディレクトリエントリキャッシュから 目的のdentryを検索する。 user_path_walk()、user_path_walk_link() ユーザ空間に置かれたパス名をカーネル空間に読み込んだ後、 patch_walk関数を 呼び出す。 (v2.2では、namei(), lnamei() という関数名だった) open_namei() 上記path_walkと異なる点が存在する。 ・createモードで呼ばれた場合、指定されたパスにファイルが 存在しないとき、  そのファイルを作成する。 (各ファイルシステム固有の処理 inode operationのcreate) ・ファイルトランケートモードで呼び出された場合、 対象ファイルのトランケート処理を行う  (do_truncate関数)

■パス検索 - ext2ファイルシステムでのパス名検索 ファイルのパス名検索path_walk関数において、ディレクトリエントリキャッシュにヒットしなかった場合、 各ファイルシステムのパス検索関数を呼び出す。 ディレクトリiノードのlookupオペレーションが呼び出すことにより実現している。 ext2ファイルシステムの場合は、 ext2_lookup関数が呼び出される。 ディレクトリから目的のファイルを見つけだし、そのファイルのiノードをメモリ上に確保する。 ext2_lookup(親ディレクトリのiノード, 検索するファイルのdentry) ファイル名に対応するディレクトリエントリを探す(ext2_find_entry関数) ディレクトリエントリからiノード番号を取り出す ディレクトリ読み込みに利用したバッファの解放(brelse関数) iノード番号に対応するメモリiノードを確保(iget関数) ディレクトリエントリキャッシュに登録(d_add関数) また、ファイルのパス名検索の途中でシンボリックリンクファイルにヒットした場合、 do_follow_link関数を用いて、シンボリックリンク先のファイルのdentryに変換する。 ネスト数が32以上になるとエラー(ELOOP)

do_follow_link関数はシンボリックリンクファイルのiノードの follow_linkオペレーションを呼び出す ことにより機能を実現している。 ext2ファイルシステムの場合は、 ext2_follow_link関数(パス名が短いとき) もしくは page_follow_link(パス名が長いとき)が呼び出される。 また、パス検索中に発生したfollow_linkオペレーション呼び出し回数を数えており、 回数が32以上になるとエラー(ELOOP)としている。 ext2_follow_link(シンボリックリンクファイルのdentry, リンクをたどるときにベース) パス名を取り出す。 vfs_follow_link(ベース, パス名) page_follow_link(シンボリックリンクファイルのdentry, リンクをたどるときにベース) ページキャッシュ経由でパス名の載ったブロックを読み込む 新しいパス名を元にパス検索開始(path_walk関数)