符合POSIX的操作系统通常扩展C标准库的现有实现?

时间:2018-03-21 21:46:05

标签: c posix glibc uclibc musl

POSIX声明操作系统需要提供与POSIX兼容的功能单元之一是POSIX_C_LANG_SUPPORT。基本上这是整个C标准库,还有更多东西。

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

2 个答案:

答案 0 :(得分:0)

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

编写一个新的操作系统是一项巨大的承诺,所以聪明的人将重复使用它们(设计,库,编译器和其他软件)。它仍然处于太多的工作中,所以为什么要从头开始重写所有内容呢?

答案 1 :(得分:0)

真的,它是以相反的方式完成的。

我们有不同的Unix版本:两个主要系列:SystemV和BSD,不同的制造商,因此需要标准化。美国政府也想要标准化程序,因此通过标准化OS接口(比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也是从头开始编写的。