サブディレクトリのファイルディレクトリエントリはどこに保存されますか?

サブディレクトリのファイルディレクトリエントリはどこに保存されますか?

この質問が他の場所でも正確に重複する場合は、ご容赦ください。ただし、これまでSEや他のサイトで見つけたすべての回答は通常、この質問に具体的には答えません。私は大学でオペレーティングシステムのコースを受講しているので、ファイルシステム全体に初めて触れています。

私が知る限り、ほとんどのファイルシステムにはファイルディレクトリエントリを含むルートディレクトリがあります。これらのエントリにはファイル名から inode 番号へのマッピングが含まれ、長さが可変です。

~によるとこの回答、項目は次のような線形で保存されているようです。

私はinodeが何であるか、目次(TOC)エントリを使用して物理ディスク上のファイルのデータブロック番号にどのようにマッピングされるかを完全に理解できます。


しかし、私の質問は次のとおりです。サブディレクトリファイルディレクトリエントリはどのように、どこに保存されますか?

私はそれらがルートディレクトリと同じ場所に保存されていますが、オフセットに保存されていると思います。ただし、inodeでこのオフセットを取得する方法を想像することはできません。

そのため、サブディレクトリのディレクトリエントリが実際にはルートディレクトリのエントリと一緒に保存されるのではなく、ディスクのデータ領域に保存されるような気がします。

その場合、あるディレクトリから別のディレクトリに移動するには、任意の場所でディスクを読み取る必要があります。

それにもかかわらず、サブディレクトリ内のファイルディレクトリエントリの場所に関する私の誤解を簡単に説明したいと思います。

助けてくれてありがとう。

ベストアンサー1

ディレクトリは通常ファイルとして実装されます。これにはinodeとデータ領域がありますが、もちろん通常は特別なシステムコールを介して(少なくとも書き込みのために)アクセスされます。一部のシステムでは許可されています。読む一般的なread(2)システムコールを含むディレクトリ(Linuxにはシステムコールがなく、FreeBSDは前回確認したときに行われました)。ディレクトリファイルのデータ領域にはディレクトリエントリが含まれます。のルートディレクトリにはext4、inode番号2に固定されたinodeもあります(試してみてくださいls -lid /)。

ディレクトリをファイルのように動作させると、ファイルにブロックを割り当てる機能が常に存在する必要があるため、ディレクトリエントリなどのためのスペースを割り当てるのが簡単です。また、必要に応じて同じデータブロックを使用するため、ファイルデータとディレクトリリストの間にスペースを事前に割り当てる必要はありません。

ディレクトリエントリが格納される内部構造は、ファイルシステムごとに異なり、たとえば、ext2およびext4。最新のシステムでは、線形リストの代わりにツリーを使用してルックアップを高速化します。バラよりここ。高貴な人でもFATファイルシステムディレクトリはファイルとして保存されますが、少なくとも以前のFATではルートディレクトリが特別です。 (もちろん、FATのディレクトリエントリ構造はUnixファイルシステムの構造とは異なります。)

その場合、あるディレクトリから別のディレクトリに移動するには、任意の場所でディスクを読み取る必要があります。

はい。ただし、頻繁にアクセスされるディレクトリエントリ(または基本データブロック)は、最新のオペレーティングシステムでキャッシュされる可能性が高いです。

すべてのディレクトリの内容を一元的に保存するには、大規模な領域を事前に割り当てる必要があり、ディレクトリデータ領域内でディスクのルックアップが必要です。

おすすめ記事