Darwin 有哪些其他 Unix 没有的特性,反之亦然?

Am1*_*3zA 22 osx darwin

达尔文是否有任何特定于它的功能?其他 Unixe 是否具有达尔文所缺乏的功能?

War*_*ung 20

OS X 是唯一剩下的基于 Mach 微内核的操作系统,它也仍然具有商业意义。有一些正在进行的研究项目和过时的操作系统无疑仍在旧机器上的生产环境中使用,但今天没有任何东西可以出去购买新机器。

OS X 具有任何 *ix 都具有的各种常见的内核功能不兼容性。我最近不得不解决的最大问题是缺少System V 消息队列。(msgget(2)和朋友们。)我们不得不用 TCP/IP 替换我们的消息队列代码——它是为“真正的”System V 变体编写的,后来移植到 Linux——以让我们的软件在 OS X 上运行。对于我们的应用程序,在我们选择使用消息队列时,这两种 IPC 方法之间的差异很重要,但由于后来的架构变化,最终切换到 TCP/IP 并不是什么大问题。


Bru*_*ger 11

归根结底,Darwin 不就是 Mach 2.0 之上的一个薄薄的 BSD 层吗?

以前用过NeXTStep,不知道现在的MacOSX离NeXTStep有多大的差距,但是……

Mach 2.0 在内核级别提供了一组不同的抽象:

  1. 一个“任务”:这是一个地址空间+一组“端口”,可能有一个线程在其中运行。
  2. 线程。这是可调度的执行单元。一个任务(地址空间)可以有超过 1 个在其中运行。我相信 Mach-O 文件(Mach 的可执行文件格式)可以在进程运行时指定多个线程:没有启动更多 Cthreads 的 main() 函数,操作系统将启动一个。
  3. 港口。这些不像 TCP 或 UDP 端口。它们是键入的、有序的消息流。而是类似于 RPC。您编写了一个协议规范文件,然后通过编译器运行该文件以获取服务器和客户端存根、编组和解组例程等。
  4. 用户级内存寻呼机。您可以设置一个任务+线程来处理其他任务的地址空间的分页。

最初的 CMU Mach 人员使用这些抽象来模拟BSD Unix 进程、MS-DOS 进程,以及非常奇怪的 VMS 任务。每个 VMS 任务需要 2 个 Mach 任务,外加许多线程。有人曾经为 NeXTStep 销售 Mac OS(预 OSX)模拟器,该模拟器使用用户空间寻呼机效果良好。

旧的 CMU Mach 出版物页面:http : //www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/documents_top.html

VMS-on-Mach 论文:http : //www.sture.ch/vms/Usenix_VMS-on-Mach.pdf

  • Mac OS X(以及达尔文)使用 Mach 3.0。 (3认同)

kby*_*yrd 5

这不是一个很好的答案,但是DTrace是一个很棒的系统调试工具,它存在于 Solaris、Darwin/OS X 和 *BSD,但不存在于 Linux。

  • Oracle 于 2011 年将 DTrace 移植到 Linux。 (3认同)