
Darwin には固有の機能がありますか? 他の Unix には Darwin にはない機能がありますか?
答え1
OS Xは唯一残っているオペレーティングシステムですMachマイクロカーネルに基づくこれらは商業的にもまだ意味があります。進行中の研究プロジェクトや時代遅れの OS がいくつかあり、それらは間違いなく古いマシンの生産環境でまだ使用されていますが、今日新しいマシンで購入できるものはありません。
OS Xには、他のOSと同様にカーネル機能の非互換性がいくつかある。私が最近対処しなければならなかった最大の問題は、System V メッセージキュー(msgget(2)
そして友人たち。)OS X でソフトウェアを実行するには、メッセージ キュー コード(「実際の」System V バリアント用に作成され、後に Linux に移植された)を TCP/IP に置き換える必要がありました。私たちのアプリケーションでは、メッセージ キューを選択する時点では、これら 2 つの IPC 方法の違いが重要でしたが、その後のアーキテクチャの変更により、TCP/IP への切り替えは大した問題ではなくなりました。
答え2
結局のところ、Darwin は Mach 2.0 の上に薄い BSD レイヤーを載せただけではないでしょうか?
以前は NeXTStep を使用していましたが、現在の MacOSX が NeXTStep からどの程度離れているかはわかりませんが...
Mach 2.0 はカーネル レベルで異なる抽象化セットを提供しました。
- 「タスク」: アドレス空間 + 一連の「ポート」であり、その中でスレッドが実行されている可能性があります。
- スレッド。これはスケジュール可能な実行単位です。タスク (アドレス空間) には、複数のスレッドを実行できます。Mach-O ファイル (Mach の実行可能ファイル形式) では、プロセス実行時に複数のスレッドを指定できると思います。複数の Cthread を開始する main() 関数はなく、OS が 1 つを開始します。
- ポート。これらは TCP ポートや UDP ポートとは異なります。これらは、型指定され、順序付けられたメッセージのストリームです。むしろ RPC に似ています。プロトコル仕様ファイルを作成し、それをコンパイラで実行して、サーバー側とクライアント側のスタブ、マーシャリングおよびアンマーシャリング ルーチンなどを取得します。
- ユーザー レベルのメモリ ページャー。他のタスクのアドレス空間のページングを処理するために、タスク + スレッドを設定できます。
オリジナルの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
答え3
これは答えではないですが、DTraceは、Solaris、Darwin/OS X、*BSD 用に存在する素晴らしいシステム デバッグ ツールですが、Linux 用はありません。
答え4
ダーウィンは、UNIXのフレーバーSolarisもその一つ。HP/UXもその一つ。もっとそれほど「有名」ではないかもしれませんが、フレーバーは存在します。そして、フレーバーごとに独自の特徴があります。そもそもフレーバーが存在するのはそのためです。ある企業が、そのフレーバーの販売に役立つ何かを考え出し(または単にそのフレーバーに取り組んだり、管理したりして)、それを作成して独自の名前を付けます。