2

POSIX 声明操作系统需要提供以符合 POSIX的功能单元之一是POSIX_C_LANG_SUPPORT。基本上这是包含更多内容的整个 C 标准库。

我的问题很简单:兼容 POSIX 的操作系统的开发人员通常只需下载 C 标准库的开源版本(例如 glib 或 uClibc)并对其进行调整以适应 POSIX,或者他们从头开始实现一切?重写 C 库而不是仅仅选择一个非常知名的实现并根据我的需要进行调整是否有任何优势?

4

2 回答 2

1

实际上,它是以相反的方式完成的。

我们有不同的 Unix 版本:两个主要系列:SystemV 和 BSD,不同的制造商,因此需要标准化。美国政府也想要标准化程序,因此通过标准化操作系统接口(比 C 标准更进一步)创建了 POSIX(版本 1)。

Windows NT 也兼容 POSIX(版本 1),只是因为政府需要标准化工具。所以 POSIX 设计得非常非常广泛。

然后随着时间的推移,需要对更多的 Unix(和类似)系统进行标准化。不仅仅是一个系统,一个API,而是通用API,因此程序(例如GUI库或数据库)最终可以使用扩展,而且还要确保遵循标准的程序在兼容的系统上工作。

这是 SUS(单一 Unix 规范)。这需要一个类似 UNIX 的系统(与 POSIX 1 不同)。

然后 POSIX 变得不那么重要了:理论上可以在所有 POSIX 系统上运行的应用程序在 POSIX Windows 上并不真正运行。

所以新版本的 POSIX 合并了旧的 POSIX 加上 SUS 加上 SUS 中缺少的新的有用功能。

现在 Linux 很重要,因此在更新 POSIX 时要考虑 Linux 实现(例如 glibc)。您将在邮件列表中看到,POSIX 是由不同 Unix 和类似系统的“供应商”定义的。

因此,并不是操作系统扩展了 POSIX,而只是 POSIX 从不同的操作系统中获取了最有用和最标准的选项。它只是在现有接口如此不兼容时创建新接口,通过标准化,它将破坏现有程序。

对于“第二个”问题:当你开发一个新的操作系统时,你选择走什么路。通常它只是派生和分叉(和发行版):同样来自两个 Unix 系列,只是从 RedHat 或 Debian 派生 Linux)。由于设计原因,有时系统是从头开始构建的。内核提供了大部分系统调用,因此例如 glibc 需要以与 POSIX 类似的方式实现的大量系统调用(由内核提供)。Glibc 不完整。注意:早期的 Linux 发行版使用了其他库。GLibc 也是从头开始编写的。

于 2018-03-22T10:00:25.313 回答
0

好吧,我们都是站在巨人肩膀上的矮人

编写一个新的操作系统是一项艰巨的任务,所以聪明的人会尽可能地重复使用任何东西(设计、库、编译器、其他软件)。它仍然可能有太多的工作,那么为什么要从头开始重写所有内容来让它变得更加困难呢?

于 2018-03-21T22:41:37.570 回答