one*_*ing 22 linux unix-philosophy
我经常在许多网站上遇到“类unix”这个词。
没有标准;这只是它的行为方式。
但是如果我从头开始开发一个内核,是什么让它被认为是“类unix”的?
基本上,使编写的代码像 Unix 的东西是什么?
gol*_*cks 19
没有标准;这只是它的行为方式。
我相信大多数“类 Unix”操作系统确实非常认真地努力遵守POSIX 标准,该标准由 Open Group 监督,Open Group 也控制Single UNIX Specification定义“真正 UNIX”。前者是后者的核心。
因此,事实上,有一个标准定义了类Unix的实用性操作系统。查看维基百科关于 POSIX 的文章末尾的“完全”和“大部分”兼容操作系统列表。
有一些明显的原因,特别是linux可能不被单一 Unix 规范 (SUS) 视为完全兼容或可认证的,但这并不是因为任何给定的 linux 系统都必然与其不兼容。维基百科文章以这种方式总结了规范:
SUSv3 总共约 3700 页,按主题分为四个主要部分:
基本定义 (XBD) - 规范中使用的定义和约定列表以及兼容系统必须提供的 C 头文件列表。总共提供了84个头文件。
Shell 和实用程序 (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 等。
小智 13
要扩展有关 POSIX 的第一个答案,要了解“类 unix”的含义,首先应该尝试了解 UNIX 到底是什么。查看拥有 Unix 商标的Open Group的文档,您将找到有关Single 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 和国际化终端接口。
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,以及内核、文件系统和其他关键操作系统组件是如何设计和实现的.


这就是Maurice J. Bach所著的《UNIX 操作系统的设计》一书成为无价之书的地方,因为此时它已成为历史问题。当然,值得注意的是这与其他发明(如 C 语言)的关系。C 是由 AT&T Bell 开发的,用一种可以像汇编一样快但可以跨不同硬件移植的语言来实现 Unix,并且许多 POSIX 是标准 C 的扩展。
就内核本身而言,您经常会找到这样的概念图来说明 UNIX 内核的传统含义:

以下是巴赫先生讨论 UNIX System V 内核基础的经典著作 (1986) 的一些摘录:
然而,它们 [应用子系统和程序] 都使用最终由内核提供的较低级别的服务,并且它们通过系统调用集来利用这些服务。System V中大约有64个系统调用,其中经常使用的不到32个。它们具有简单的选项,使它们易于使用,但为用户提供了强大的功能。系统调用集和实现它们的内部算法构成了内核的主体[...]
[...] 它的两个主要组件是文件子系统和进程子系统。
文件被组织成文件系统,文件系统被视为逻辑设备;一个物理设备(如磁盘)可以包含多个逻辑设备(文件系统)。每个文件系统都有一个描述文件系统结构和内容的超级块,文件系统中的每个文件都由一个提供文件属性的inode描述。操作文件的系统调用通过 inode 进行。[和缓冲池]
[...] inode 有两个版本:在文件未使用时存储 inode 信息的磁盘副本和记录有关活动文件的信息的 in-core 副本。
UNIX 系统上用户进程的执行分为两个层次:用户和内核。当进程执行系统调用时,进程的执行模式从用户模式变为内核模式:操作系统执行并尝试为用户请求提供服务[...]
[...] UNIX 系统的理念是提供操作系统原语,使用户能够编写小型模块化程序,这些程序可用作构建块来构建更复杂的程序。shell 用户可见的一种原语是重定向 I/O的能力。
[...] 除了为系统调用提供服务外,内核还为用户社区做一般簿记、控制进程调度、管理主内存中进程的存储和保护、处理中断、管理文件和设备以及处理系统错误状况。
如果您对类 Unix 操作系统中内核的不同实现感兴趣,您还可以查看 FreeBSD实现(4.4BSD) 或Mach 内核,或者查看它们功能的比较。
您对 UNIX 的设计了解得越多,就越能理解下图中关于 UNIX 的起源及其历史发生了什么。Bach 先生在他的书中主要谈论 System V,但他也讨论了 BSD:

还有更多的这种比满足眼睛真的。例如,Mac OSX 已通过 UNIX03认证,但您是否看到它连接到任何纯 UNIX(大部分为红色)?

在上面您可以看到 BSD、GNU、Microsoft 和不同的个人如何为这个世界做出贡献。尽管 GNU 和最终的 linux 与 UNIX 没有直接的联系,但您会看到GNU正在努力在开源世界中重新设计来自已关闭的商业 UNIX 的工具和软件。因此,查看GNU 维护的软件可以提供例如初始原型应用程序和库的想法。
许可战争在 UNIX 的发展(有时是停滞)中发挥了作用。您可以立即看到 UNIX 是根据许可证类型排列的 - 封闭与 BSD(BSD 允许使代码封闭源代码...请参阅 OSX)和GPL,它允许 Linux 和 GNU 在 copyleft 世界中相互补充。这是最初由 Linus Torvalds 开发的 linux 内核的经典地图,它也揭示了内核在类 Unix 操作系统中“可以”做什么:

这暗示了这样一种想法,即“内核”设计类型不是 UNIX 标准的原因,也不是定义类 Unix 操作系统的原因。许多类 Unix 操作系统可能具有单体内核或微内核这一事实证明了这一点——单体是 UNIX 的经典设计类型。事实上,即使在纯 UNIX 中,HPUX 也具有单片内核,而 AIX 使用微内核。这场关于设计的争论是关于性能的,与 Unix 血统或身份无关。另一方面,在 UNIX/unix 类操作系统下,有一种传统的概念方法来为软件提供服务、处理文件系统等。
我相信这些考虑将为您问题的操作系统部分添加上下文。
| 归档时间: |
|
| 查看次数: |
5640 次 |
| 最近记录: |