是什么使操作系统“像Unix”?


Answers:


15

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

我相信大多数“类unix”操作系统确实会非常努力地遵守POSIX标准,该标准由Open Group监督,该组织还控制定义“真正UNIX” 的Single UNIX规范。前者是后者的核心。

因此,实际上,存在一个定义类Unix操作系统实用性的标准。在POSIX上的Wikipedia文章结尾处,查看“完全”和“主要”兼容的操作系统列表。

有一些明显的原因,特别是linux可能不被Single Unix Specification(SUS)认为是完全兼容或可验证的,但这并不是因为任何给定的linux系统不一定与它不兼容。维基百科文章以这种方式总结了规范:

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

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

Shell and Utilities(XCU)-sh的实用程序列表和外壳说明。共指定160个实用程序。

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

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

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

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

测试套件随该标准一起提供。它称为PCTS或POSIX认证测试套件。

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

显然,这显然是指很多Linux内核中没有的用户区组件(例如shell)。因此,linux.org等无法实现。等 可以单独通过内核认证-从这个意义上说,它根本不是操作系统。他们当然可以尝试使用内核来认证某些特定的系统,但是根据一般的分配方案,这将毫无意义:内核和维护内核的人员独立于维护用户土地核心(GNU)的人员他们独立于维护实际组装的OS发行版的人员(Debian,Fedora等)。

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

为了符合Single UNIX Specification版本1(UNIX 95)和2(UNIX 98),需要STREAMS,但是由于BSD和Linux开发人员拒绝提供STREAMS,[POSIX]被标记为POSIX可选符合Austin Group在版本3(UNIX 03)中的要求。

一个有趣的调解,凸显了SUS和The Open Group!= linux,!= BSD等的意义。


2
请注意,获得认证与合规是不同的。例如,由于成本和开发速度的原因,Linux基金会不希望获得每个内核版本的认证。但这并不意味着它(内核)没有完全或大部分不符合要求。
奋斗

2
@strugee POSIX标准不适用于或关心内核。标准化的是命令(shell,ls,cat等)和API(libc提供的线程)。使基于Linux的发行版Unix的主要是GNU组件(命令和glibc)。内核不在认证/合规性范围内。
jlliagre

1
不是反驳而是澄清(我在对illuminÉ的回答中重复我的观点):标准是“什么”,内核是“如何”。我只阅读了一点点的标准,但我认为它们根本不是指“内核”(它只是“系统”)。因此,WRT认证和合规性:内核/ OS是“做什么”,而不是“如何”做到。
goldilocks

3
@strugee单个Unix规范适用于用户界面。当然最终会涉及到内核,但是我的评论是关于您关于Linux Foundation获得内核认证的声明。无法对内核进行认证,因为内核缺少认证过程与之交互的所有组件。可以证明(或至少尝试使其尽可能符合要求)的是操作系统,即Linux社区中通常称为发行版的操作系统。
jlliagre

2
@strugee但是,这可能不是快速过渡的重要原因,而是没有承诺确保不添加任何不兼容的更改。例如,Solaris 10兼容,请确保此兼容性,并且自从Unix03认证以来,已有十几个更新。此外,Gnu / Linux组合尝试尽可能地做到合规,但要做到更多。它(几乎)从未尝试过通过认证,因为它既昂贵又不符合要求,因为(故意)缺少某些要求且某些扩展名不兼容
jlliagre 2013年

12

为了扩展有关POSIX的第一个答案,要理解“类unix”的含义,那么首先应该尝试理解UNIX到底是什么。查看拥有Unix商标的Open Group的文档,您将找到有关Single UNIX规范演变的详细信息 -这是UNIX03

UNIX 03产品标准是符合Single 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(我的重点):

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

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

因此,我们当然可以看到对AT&T贝尔实验室的引用,而C语言是UNIX的核心:C语言,模块化基础工具和Shell,以及内核,文件系统和其他关键OS组件的设计和实现方式。

