2016-04-22 2 views
0

UNIXファイルシステムがどのようにしてiノードに関して動作するかを理解しようとしています。私が理解するように、ディレクトリは、各サブディレクトリまたはファイルの[name:inode]という形式のエントリを持つ単純なテーブルとして表されます。UNIXファイルシステムがノードを持つ構造体を形成する方法

私が混乱しているところは、これらのディレクトリがどのように構造を形成しているかです。もし私がディレクトリ 'root'に 'file.txt'というファイルを含むサブディレクトリ 'home'を含んでいたら、ルートディレクトリには[home ':(homes associated inode)]というエントリがあると思いますが、 'home'ディレクトリテーブルに移動しますか?すべてのヘルプやガイダンスははるかに高く評価されるだろう

、 ベン

答えて

2

あなたの理解はほとんどが正しいです。ここに役立つかもしれない写真があります。私は、我々が持っている可能性があるルートディレクトリはiノード1であることが知られていると仮定するつもりです:

iノード1:

type: directory 
contents: 
    usr  17 
    etc  49 
    home  57 

のinode 57:

type: directory 
contents: 
    dmr  201 
    scs  857 
    ben  981 

のinode 981:

type: directory 
contents: 
    .bashrc 1045 
    projects 1191 
    file.txt 2043 

iノード2043:

type: file 
contents: 
    This is 
    my text file. 

ここでは、テキストファイルの絶対パス(または完全パス)が/home/ben/file.txtであることを示しました。

(私はまた一つの大きな簡素化を行った。一般的に、ファイルの内容がある iノードに格納されるのではなく、他のディスクブロックでは、これらの他のブロックへのポインタを含むiノードではない。)

+0

ありがとう、これは非常に有用です!あなたは内容がディスクブロックへのポインタを介して格納されていることを言及しています、また、inode番号はディスク上の他のinode位置へのポインタであるか、あるいは他の方法で管理されていますか? – BenJacob

+0

@BenJacobこれはわかりませんが、私はさまざまなファイルシステムの実装方法が違うと思います。通常、iノードとディスクブロックの間には構造化されたマッピングがあると思います。例えば、ディスクブロック100はinode10-19を含み、ディスクブロック200はinode20-29等を含む。ディレクトリinodeのディレクトリエントリはinode番号にマッピングされ、inodeのディスクブロックポインタはディスクブロック番号を指す。 inode番号 'i'をディスクブロックに変換するには'(i/10)* 100'をとり、そのブロックの '(i%10)'番目のinodeを見ます。またはそのようなもの。 –

+0

この設定では、inodeとブロックの数が固定されていることを前提にしています。ディレクトリを作成すると、空のinodeに新しい情報が埋め込まれます。 – BenJacob

関連する問題