スタベーション

●リソース・スタベーション(resource starvation)

 コンピュータ・システムのマルチタスク処理において,プロセスやタスクなどの実行単位プログラムが,必要なリソースを取得できない状況が継続すること.これが起きるとプログラムは処理を継続できず,事実上,動作を停止した状態に近くなる.直訳すると,資源飢餓の意.
 原因となる事象は多数考えられる.代表的な原因にデッド・ロック,高優先度プロセスによる資源の占有,プロセスの優先度逆転,メモリ・リークなどがある.
 デッド・ロックが起きると,複数のプロセスが必要とする資源を互いに取得し合って解放しないため,恒久的に資源を取得できなくなる.
 高優先度プロセスによる資源の占有が起きると,優先度をもつプロセスが,より低い優先度をもつプロセスにプロセッサ時間を与えないため,実行されない状態になる.一般的には,ソフトウェアの設計段階でこの問題への対策が行われるはずだが,システムが過負荷で,特に割り込み処理が間に合わないなどの状態に陥ったときに発生することがある.
 プロセスの優先度逆転が起きると,高優先度のプロセスが低優先度のプロセスによってブロックされたリソースを取得できずに,優先度が低いプロセスのほうが先行して処理される.
 メモリ・リークが起きると,使用後に解放されないメモリ空間が蓄積し,やがてプロセスの実行に必要なメモリがなくなり,メモリ確保のための処理が継続して実行され,プロセスの実行が止まる.



スタベーション
スタベーション(Starvation: 飢餓)とは、プロセス(またはスレッド)が必要なリソースをほぼ永久的に獲得できない状況のことを言います。



FIFO チケットスピンロック

特定の負荷において、スピンロックが不公平になる場合がある。例えば、スピンロックでスピンしているプロセスが、1,000,000回程度までスタベーションすることがある。通常スピンロックにおけるスタベーションは問題にはならない。というのは、スタベーションに気づけるような状態になるよりも先に性能問題が発生するからである。しかしながら、テストで示されているのはその逆で、ロックに対して激しいコンテンションが発生して、プロセッサはロックを闇雲に取る、という、目立たないケースは、常に存在する。新しいスピンロックでは、プロセスは FIFO 順でスピンロックを取るようになる。

最終更新:2008年06月19日 00:51