The UNIX Time-Sharing System

August 21, 2021

デニス・リッチーとケン・トンプソンによるPDP-11/40, /45, /70で採用されたUnixのファイルシステムとコマンドラインインターフェースの解説である。 PDP-11は1971年2月から運用がはじまり、当初はアセンブリ言語で実装されていたが、1973年の夏にCで再実装された。 ファイルシステムは、UNIXの最も重要な役割に位置づけられ、特殊ファイルによるI/Oデバイスの抽象化、外部ディスクのマウント、ファイルの権限、i-nodeをふくむ多くの特徴が今日まで引き継がれている。 2人は、UNIXの設計に影響したものとして、プログラマとして対話的なインターフェースを望んでいたこと、ハードウェアの低い性能ゆえにソフトウェアの設計を洗練させる必要があったこと、ソースコードをUNIX上で編集し簡単にプログラムを変更できたことをあげている。

基本的な設計は今日まで継承されているが、子細はやはり異なる。 たとえば、当時のUNIXでは1つのファイルの権限を7bitの情報で管理していた。 うち6ビットは、ファイルの所有者とそれ以外のユーザに読み込み、書き込み、実行の可否を示す。 残りの1ビットは、ファイルの所有者以外がファイルを実行したときに、実行ユーザを一時的に所有者に変更するかどうかを制御する。

ディレクトリは、格納するファイルの中身ではなくファイルをさすポインタをもつことで、ファイルを管理する。 ポインタは、i-number(index number)という整数値であり、デバイスの特定の位置にあるi-listの要素であるi-nodeを参照する。 i-nodeは、ファイルの所有者は権限を示すビット、サイズ、データのアドレスなどファイルのメタ情報をふくむ。 ファイルの中身をi-nodeにある属性値と分け、i-nodeをi-listで管理することで、ファイルシステムのアルゴリズムを単純化している。 ディスクは512バイトのブロックに分割されており、i-nodeにはデバイスのアドレスを8つ保存できる領域がある。 ファイルが小さければ、ファイルの中身のアドレスをそのi-nodeで管理する。 大きければ、7つに256のアドレスを含む間接ブロックのアドレスを格納する。 それでもなお不足すれば、残りの1つに二段間接ブロックのアドレスを格納する。

論文をこちらからダウンロードできます。