是什么让操作系统成为“类 Unix”操作系统?

是什么让操作系统成为“类 Unix”操作系统?

我经常在许多网站上看到“unix-like”这个术语。

没有标准;这只是它的行为方式。

但如果我从头开始开发一个内核,什么才能使它被认为是“类 UNIX”的呢?

基本上,是什么使得编写的代码像 Unix 一样?

答案1

没有标准;这只是它的行为方式。

我相信大多数“类 UNIX”操作系统确实做出了非常认真的努力来遵守POSIX标准,由 Open Group 监督,该组织还控制着单一 UNIX 规范它定义了“真正的UNIX”。前者是后者的核心。

事实上,有一个标准定义了实用性类unix操作系统。请查看有关 POSIX 的维基百科文章末尾的“完全”和“大部分”兼容操作系统列表。

有一些明显的原因操作系统特别是,可能不会被认为完全符合单一 Unix 规范 (SUS) 或可通过单一 Unix 规范 (SUS) 进行认证,但这并不是因为任何给定的 Linux 系统都必然与其不兼容。维基百科文章这样总结了规范:

SUSv3 总共约 3700 页,按主题分为四个主要部分:

基本定义 (XBD)- 规范中使用的定义和约定列表以及兼容系统必须提供的 C 头文件列表。总共提供了84个头文件。

壳牌和公用事业公司 (XCU)- 实用程序列表和 shell、sh 的描述。总共指定了 160 个实用程序。

系统接口 (XSH)- 包含作为系统调用或库函数实现的各种函数的规范。总共指定了1123个系统接口。

基本原理(XRAT)- 标准背后的解释。

标准用户命令行和脚本接口是 POSIX shell,它是基于 Korn Shell 早期版本的 Bourne Shell 的扩展。

其他用户级程序、服务和实用程序包括 awk、echo、ed、vi 以及数百个其他程序、服务和实用程序。所需的程序级服务包括基本 I/O(文件、终端和网络)服务。

该标准附带一个测试套件。它称为 PCTS 或 POSIX 认证测试套件。

此外,SUS还包括CURSES(XCURSES)规范,它指定了372个函数和3个头文件。总而言之,SUSv3 指定了 1742 个接口。

这显然特指许多不属于 Linux 内核的用户层组件(例如 shell)。所以 linux.org 等没有办法。等人。可以单独对内核进行认证——从这个意义上说,它根本不是一个操作系统。当然,他们可以尝试使用内核来验证某些特定的系统,但这对于一般的分发方案来说是没有意义的:内核和维护它的人独立于维护用户层核心(GNU)的人他们独立于维护实际组装的操作系统发行版(Debian、Fedora 等)的人员。

