JFS ディレクトリーの処理
ディレクトリーは、ファイルシステム、リンク・ファイル、および i ノード・サブディレクトリー名に階層構造を提供します。 ネストするディレクトリーの深さに制限はありません。 ディレクトリー用のディスク・スペースは、 4096 バイト・ブロック単位で割り当てられますが、 オペレーティング・システムはディレクトリー・スペースを 512 バイトのレコード単位で割り当てます。
プロセスはディレクトリーを通常のファイルとして読み取ることができます。 ただし、ディレクトリーを作成できるのはカーネルです。 このため、ディレクトリーは、 ディレクトリーに固有のサブルーチンのセットによって作成および管理されます。
JFS ディレクトリー構造
ディレクトリーには一連のディレクトリー・エントリーが入っています。 各ディレクトリー・エントリーには、 3 つの固定長フィールド (ファイルの i ノードに関連する索引番号、ファイル名の長さ、 エントリーのバイト数) およびファイル名を示す 1 つの可変長フィールドがあります。 このファイル名フィールドは null 終了フィールドで、 4 バイトまで埋め込まれます。 ファイル名の長さは、最高 255 バイトです。
ディレクトリー・エントリーは、ファイル名に柔軟性を与えるために可変長です。 ただし、すべてのディレクトリー・スペースは常に割り当てられます。
ディレクトリー・エントリーは、 ディレクトリーの 512 バイトの複数のセクションにまたがることはできません。 ディレクトリーに 513 バイト以上が必要であれば、 もう 1 つの 512 バイトのレコードが元のレコードに付加されます。 割り当てられたデータ・ブロック内のすべての 512 バイト・レコードが使用されている場合、 追加のデータ・ブロック (4096 バイト) が割り当てられます。
ファイルを除去した場合、そのファイルがディレクトリー構造体内で占有していたスペースは、 先行するディレクトリー・エントリーに追加されます。 除去されたディレクトリーに関する情報は、 空になったスペースに新規エントリーが収まるまで存続します。
すべてのディレクトリーには、. (ドット) エントリーと .. (ドット・ドット) エントリーが含まれます。 . (ドット) ディレクトリー・エントリーは、そのディレクトリー自身の i ノードを指します。 .. (ドット・ドット) ディレクトリー・エントリーは、親ディレクトリーの i ノードを指します。mkfs プログラムはファイル・システムを初期化して、新しいルート・ディレクトリーの . (ドット) エントリーと .. (ドット・ドット) エントリーがファイル・システムのルート i ノードを指すようにします。
ディレクトリーには、次のアクセス・モードがあります。
モード | 説明 |
---|---|
read | プロセスが、ディレクトリー・エントリーを読めるようにします。 |
write | プロセスが creat、mknod、link、および unlink サブルーチンを使用して、新しいディレクトリー・エントリーの作成または古いディレクトリー・エントリーの除去を行えるようにします。 |
execute | プロセスが、ディレクトリーを現在の作業ディレクトリーとして使用するか、または ファイル・ツリー内の当該ディレクトリーの下を検索できるようにします。 |
JFS ディレクトリーの処理 (プログラミング)
- closedir
- ディレクトリー・ストリームをクローズし、DirectoryPointer パラメーターに関連した構造を解放します。
- mkdir
- ディレクトリーを作成します。
- opendir
- DirectoryName パラメーターによって指定されたディレクトリーをオープンし、そのディレクトリーにディレクトリー・ストリームを関連付けます。
- readdir
- 次のディレクトリー・エントリーを指すポインターを戻します。
- rewinddir
- 指定されたディレクトリー・ストリームの位置をディレクトリーの先頭にリセットします。
- rmdir
- ディレクトリーを除去します。
- seekdir
- ディレクトリー・ストリーム上で次の readdir サブルーチン操作の位置を設定します。
- telldir
- 指定されたディレクトリー・ストリームに関連した現在の位置を戻します。
プロセスの現行ディレクトリーの変更
システムをブートすると、最初のプロセスは、現在のディレクトリーとして、 ルート・ファイルシステムのルート・ディレクトリーを使用します。 fork サブルーチンで作成された新規プロセスは、親プロセスで使用される現行ディレクトリーを継承します。 chdir サブルーチンはプロセスの現行ディレクトリーを変更します。
chdir サブルーチンは、 パス名を構文解析して、ターゲット・ファイルがディレクトリーであること、 およびプロセスのオーナーが当該ディレクトリーに対する許可を持っていることを確認します。 chdir サブルーチンの実行後、プロセスは新しい現在のディレクトリーを使用して、 / (スラッシュ) で始まらないすべてのパス名を検索します。
プロセスのルート・ディレクトリーの変更
chroot サブルーチンを使用すると、プロセス Path パラメーターによって指定されたディレクトリーを実効ルート・ディレクトリーにすることができます。 コール側のプロセスの子プロセスは、chroot サブルーチンが示すディレクトリーをファイルシステムの論理ルート・ディレクトリーと見なします。
プロセスは、/ (スラッシュ) で始まるすべてのパス名に関して、グローバルなファイルシステムのルート・ディレクトリーを使用します。 / (スラッシュ) で始まるすべてのパス名の検索は、この新規ルート・ディレクトリーから開始されます。
JFS ディレクトリーを制御するサブルーチン
ディレクトリー・ファイルに固有な性質のために、 ディレクトリーはサブルーチンの特殊なセットによって制御します。 ディレクトリーを制御するために、 以下のサブルーチンが用意されています。