Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

Linux概要 - UNIXカーネルの概要(6)

Posted at

スピンロックとデッドロックの回避

スピンロックとは?

マルチプロセッサシステムでは、異なるCPU上でカーネルのデータが同時にアクセスされることがあります。このデータを安全に保護するため、同期手法としてセマフォが用いられることがありますが、すべてのケースで最適とは限りません。

特に、データ更新が短時間で済む場合、セマフォの使用は非効率的です。なぜなら、セマフォを確認するたびに、カーネルはプロセスをセマフォ待ちリストに登録し、一時停止(スリープ)させる必要があるからです。その間に、他のカーネル実行パスがすでにセマフォを解放してしまう可能性があり、不要な待機が発生します。

この問題を解決するのが スピンロック です。スピンロックはセマフォと似ていますが、プロセス待ちリストを持ちません。あるプロセスがロック取得を試みた際、他のプロセスがロックを保持していた場合、スリープせずに短いループ(スピン)を繰り返し、ロックの解放を待ちます。

ただし、スピンロックは 単一プロセッサ環境では適用できません。単一プロセッサでは、ロックを取得しようとするカーネル実行パスが待機を続ける一方で、ロックを解放すべきカーネル実行パスが実行されないため、システムがハングしてしまうからです。そのため、スピンロックは短時間で解放されることが前提の場面で使用され、長時間ロックが必要な場合はセマフォなどが選択されます。

デッドロックの回避

マルチプロセッサ環境では、複数のプロセスがリソースを同時に扱うため、デッドロックが発生する可能性があります。デッドロックとは、互いに相手のリソースを待機することで、システムが停止してしまう状態です。

例えば、

  • プロセスp1がリソースaを保持し、リソースbを待機

  • プロセスp2がリソースbを保持し、リソースaを待機

このように 循環的な待機関係 が生じると、デッドロックが発生します。

この問題を防ぐため、多くのOSでは次のような対策が取られています。

  1. ロック取得の順序を統一:リソースを取得する順番を決め、循環待機を防ぐ。

  2. タイムアウトの導入:一定時間ロックが取得できない場合に、リソース要求を取り消す。

  3. デッドロック検出アルゴリズム:システム内のプロセスのロック状態を監視し、デッドロックが発生した場合に適切に処理する。

Linuxをはじめとする多くのオペレーティングシステムでは、デッドロック回避のために ロック取得の順序を決める手法 が採用されています。適切な設計と運用によって、デッドロックを未然に防ぐことが可能です。

まとめ

  • スピンロックは短時間のデータ保護向け であり、単一プロセッサ環境では使用できない。

  • デッドロックはプロセス間のリソース待機によって発生する問題 であり、適切なロック取得順序やタイムアウト機構によって回避できる。

  • LinuxなどのOSではデッドロック防止策が導入されている。

次の記事へ

前の記事へ

一覧へ戻る

免責事項
本記事は、筆者の理解に基づいて執筆したものです。正確性には十分配慮していますが、内容の誤りや最新の情報と異なる可能性があります。
本記事の内容を参考にしたことによるいかなる損害についても、筆者は責任を負いかねますのでご了承ください。
正確な情報や書籍に書かれている根拠等はサポートしませんので、ご自身で公式ドキュメントをお調べください。
よって、この内容をAIの学習データに活用することはおすすめしません。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?