![Darwin 有哪些其他 Unix 没有的功能,反之亦然?](https://linux22.com/image/84/Darwin%20%E6%9C%89%E5%93%AA%E4%BA%9B%E5%85%B6%E4%BB%96%20Unix%20%E6%B2%A1%E6%9C%89%E7%9A%84%E5%8A%9F%E8%83%BD%EF%BC%8C%E5%8F%8D%E4%B9%8B%E4%BA%A6%E7%84%B6%EF%BC%9F.png)
达尔文有什么特有的特征吗?其他 Unixe 是否具有 Darwin 所缺乏的功能?
答案1
OS X 是仅存的操作系统基于Mach微内核这也仍然具有商业意义。有一些正在进行的研究项目和过时的操作系统无疑仍在旧机器的生产环境中使用,但今天您无法在新机器上购买任何东西。
OS X 具有任何 *ix 都具有的常见内核功能不兼容性。我最近必须解决的最大问题是缺乏系统V消息队列。 (msgget(2)
和朋友。)我们必须用 TCP/IP 替换我们的消息队列代码(该代码是为“真正的”System V 变体编写的,后来移植到 Linux),以使我们的软件能够在 OS X 上运行。对于我们的应用程序,当我们选择使用消息队列时,这两种 IPC 方法之间的差异很重要,但由于后来的架构变化,最终切换到 TCP/IP 并不是什么大问题。
答案2
归根结底,Darwin 不只是 Mach 2.0 之上的一个薄薄的 BSD 层吗?
我曾经使用NeXTStep,我不知道当前的MacOSX与NeXTStep有多少差距,但是......
Mach 2.0 在内核级别提供了一组不同的抽象:
- “任务”:这是一个地址空间+一组“端口”,可能有一个线程在其中运行。
- 线程。这是可调度的执行单元。一个任务(地址空间)中可以运行多个任务。我相信 Mach-O 文件(Mach 的可执行文件格式)可以在进程运行时指定多个线程:没有启动更多 Cthreads 的 main() 函数,操作系统将启动一个。
- 港口。这些端口与 TCP 或 UDP 端口不同。它们是打字的、有序的消息流。更像是 RPC。您编写了一个协议规范文件,然后通过编译器运行该文件以获得服务器和客户端存根、编组和解组例程等。
- 用户级内存分页器。您可以设置一个任务+线程来处理其他任务地址空间的分页。
最初的 CMU Mach 人员使用这些抽象来仿真BSD Unix 进程、MS-DOS 进程,以及非常奇怪的 VMS 任务。每个 VMS 任务需要 2 Mach 任务以及许多线程。有人曾经出售 NeXTStep 的 Mac OS(OSX 之前)模拟器,该模拟器使用用户空间寻呼机取得了良好的效果。
旧的卡内基梅隆大学马赫出版物页面: 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
答案3
这不是一个完整的答案,但是,DTrace是一个很棒的系统调试工具,适用于 Solaris、Darwin/OS X 和 *BSD,但不适用于 Linux。