我观看了 70 年代 Unix 的简短介绍(https://www.youtube.com/watch?v=7FjX7r5icV8 3D动画从1:56开始),最后以3D动画的形式展示了Unix的大致三方架构。因为我已经看过 ovaall Linux 架构的图表,所以我感到困惑。
Unix 和 Linux 两个图共享内核,但 Unix 由 Shell 包装,而 Shell 由实用程序包装。相反,Linux 仅由用户空间包装,而 Shell 不包装任何内容,而只是用户空间中的众多进程之一。
Unix 和 Linux 在最基本的层面上有何不同,它们有什么共同点?为什么Unix是三层的而Linux是两层的? Unix 中的 Shell 与 Linux 中的 Shell 是完全不同的概念吗?
答案1
因为这种区别对我来说仍然有点模糊,所以这可能不是一个非常明确的答案。我只是尝试阐述我的观点,而不是实际的技术事实。
首先,需要注意的是,Linux 是一个类 UNIX 系统。这意味着,虽然大多数概念和实现都受到 UNIX 的启发,有时甚至取自 UNIX,但这两个系统之间最初并没有通用的代码库。实际上,Linux 的灵感主要来自 MINIX,这是另一个类 UNIX 系统,Linus Torvalds 发现该系统的许可过于严格。
为什么Unix是三层的而Linux是两层的? Unix 中的 Shell 与 Linux 中的 Shell 是完全不同的概念吗?
对我来说,两者都是两层的。 shell 与内核没有任何特权关系,也不应该有。第一层是特权层,是内核,在这里一切皆有可能。第二层是非特权层,是用户层,其中运行各种程序,包括 shell 和标准实用程序,例如ls
.所有这些程序都可以通过UNIX系统或者Linux系统调用集(这些列表可能并不详尽)。
在我看来,这是在 UNIX 或 Linux 方面真正需要提及的唯一层区别。现在,虽然内核认为 shell 和另一个程序之间没有区别,用户当然会这样做他与每个人互动的方式。如果必须在 shell 和其他程序之间做出区别,那么这种区别肯定来自用户,但系统仍然不知道。
这在您的视频中比对于当今系统的用户来说更加引人注目。看看他们的终端:这是令人惊讶的最小,我们现在可能永远不会想到使用这样的东西(尽管如此,我承认我很想这样做)。事情是这样的:当时,shell 是系统启动并登录时获得的第一个(也是唯一的)东西。这如果你想运行任何其他程序,你必须经历的事情。这大概就是区别所在:虽然 shell 与内核眼中的任何其他程序没有什么不同,但它是用户通往其他程序的门户,并且这个网关在 70 年代“核心 UNIX 的鼎盛时期”更加明显。
当然,现在这种区别已经不那么重要了,可能是因为以下两点:
- 终端仿真。实际上,您可以同时获取多个 shell,并在它们之间进行切换。这意味着你有一些东西前让您可以控制它的外壳。
- 图形界面。您现在可以从 GUI、窗口管理器、桌面环境等启动进程,而无需看到终端。我们甚至还设计了图形程序裹围绕 shell 实例并使它们使用起来更愉快。
现在,我不太擅长图表,但我想我会这样说:
我想说的是:
- 虚线代表用户交互。
- 虚线代表shell 到进程的交互(生成进程、操纵它们之间的 I/O 流,...)。
- 普通线条代表系统交互。
如果删除除涉及的元素之外的所有内容系统交互,你最终会得到两件事:内核, 和用户程序。有两层,通过系统调用连接。
现在,如果作为用户,您不仅将 shell 视为另一个程序,而且将其视为通往其他程序的网关,那么您可以添加用户交互和shell到进程相互作用。现在到了第三层,但内核没有任何变化。
答案2
我想说你的消息来源是假的。
有许多不同的操作系统称为“UNIX”,但它们中没有一个具有这样的“特权”进程,它们构成了其他用户空间实用程序的底层。
shell 只是另一个用户空间进程。