System V と Posix セマフォの使用のトレードオフは何ですか?
3 に答える
オライリーより:
- System V と POSIX セマフォの実装の顕著な違いの 1 つは、System V では、セマフォの数をどれだけ増減できるかを制御できることです。一方、POSIX では、セマフォ カウントは 1 ずつ増減されます。
- POSIX セマフォではセマフォのパーミッションを操作できませんが、System V セマフォではセマフォのパーミッションを元のパーミッションのサブセットに変更できます。
- セマフォの初期化と作成は、POSIX セマフォでは (ユーザーの観点から) アトミックです。
- 使用の観点からすると、System V セマフォは不器用ですが、POSIX セマフォは単純です。
- POSIX セマフォ (名前なしセマフォを使用) のスケーラビリティは、System V セマフォよりもはるかに優れています。各ユーザーがサーバーの独自のインスタンスを作成するユーザー/クライアントのシナリオでは、POSIX セマフォを使用することをお勧めします。
- System V セマフォは、セマフォ オブジェクトを作成するときにセマフォの配列を作成しますが、POSIX セマフォは 1 つだけ作成します。この機能により、System V セマフォでは、POSIX セマフォと比較して、セマフォの作成 (メモリ フットプリントに関する) のコストが高くなります。
- POSIX セマフォのパフォーマンスは、System V ベースのセマフォよりも優れていると言われています。
- POSIX セマフォは、システム全体のセマフォではなく、プロセス全体のセマフォのメカニズムを提供します。そのため、開発者がセマフォを閉じるのを忘れた場合、プロセスの終了時にセマフォがクリーンアップされます。簡単に言えば、POSIX セマフォは非永続セマフォのメカニズムを提供します。
別々のプロセス (スレッドではない) で使用される POSIX 共有/名前付きセマフォに関する 2 つの主要な問題: POSIX セマフォは、セマフォ ロックを保持している間に別のプロセスが終了したときに、待機中のプロセスをウェイクするメカニズムを提供しません。このクリーンアップの欠如により、ゾンビ セマフォが発生し、それらを使用しようとする他のプロセスまたは後続のプロセスがデッドロックする可能性があります。また、OS でセマフォをリストして、それらを識別してクリーンアップしようとする POSIX の方法もありません。SysV IPC の POSIX セクションでは、ipcs および ipcrm ツールを指定して、グローバル SysV IPC リソースを一覧表示および操作します。POSIX IPC ではそのようなツールやメカニズムさえ指定されていませんが、Linux ではこれらのリソースは多くの場合 /shm の下にあります。これは、間違ったタイミングで間違ったプロセスに KILL シグナルを送信すると、相互に作用するプロセスのシステム全体が再起動するまでデッドロックする可能性があることを意味します。
もう 1 つの欠点は、POSIX セマフォのファイル セマンティクスの使用です。つまり、名前は同じでも状態が異なる複数の共有セマフォが存在する可能性があります。たとえば、プロセスは sem_open を呼び出し、次に sem_close の前に sem_unlink を呼び出します。このプロセスは、開いているファイルを閉じる前にリンクを解除するのと同じように、引き続きセマフォを使用できます。プロセス 2 は、プロセス 1 の sem_unlink 呼び出しと sem_close 呼び出しの間に同じセマフォで sem_open を呼び出し、(ドキュメントによると) 同じ名前の新しいセマフォを取得しますが、プロセス 1 とは状態が異なります。同じ名前の 2 つの共有セマフォ独立して操作すると、共有セマフォの目的が無効になります。
上記の制限により、POSIX 共有セマフォは、キャッチできないシグナルが送信されないという保証がなければ、現実のシステムでは使用できなくなります。制限 2 は、特定のセマフォを使用するすべてのコードを制御できると仮定して、慎重にコーディングすることで軽減できます。率直に言って、彼らがそれをそのまま標準にしたのは少し驚くべきことです.
私はこれが古いことを知っていますが、Google のこの礼儀をまだ読んでいる人のために、POSIX (システムレベル) セマフォよりも System V セマフォを使用する理由の第 1 位は、セマフォ リソースを次の方法で取得できることです。プロセスがどのように終了しても、カーネルによって自動的に返されます。
複数の (アトミック) セマフォ操作はめったに使用されないこと (ステージング中には役立つ場合があります) と、System V インターフェースが奇妙であることに同意しますが、POSIX セマフォで同じクリーンアップ セマンティクスを確実に達成する方法はまったくありません。