web-dev-qa-db-ja.com

SystemVとPosixセマフォの違い

System VとPosixセマフォを使用することのトレードオフは何ですか?

26
corto

から O'Reilly

  • System VとPOSIXのセマフォ実装の顕著な違いの1つは、System Vでは、セマフォ数を増減できる量を制御できることです。一方、POSIXでは、セマフォ数が1ずつ増減します。
  • POSIXセマフォでは、セマフォのアクセス許可を操作できませんが、System Vセマフォでは、セマフォのアクセス許可を元のアクセス許可のサブセットに変更できます。
  • セマフォの初期化と作成は、POSIXセマフォでは(ユーザーの観点から)アトミックです。
  • 使用法の観点からは、System Vセマフォは不器用ですが、POSIXセマフォは単純です。
  • POSIXセマフォ(名前のないセマフォを使用)のスケーラビリティは、SystemVセマフォよりもはるかに高くなっています。各ユーザーがサーバーの独自のインスタンスを作成するユーザー/クライアントのシナリオでは、POSIXセマフォを使用することをお勧めします。
  • System Vセマフォは、セマフォオブジェクトを作成するときに、セマフォの配列を作成しますが、POSIXセマフォは1つだけを作成します。この機能のため、POSIXセマフォと比較した場合、System Vセマフォではセマフォの作成(メモリフットプリントに関して)にコストがかかります。
  • POSIXセマフォのパフォーマンスはSystemVベースのセマフォよりも優れていると言われています。
  • POSIXセマフォは、システム全体のセマフォではなく、プロセス全体のセマフォのメカニズムを提供します。したがって、開発者がセマフォを閉じるのを忘れた場合、プロセスの終了時にセマフォがクリーンアップされます。簡単に言うと、POSIXセマフォは非永続的なセマフォのメカニズムを提供します。
52
ezkl

別々のプロセス(スレッドではない)で使用されるPOSIX共有/名前付きセマフォに関する2つの主要な問題:POSIXセマフォは、セマフォロックを保持しているときに別のプロセスが停止したときに待機中のプロセスをウェイクアップするメカニズムを提供しません。このクリーンアップの欠如は、ゾンビセマフォにつながる可能性があり、ゾンビセマフォを使用しようとする他のプロセスまたは後続のプロセスがデッドロックを引き起こす可能性があります。また、OS内のセマフォを一覧表示して、それらを識別してクリーンアップしようとするPOSIXの方法もありません。 SysV IPCのPOSIXセクションでは、グローバルSysV IPCリソースを一覧表示および操作するためのipcsおよびipcrmツールを指定しています。POSIXにはそのようなツールやメカニズムさえ指定されていません。 IPCですが、Linuxではこれらのリソースは/ shmの下にあることがよくあります。これは、間違った時間に間違ったプロセスにKILLシグナルを送信すると、再起動するまで相互作用するプロセスのシステム全体がデッドロックする可能性があることを意味します。

もう1つの欠点は、POSIXセマフォにファイルセマンティクスを使用することです。つまり、同じ名前で、状態が異なる複数の共有セマフォが存在する可能性があります。たとえば、プロセスはsem_openを呼び出し、次にsem_closeの前にsem_unlinkを呼び出します。このプロセスでは、開いているファイルを閉じる前にリンクを解除するのと同じように、セマフォを使用できます。プロセス2は、プロセス1のsem_unlink呼び出しとsem_close呼び出しの間の同じセマフォでsem_openを呼び出し、(ドキュメントによると)同じ名前の新しいセマフォを取得しますが、プロセス1とは状態が異なります。同じ名前の2つの共有セマフォ独立して動作すると、共有セマフォの目的が無効になります。

上記の制限1により、POSIX共有セマフォは、キャッチできない信号が送信されないという保証なしに、実際のシステムでは使用できなくなります。制限2は、特定のセマフォを使用するすべてのコードを制御できると仮定して、注意深くコーディングすることで軽減できます。率直に言って、彼らがそれをそのまま標準にしたのは少し驚きでした。

23
iggie

私はこれが古いことを知っていますが、Googleのこの礼儀をまだ読んでいる人のために、POSIX(システムレベル)セマフォよりもSystem Vセマフォを使用する最大の理由は、セマフォリソースを取得する機能です。プロセスがどのように終了するかは問題ではなく、カーネルによって自動的に返されます。

複数の(アトミック)セマフォ操作が使用されることはめったになく(ステージング中には役立つ場合があります)、System Vインターフェイスは奇妙ですが、POSIXセマフォで同じクリーンアップセマンティクスを確実に実現する方法はありません。

10
Peter

何が人々を作るのだろうか System Vセマフォのような悪いAPIを設計する ! System Vセマフォを使用する非常に強い理由がない限り(1つのステップで複数のインクリメント/デクリメントを行うアトミック操作など)、POSIXという名前のセマフォを使用する必要があります。

リンクされた記事では、SystemVセマフォの何が問題で直感的でないかについて説明しています。

0
Jaywalker