在此处输入图片说明

在此处输入图片说明

那是Maurice J. Bach 撰写的《 UNIX操作系统设计》一书宝贵内容,因为这是历史问题。当然,值得注意的是这与确实像C语言的其他发明如何相关。C由AT&T Bell开发,用于以一种与汇编语言一样快但可跨不同硬件移植的语言来实现Unix,并且许多POSIX是对标准C的扩展。

就内核本身而言,您经常会发现这样的概念图,以说明UNIX内核传统上的含义:

在此处输入图片说明

以下是巴赫先生的经典著作(1986)的摘录,这些著作讨论了UNIX System V内核的基础:

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

它的两个主要组件是文件子系统和过程子系统。

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

[...]索引节点有两种版本:磁盘副本,用于在文件不使用时存储索引节点信息;内核副本,用于记录有关活动文件的信息。

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

UNIX系统的理念是提供操作系统原语,使用户能够编写小的模块化程序,这些程序可用作构建更复杂程序的基础。Shell用户可以看到的一种此类原语是重定向I / O的功能

[...]除了为系统调用提供服务外,内核还为用户社区进行常规记账,控制进程调度,管理进程在主内存中的存储和保护,处理中断,管理文件和设备并照顾系统错误条件。

如果您对类似Unix的操作系统中内核的不同实现感兴趣,还可以查看FreeBSD 实现(4.4BSD)或Mach内核,或者对它们的功能进行比较

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

在此处输入图片说明

除了真正的吸引眼球之外,还有更多的东西。例如,Mac OSX已获得UNIX03 认证,但是您看到它连接到任何纯UNIX(大多数为红色)吗?

在此处输入图片说明

在上方,您可以看到BSD,GNU,Microsoft和各种各样的个人如何为这个世界做出贡献。即使GNU以及最终的linux与UNIX都没有直接的渊源,但您会看到GNU致力于在开放源代码世界中对已经封闭的商业UNIX中的工具和软件进行重新设计。因此,查看GNU维护的软件可以为最初的原型应用程序和库提供一个思路。

许可战争在UNIX的发展(有时甚至是停滞)中发挥了作用。您可以立即看到UNIX根据许可证类型进行了排列-封闭vs. BSD(BSD允许将代码封闭源代码...参见OSX)和GPL,后者允许Linux和GNU在copyleft世界中进行补充。这是Linus Torvalds最初开发的linux内核的经典图,它还揭示了在类似Unix的操作系统中内核可以“做什么”:

在此处输入图片说明

这暗示了“ 内核 ”设计类型不是使UNIX标准成为标准,也不是定义类似Unix的OS的思想。事实证明,许多类似Unix的OS可能具有整体内核或微内核-整体是UNIX的经典设计类型。实际上,即使在纯UNIX中,HPUX也具有单片内核,而AIX使用微内核。这种辩论有关设计是性能,而不是与Unix的血统或身份。另一方面,在UNIX / unix操作系统下,有一种传统的概念方法可以为软件提供服务,处理文件系统等。

我认为这些考虑将为您的问题的OS部分增加上下文。


3
+1这里的几点好处:1)关于C和Unix之间的关系(要补充:C由AT&T Bell开发,用于实现Unix的语言,该语言可以像汇编语言一样快,但是可以跨不同的硬件移植,并且具有很多POSIX是对标准C的扩展)。2)内核设计独立于标准。标准是“什么”,内核是“如何”。
13年

1
@goldilocks谢谢,我添加了您对C逐字记录的评论。我试图弄清楚内核的考虑与标准无关。这个问题假定类Unix内核有一些特定的东西,但是还没有。另一方面,从历史上看,第一个Unix内核可能采用了这种方式。我的理解是有限的,但我认为内核已经发生了很大变化,因为自70年代以来硬件发生了很大变化。很明显,内核没有定义类似Unix / unix的内核,以为linux内核明确定义了GNU / Linux或Linux。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.