事実上、今日の UNIX 系オペレーティング システムはすべて、マルチユーザー モードとシングルユーザー モードを区別しています。シングル ユーザー モードは、通常、システムが正常に稼働している間は、サービス セットを減らしても実行できない低レベルのシステム メンテナンス (通常はオフラインで行う必要があるファイル システムのメンテナンスなど) を対象としています。
しかし、実際にシングルユーザー モードとマルチユーザー モードを区別するための最初のコードを誰かが書く必要があったことは明らかです。
マルチユーザー モードはシングル ユーザー モードの後に登場したのではないかと思います。これは、マルチ ユーザー モードの方が多くの機能があり、システムを最初にシングル ユーザー モードで起動し、後でマルチ ユーザー モードに移行するのが合理的だからです (少なくとも Linux ではそのように動作します。たとえば、カーネルinit=/bin/bash
に渡すとわかるように、カーネルは「シングル ユーザー」モードで動作し、その後、効果的にinit
マルチ ユーザー モードに切り替わります)。しかし、私の質問は次のとおりです。いつ、どの変種/バージョンで、この 2 つの区別が最初に行われたのでしょうか?
答え1
Unix は当初から、つまり 1971 年にバージョン 1 がリリースされて以来、その区別を行ってきました。
システムはマルチユーザー モード (つまり、利用可能なシリアル インターフェイスにユーザーが接続され、さらに 4 つの tty を追加する準備が整った) で起動していましtty0
たtty5
。
Unix v1 マニュアルセクション 4、tty
ページの説明:
By appropriate console switch settings, it is possible to
cause UNIX to come up as a single—user system with I/O on
this device.
この最初の Unix リリースでは、各シリアル ラインへのログイン プロセスの生成はハードコードされており、init プロセス自体によって実行されていたことに注意してください。使用するモードの選択は起動前に行われ、マルチユーザー モードへの切り替えはスイッチ設定を変更してシングル ユーザー モード シェルを終了することによって行われました。
その後、Unix バージョン 7 (1979) では、ハードウェア スイッチの代わりに、システムは最初にシングル ユーザー モードで起動し、シングル ユーザー シェルが終了するとマルチ ユーザー モードに切り替わりました。
さらに後になって、System III (1981) でこのinittab
ファイルが導入されました。これにより、複数の実行レベルをより適切に定義および構成し、使用する実行レベルを選択できるようになりました。実行レベル 1 はシングルユーザー、実行レベル 2 はマルチユーザーでした。inittab ファイルがない場合、システムはシングルユーザー モードで起動しました。
答え2
元々、init はシングル ユーザー モードでコンソールにシェルを起動し、そのシェルが終了すると、シリアル ポートでログイン (実際は getty) プログラムを起動し、残りのファイル システムをマウントして、その時点で実行するように設定されているデーモンを起動していました。
これらはすべて /etc/inittab のエントリによって制御されていました。
これらはすべて、1970 年代初頭の Unix の PDP-11 バージョンに存在していましたが、それ以前にも存在していたと思います。
もちろん、細かいことは数え切れないほどありますが、要点はそういうことです。
答え3
single user
vs.という用語を使用する最も可能性の高い理由multi user
は、起動直後、UNIX には読み取り専用でマウントされたルート ファイル システムしかなかったことです。
次に実行されたのは、ルート ファイル システム (約 1 MB) をチェックし、読み取り/書き込みで再マウントすることでした。
次に、/usr
ファイルシステムがチェックされ、マウントされました。
マウントされた後にのみユーザーがログインできるため/usr/
、この時点で UNIX はマルチユーザー環境をサポートできるようになりました。