1. 序章

このチュートリアルでは、オペレーティングシステムで使用されるビジーウェイトの概念について説明します。 ビジーウェイトの定義、例、およびその使用目的について説明します。 また、それに伴う利点と問題を確認し、これらの問題にどのように対処するかについての指針を示します。

2. ビジーウェイトとは何ですか?

ビジーウェイト、スピニング、またはビジーループとも呼ばれるプロセス 同期テクニックでは、プロセス/タスクが待機し、常に状態をチェックします。実行を続行する前に満たす必要があります。 ビジー待機中、プロセスは、コンピュータシステムでのロックまたはリソースの可用性など、エントリ条件が真であるかどうかをテストする命令を実行します。

リソースの可用性については、プロセスが特定のプログラムのリソースを必要とするシナリオを検討してください。 ただし、リソースは現在使用中であり、現在使用できないため、プロセスは続行する前にリソースが使用可能になるまで待機する必要があります。 これは、以下に示すようにビジーウェイトとして知られているものです。

オペレーティングシステムで待機するには、2つの一般的なアプローチがあります。 まず、プロセス/タスクは、プロセッサを消費している間、条件が満たされているかどうかを継続的にチェックできます–ビジーウェイト。

第二に、プロセスはプロセッサを消費せずに待機できます。 このような場合、条件が満たされると、プロセス/タスクにアラートが送信されるか、起動されます。 後者は、スリープ、ブロック待機、またはスリープ待機として知られています。

3. ビジーウェイトはいつ使用されますか?

ビジーループは通常、オペレーティングシステムで相互排除を実現するために使用されます。 相互排除は、プロセスが共有リソースに同時にアクセスすることを防ぎます。 プロセスは、相互排他で他のプロセスからの干渉を受けることなく、クリティカルセクションのリソースに対する排他的制御を付与されます。 クリティカルセクションは、同時アクセスを回避する必要があるプログラムコードのセクションです。

4. ビジーウェイトの問題

一部のオペレーティングシステムでは、ループ手順がコンピュータリソースの浪費であるため、ビジーウェイトは非効率的である可能性があります。 さらに、システムは待機中はアイドル状態のままになります。 手元のタスク/プロセスの優先度が低い場合、これは特に無駄になります。 その場合、優先度の高いタスクを完了するために転用できるリソースは、ビジー待機中の優先度の低いタスクによって占有されます。

ほとんどのオペレーティングシステムで実装されているビジーウェイトの非効率性の回避策は、遅延機能の使用です。 スリープシステムコールとも呼ばれる遅延関数は、ビジー待機に関係するプロセスを指定された時間非アクティブ状態にします。 この場合、プロセスが「スリープ」しているため、リソースが無駄になることはありません。 遅延関数を以下に示します。

スリープ時間が経過すると、プロセスが起動されて実行が続行されます。 それでも条件が満たされない場合は、条件が満たされるまでスリープ時間が増加します。

別のアプローチは、待機中のプロシージャの定義を変更して、セマフォによるブロッキングプロセスに対応することです。 ビジー待機中のプロセスはブロックされ、リソースを消費しない待機キューに配置されます。 条件が満たされると、プロセスが再開され、レディキューに入れられます。

5. ビジーウェイトの望ましい特性

非効率的ですが、待機時間が短くて重要でない場合、ビジー待機は相互排除に役立ちます。 さらに、ビジーウェイトはすばやく簡単に理解して実装できます。

一部のオペレーティングシステムでは、ビジーウェイトはスピンロックの実装に役立ちます。 スピンロックは、共有リソースにアクセスしようとしているプロセスにスピン/待機ループを強制します。 つまり、相互排除を強制します。 スピンロックが解放されると、プロセスは実行プロセスを続行します。 スピンロックは通常、共有リソースの数が競合を引き起こすほど多くないオペレーティングシステムで使用されます。

ただし、ビジーウェイトと同様に、待機時間が長い場合、スピンロックは悪い考えと見なされます。

6. 結論

この記事では、オペレーティングシステムで使用されるビジーウェイトについて説明しました。 ビジーウェイトにつながる条件と、存在する代替案を確認しました。 最後に、ビジーウェイトを使用する利点と問題について説明しました。