2017-03-09 9 views
2

私は過去の試験を行ってオペレーティングシステムに関する試験を準備しています。これは主にUnixシステム、Cプログラミング言語に関するもので、POSIXには多くのことが言及されていますので、ここでこの質問をするのが最善でしょう。セマフォにはシステムコールが必要ですか?

問題がある:

は、単純なスピンロックおよび/またはセマフォの3つの不利益を与えます。それぞれの他のメカニズムがどのように問題を改善するかを説明してください。 +説明与えられた3つの欠点

一つ、このされています

セマフォは、スレッドがすぐに進むことができた場合でも、システムコールが必要です。 (0.5P)スピンロックは、ユーザー空間で完全に実装することができ、システムコールを必要としません。彼らは短い待ち時間のために非常に効率的です。 (0.5P)

セマフォにはなぜシステムコールが必要なのですか?彼らはカーネルスペースにいなければなりませんか?特権命令の実行が必要ですか?

シングルプロセッサシステムとマルチプロセッサシステムの両方を考慮する必要があります。

+0

私はあなたにヒントを与えます:セマフォとは何ですか?それはどのように実装できますか?私はそれらを理解しようとするためにいくつかの質問をすることをお勧めします。 –

+0

@RuiFRibeiro私は主題に興味があり、ユーザー空間でそれを実装する方法と、それをカーネル空間で実装する方法の両方を考えることができます。私はシステムコールが必要であることを理解しています** **セマフォ上で 'wait()'を呼び出すプロセスが待たなければならない場合(例えばセマフォが完全に使用されている場合)** ** 1対1スレッドモデルが産出するために使用される。しかし、それ以外に、OSがなぜ関与しなければならないのかわかりません。このソリューションには次のような文字があります。「セマフォにはスレッドがすぐに処理されてもシステムコールが必要です。 **試験は明日**ですので、迅速な回答に感謝します。 –

+0

あなたはセマフォーhttp://www.tldp.org/LDP/lpg/node51.htmlのための特別なシステムコールを持っています。あるいは、貧しい人のセマフォーとしてファイルや共有メモリの変数さえも持つことさえできます。私は教授と明確になることを躊躇しています。彼らはしばしば彼らの主題に関する特別な解釈をしており、彼らの意見に多くのポイントを与えています。 –

答えて

2

歴史的な文脈によっては、物事がより明確になります。セマフォはもともとは、POSIX IPCが問題となる前に、System Vプロセス間通信パッケージ(System V IPC)の一部でした。名前はおそらく、あなたが物事がどこに向かうかについての手がかりを与えます。オリジナルのユースケースは、協力プロセスによって共有されるロックでした。 (私は99.99%のIPCに先立つスレッドをかなり待っています)。

POSIXセマフォはプロセスやスレッド、つまりOS関与で動作します。この答えはセマフォの抽象概念ではなく、標準的なセマフォの実装に関するものであるため、ここではコンテキストが重要です。

0

はい、セマフォは非常に特別なシナリオを除いてシステムコールを必要とします。セマフォは、他の競合者がリソースを解放するのを待つことができなければなりません。 Waitingにはシステムコールが必要です。

ロック上の競合者が共有メモリ空間にアクセスし、セマフォプロトコルを尊重するために互いを信頼する場合(これは主にロックが同じプロセスのスレッド間にある場合です)、ロックはシステムコールは常に必要です。特権のないプロセッサー命令を使用して、ロック状態を検査して変更することができます。これにより、ロックが解放されていればそれを取得し、ロックを解除することができますが、ロックが解放されるのを待つことは別の問題です。

スピンロックは、ロックが解放されるまでビジー(スピン)し続けます。ロックを競合するスレッドが異なるCPU上で実行されることがわかっている場合、これは有効な戦略かもしれません。スレッドが同じCPU上で実行される場合、ロックを待っているスレッドは、他のスレッドを実行できるようにする必要があります。ユーザランドスレッドでは、これはシステムコールなしで行うことができます。

セマフォは、ロックが可能になるまでスリープ状態になっています。現実の世界では、紡績による睡眠はほとんど許容できません。スリープにはほとんど常にシステムコールが必要です。カーネルは、待機中のスレッドをスケジューラのレディリストからセマフォオブジェクトの待機リストに移動します。

関連する問題