
inodeポインタ構造は、 Unix ファイル システム(UFS)内のファイルのinodeで採用されている構造で、ファイルのデータ ブロックのアドレスを一覧表示します。また、Linux ユーザーに人気のext3ファイル システムなど、多くの関連ファイル システムでも採用されています。
構造
過去には、この構造は約12個のポインタで構成されていたが、最近のファイルシステムのほとんどは15個のポインタを使用している。これらのポインタは、(inodeに15個のポインタがあると仮定して)次のように構成されている。[1]
- ファイルデータのブロックを直接指す12個の直接ポインタ
- 1 つの単一間接ポインタ(直接ポインタのブロックを指す)
- 1 つの二重間接ポインタ(単一間接ポインタのブロックを指す)
- 1 つの三重間接ポインタ(二重間接ポインタのブロックを指す)
間接レベルは、実際のファイル データに到達する前にたどる必要があるポインターの数を示します。
主な特徴
固定論理ブロックサイズ
この構造は、この記事に添付されている図に部分的に示されています。この構造により、inode は、固定論理ブロック サイズを持つファイル システム内の非常に大きなファイルを記述できます。このメカニズムの中心となるのは、アドレスのブロック (間接ブロックとも呼ばれる) が必要に応じてのみ割り当てられることです。たとえば、12 ブロックのファイルは、そのブロックが使用可能な直接ポインターの数に収まるため、inode のみを使用して記述されます。ただし、13 ブロックのファイルには、13 番目のアドレスを格納するための間接ブロックが必要です。
データの場所の容易さ
inode ポインタ構造により、ファイルを不連続なブロックに簡単に割り当てることができるだけでなく、ファイル内の特定の場所にあるデータも簡単に見つけることができます。これは、論理ブロック サイズが固定されているため可能です。たとえば、各ブロックが 8 KB の場合、112 KB から 120 KB のファイル データは、最初の間接ブロックの 3 番目のポインタによってポイントされます (inode ポインタ構造に 12 個の直接ポインタがあると仮定)。
間接ブロック
数が固定で、ファイル システムの特別な部分に割り当てられる i ノードとは異なり、間接ブロックは任意の数にすることができ、データ ブロックと同じファイル システムの部分に割り当てられます。間接ブロック内のポインタの数は、ブロック サイズとブロック ポインタのサイズによって異なります。例: ブロック サイズが 512 バイトで、ブロック ポインタが 4 バイトの場合、各間接ブロックは 128 (512 / 4) 個のポインタで構成できます。
参考文献
- ^ https://inst.eecs.berkeley.edu/~cs162/sp20/static/sections/section9-sol.pdf
- 大規模ファイル システム向けの Ext3、LWN.net、2006 年 6 月 12 日。
- Marshall Kirk McKusick、William N. Joy、Samuel J Leffler、Robert S. Fabry (1984 年 2 月 18 日)。「UNIX 用の高速ファイル システム」(PDF)。Computer Systems Research Group。
