我观看了从70年代开始的Unix的简短介绍(https://www.youtube.com/watch?v=7FjX7r5icV8 3D动画从1:56开始),在结束时,Unix的一般三方架构被显示为3D动画。因为我已经看过了ovarall Linux体系结构的图表,所以我变得很困惑。
图Unix和Linux都共享内核,但Unix则由Shell和Shell由实用程序包装。相反,Linux只是由Userspace包装的,Shell并不包装任何东西,它只是Userspace中的许多进程之一。
Unix和Linux在一个非常基本的层次上有什么不同,它们有什么共同之处?为什么Unix是三方的,Linux是两层的?在Unix中,Shell是一个与Linux完全不同的概念吗?
发布于 2015-02-24 01:03:04
由于这个区别对我来说仍然有点模糊,这可能不是一个非常明确的答案。我只想揭露我的观点,而不是实际的、技术性的事实。
首先,应该注意到Linux是一个类似UNIX的系统。这意味着,虽然大多数概念和实现都是从UNIX中得到启发的,有时是从UNIX中获得的,但这两个系统之间最初并没有共同的代码库。实际上,Linux的灵感主要来自MINIX,另一种类似UNIX的系统,Linus发现该系统的授权过于严格。
为什么Unix是三方的,Linux是两层的?在Unix中,Shell是一个与Linux完全不同的概念吗?
对我来说,两者都是双层的。shell与内核没有任何特权关系,它也不应该。第一个特权层是内核,在那里一切都是可能的。第二个非特权层是userland,在其中运行各种程序,包括shell和标准实用程序(如ls
)。所有这些程序都可以通过UNIX或Linux系统调用集与内核通信(这些列表可能并不详尽)。
在我看来,这是在UNIX或Linux中真正需要提及的唯一层区分。现在,虽然内核没有看到shell和另一个程序之间的区别,但用户与每个程序的交互方式肯定是这样的。如果必须在shell和其他程序之间做出区别,那么这种差异肯定来自用户,但系统仍然不知道。
这在你的视频中比今天的系统用户更引人注目。看看他们的终端:这是令人惊讶的最小,我们可能永远不会想到现在使用这样的东西(尽管,我承认我很乐意)。问题是:那时,shell是系统启动和登录时获得的第一个(也是唯一的)东西。如果你想运行其他程序的话,这就是你必须经历的事情。这可能是不同之处:虽然shell与内核中的任何其他程序没有什么不同,但它是用户访问其他程序的门户,而在70年代,这个网关在“核心UNIX”的质数中更加可见。
当然,这种区别在今天已经不那么重要了,可能是因为两件事:
现在,我不太擅长图表,但我想我会这样说:
我要说的是:
如果删除涉及系统交互的所有元素之外的所有内容,您将得到两样东西:内核和用户程序。有两层,通过系统调用连接。
现在,如果作为用户,您不仅将shell视为另一个程序,而且还将其视为通往其他程序的网关,那么您将添加用户交互和shell到进程的交互。接下来是第三层,但是内核没有什么改变。
发布于 2015-02-23 23:34:59
我会说你的消息来源是假的。
有许多不同的操作系统称为"UNIX",但它们中没有一个是shell,这些“特权”进程构成了其他用户空间实用程序的底层。
shell只是另一个用户空间进程。
https://unix.stackexchange.com/questions/186474
复制相似问题