实际上,如果不是实际上的话,当今每个类 UNIX 操作系统都区分了多用户模式和单用户模式。单用户模式通常用于低级别的系统维护,即使在减少服务集的情况下,也无法在系统正常启动和运行时执行这种维护(通常需要离线完成的文件系统维护)。
然而,显然必须有人编写第一个代码来真正区分单用户模式和多用户模式。
我怀疑多用户模式是在单用户模式之后出现的,仅仅是因为多用户模式做了更多的事情,并且最初以单用户模式启动系统然后才过渡到多用户模式是有意义的(即至少Linux是如何做到这一点的;如果你将eg传递给它,那么内核就会在“单用户”模式下工作init=/bin/bash
,然后有效地工作init
切换到多用户模式),但我的问题是:两者之间何时以及哪个变体/版本首次进行了区分?
答案1
Unix 从一开始,即从 1971 年发布版本 1 起,就做出了这种区分。
系统正在启动到多用户模式(即用户连接到可用的串行接口,tty0
但tty5
已准备好添加四个以上的 tty)。
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 进程本身完成。在启动之前选择要使用的模式,并通过修改开关设置并退出单用户模式 shell 来切换到多用户模式。
后来,在 Unix Version 7 (1979) 中,系统首先以单用户模式启动,而不是硬件开关,当单用户 shell 退出时,它会切换到多用户模式。
甚至后来,System III (1981) 引入了该inittab
文件。有了它,就可以更好地定义和配置多个运行级别并选择要使用的级别。运行级别 1 是单用户,运行级别 2 是多用户。如果 inittab 文件丢失,系统将以单用户模式启动。
答案2
最初,init 会在单用户模式下在控制台上启动一个 shell,当该 shell 退出时,它将在串行端口上启动登录(实际上是 getty)程序,同时挂载其余文件系统并启动然后配置运行的任何守护进程。
这全部由 /etc/inittab 中的条目控制。
这一切都出现在 20 世纪 70 年代初期的 PDP-11 版本的 Unix 上,我相信在那之前。
当然,还有无穷无尽的细节,但这就是要点。
答案3
使用术语single user
vs.最可能的原因multi user
是,在启动后,UNIX 仅具有只读安装的根文件系统。
接下来要做的就是检查根文件系统(大约 1MB)并重新挂载它以读/写。
然后/usr
检查并安装文件系统。
由于用户只有在/usr/
挂载后才能登录,这就是 UNIX 能够支持多用户环境的时刻。