この質問は次のように拡張されます。Unixファイルシステムでは、ディレクトリはどのように実装されますか?
私の目標は、基本的なファイルシステムを実装することです。 inode番号と名前を読み取った後にファイル名がわかるので、ディレクトリの内容を一覧表示できますが、項目の種類は決定できません。別のディレクトリかファイルか。ディレクトリに1000個のエントリがある場合は、ファイルかディレクトリであるかを確認するために1000個のinodeを読むのは愚かなようです。
ここで何かを見逃しているのでしょうか、それともこれが唯一の方法ですか?
答え1
オリジナル:君が決める事だ
「UNIXファイルシステム」がUFSを参照する場合、親ディレクトリinodeはファイルタイプをキャッシュせず、ファイルとそのinodeのみを含みます。源泉:UFSファイルシステム(PDF、15.2.2章を参照)
すべてのファイルシステムがこのようなわけではなく、デザインの選択です。ファイルシステムの場合は、次のようになります。あなたのデザインの選択。
私はこの選択の愚かさに同意しない。システムがディレクトリのファイル形式を何回確認するかを考えてみましょう。ls -l
inodeで情報をキャッシュするために必要な追加スペースとコマンド頻度のバランスをとる必要があります。
ファイルシステムがクラスタ化(例:glusterfs)またはネットワーク化された(たとえば、nfs)ファイルシステムの場合、すべてのinodeにアクセスするときに遅延が発生する可能性があるため、これは良い考えです。ローカルストアではこれが問題にならない可能性があります。
また、ファイルシステムは何を達成しようとしていますか?何千ものファイルを含むディレクトリ用に効率的に設計されている場合は、ファイル形式のキャッシュを検討する価値があります。簡潔で最小限のスペースを持つように設計されている場合、キャッシュを回避する方法はありません。
ext2、3、4、ファイル形式の機能に関する注意事項
あなたのアイデアを実装することが可能ですext2-4
。ディレクトリエントリにファイル形式をキャッシュできます。この機能はfiletype
ファイルシステムが作成されたときにのみ機能します。この機能を使うとext4 はディレクトリエントリに異なる構造を使用します。ファイルタイプのキャッシュを持つことができます。これext2とext3でも動作します。。