我认为 Debian 或 Fedora 本身可以参与认证过程(因此,例如,RedHat Enterprise 可以成为“经过认证的 unix”),但这引出了一个问题,即这实际上是可取的。我认为 SUS 系统的主要原因是运行为此编写的(商业规模、非消费者)软件,这根本不是 Linux 的利基市场——这样做的人将为每个操作系统的许可证支付数千美元,包括很多支持等,因为他们还为每个许可证支付数万或数十万美元来购买他们想要在系统上运行的任何附加软件。另一方面,Linux 和其他异常值所追求的设计目标超出了商业目的的简单合规性,并且有各种这样的例子,例如(来自http://en.wikipedia.org/wiki/STREAMS):

STREAMS 是符合单一 UNIX 规范版本 1 (UNIX 95) 和 2 (UNIX 98) 所必需的,但由于 BSD 和 Linux 开发人员拒绝提供 STREAMS,[需要引用] 被标记为 POSIX 的可选Austin Group 在版本 3 (UNIX 03) 中的合规性。

一个有趣的调整,强调了 SUS 和 The Open Group != linux、!= BSD 等这一点。

答案2

为了扩展关于 POSIX 的第一个答案,为了理解“类 UNIX”的含义,首先应该尝试理解到底什么是 UNIX。查看来自的文档公开组,拥有 Unix 商标,你会发现细节有关单一 UNIX 规范的演变-这里是UNIX03:

UNIX 03 产品标准是符合单一 UNIX 规范第 3 版的系统的标志。它是 UNIX 98 产品标准的显着增强版本。强制性增强功能包括与 ISO/IEC 9989:1999 C 编程语言、IEEE Std 1003.1-2001 和 ISO/IEC 9945:2002 保持一致。本产品标准包括以下强制性产品标准:国际化系统调用和库扩展 V3、命令和实用程序 V4、C 语言 V2 和国际化终端接口。

UNIX98:

UNIX 98 产品标准是 UNIX 95 产品标准的显著增强版本。强制性增强包括 (1) 线程接口、(2) 多字节支持扩展 (MSE)、(3) 大文件支持、(4) 动态链接、(5) 更改以消除硬件数据长度依赖性或限制,以及 (6) 2000 年更改。此外,还包括以下可选增强:软件管理工具和一组用于实时支持的 API。该产品标准包括以下强制性产品标准:国际化系统调用和库扩展 V2、命令和实用程序 V3、C 语言、传输服务 (XTI) V2、套接字 V2 和国际化终端接口。此外,它还可能符合软件管理产品标准。

UNIX95(我强调):

该产品标准定义了一个统一的平台,用于支持最初为派生自该操作系统的一类操作系统开发的各种应用程序。最初由 AT&T 开发的 UNIX 操作系统代码和/或接口,除了基本产品标准提供的设施之外。它的范围比 Base 更广。本产品标准包括以下产品标准:国际化系统调用和扩展库、命令和实用程序 V2、C 语言、传输服务 (XTI)、套接字和国际化终端接口。

服务器版本在某些情况下,该标准添加了 Internet 服务器和 IPv6。

所以我们当然看到了对AT&T贝尔实验室C 语言是 UNIX 的核心:C 语言、模块化基础工具、shell 以及内核、文件系统和其他关键操作系统组件的设计和实现方式。

enter image description here

enter image description here

这就是书的地方UNIX操作系统的设计莫里斯·J·巴赫(Maurice J. Bach)的著作成为非常有价值的读物,因为它在这一点上是历史问题。当然值得注意的是这与其他发明确实像C语言。 C 是由 AT&T Bell 开发的,用一种语言来实现 Unix,这种语言可以像汇编一样快,但可以跨不同的硬件移植,并且很多 POSIX 是标准 C 的扩展。

就内核本身而言,您经常会找到这样一个概念图来说明 UNIX 内核传统上的含义:

enter image description here

以下是 Bach 先生的经典书籍(1986 年)的一些摘录,其中讨论了 UNIX System V 内核的基础:

然而,它们[应用程序子系统和程序]都使用最终由内核提供的较低级别的服务,并且它们通过一组系统调用来利用这些服务。 System V 中大约有 64 个系统调用,其中经常使用的不到 32 个。它们具有简单的选项,使它们易于使用,但为用户提供了强大的功能。系统调用集和实现它们的内部算法构成了内核的主体[...]

[...] 它的两个主要组件是文件子系统和进程子系统。

文件被组织成文件系统,文件系统被视为逻辑设备;一个物理设备(例如磁盘)可以包含多个逻辑设备(文件系统)。每个文件系统都有一个超级块来描述文件系统的结构和内容,文件系统中的每个文件都由一个索引节点来描述,索引节点给出了文件的属性。操作文件的系统调用是通过 inode 进行的。 [和缓冲池]

[...] inode 有两个版本:在文件未使用时存储 inode 信息的磁盘副本和记录有关活动文件的信息的核心副本。

UNIX系统上用户进程的执行分为两个级别:用户级和内核级。当进程执行系统调用时,进程的执行模式从用户模式内核模式:操作系统执行并尝试服务用户请求[...]

UNIX 系统的理念是提供操作系统原语,使用户能够编写小型的模块化程序,这些程序可以用作构建更复杂程序的构建块。 shell 用户可见的一种这样的原语是能够重定向输入/输出

[...]除了为系统调用提供服务外,内核还为用户群体进行一般簿记、控制进程调度、管理主内存中进程的存储和保护、处理中断、管理文件和设备以及处理系统错误状况。

如果您对类 UNIX 操作系统中内核的不同实现感兴趣,您还可以查看 FreeBSD执行(4.4BSD) 或在马赫内核或者看看这个比较他们的特点。

您对 UNIX 的设计了解得越多,您就越能理解下图中发生的有关 UNIX 及其起源的事情历史。巴赫先生在他的书中主要谈论 System V,但他也讨论了 BSD:

enter image description here

这比表面上看到的更重要真的。例如,Mac OSX 是 UNIX03认证但是您是否看到它与任何纯 UNIX 相关(大部分为红色)?

enter image description here

在上面您可以看到 BSD、GNU、Microsoft 和不同的个人如何为这个宇宙做出贡献。尽管 GNU 和最终的 linux 与 UNIX 没有直接的血统,但你会看到GNU是在开源世界中重新设计已经封闭的商业 UNIX 中的工具和软件的努力。所以看着GNU 维护的软件例如在最初的原型应用程序和库中给出了一个想法。

许可战争在 UNIX 的发展(有时甚至是停滞)中发挥了重要作用。您可以立即看到 UNIX 是根据许可证类型排列的 - 封闭式与 BSD(BSD 允许为了使代码闭源......参见 OSX)和通用公共许可证这使得 Linux 和 GNU 在 Copyleft 世界中得以互补。这是 Linus Torvalds 最初开发的 Linux 内核的经典图,它也揭示了类 Unix 操作系统中的内核“可以”是什么:

enter image description here

这暗示了这样一个想法:“核心“设计类型并不是 UNIX 标准或定义类 UNIX 操作系统的因素。许多类 UNIX 操作系统可能具有单片内核或微内核这一事实证明了这一点——单片是 UNIX 的经典设计类型。事实上,即使在纯 UNIX 中,HPUX 也具有整体内核,而 AIX 使用微内核。辩论设计是关于性能的,与 Unix 血统或身份无关。另一方面,在 UNIX/类 UNIX 操作系统下,有一种传统的概念方法来为软件提供服务、处理文件系统等。

我相信这样的考虑将为您的问题的操作系统部分添加上下文。

相关内容