2015-12-02 12 views
5

我々は、コンピュータ上で実行されるすべてが、多くの人が協力している巨大なプログラムであることを知っています。
コンピュータがハングアップしても何もできない場合はどうなりますか?また、すべてがプログラムで実装された何かをフリーズするこのシナリオはありますか?それとも、プログラムカウンタがスタックしていて増分できないので、プロセッサに何らかの問題がありますか?コンピュータが「ハング」またはフリーズしたとするとどうなりますか?

答えて

3

さまざまな状況でコンピュータがフリーズすることがあります。

  • のx86 CLIHLT説明:これらは私が今考えることができますものです。 CLIは割り込みを無効にするため、非同期イベント(タイマー割り込みやキーの押下など)ではCS:EIP命令ポインタを別の命令に移動できず、HLTは文字通りプロセッサを停止します。
    この命令はめったに使用されず、たとえばブートコードの初期化ルーチンが失敗した場合にのみ、カーネルが許可します。ここでは再起動はより良いオプションです。
    だけでは実行でないすべてのコアであるコアを停止HLTことに注意してください

  • ウィンドウが応答しません(一般にWindowsでは見つかりません)。これはアプリケーションによって異なります。詳細情報here

  • リソースは取得しようとしましたが、ロックによって保護されており、既に取得されています。プロセスは、最終的にリソースを取得できるまで、待機します(実際にはビジー・ループまたは別のプロセスを生成します)。これは、の一時的な状態ですが、これとは対照的に...

  • デッドロックです。複数の状況が発生する可能性があるが、共通の状況は、同時に提供するリソースを獲得しようとする2つのプロセスです。両方とも他のプロセスを待っているため、どちらも取得要求を処理できないため、両方のプロセスが終了します。uninterruptible。これが、Linux上の無停止プロセスの理由です。これは、シグナルが送られてきたにもかかわらず殺されることはありません。

  • 低速プロセッサまたは少数のスレッドを持つプロセッサでマルチタスキング。悪いスケジューリングアルゴリズムは状況をさらに悪化させます。
    1つのプロセスが少なくとも1つのスレッドを占有するため、効率的に並行して実行されるプロセスの数は非常に少なくなります。しかし、これは非常に高速なプロセッサで安定化することができます。
    この結果、マウスクリックなどのイベントに対する応答時間が長くなります。

x86システムでは、実際には命令ポインタが進まないように指示する唯一の命令はHLTです。
他のすべてのケースは、(潜在的に無限の)ループまたはプログラム/オペレーティングシステムのバグです。

+0

"低速プロセッサでマルチタスクを実行"するので、 "RAMが少ないシステムではスワップトラフィックが多い"と追加する必要があります。限られたハードウェアリソース:同じ球場にあります。 – bolov

+1

興味深いのは、ユーザプロセスのバグがシステム全体を凍結するだけでなく、OSやシステムドライバにバグがなければ、それが起きる可能性があるということです。 – bolov

+0

@bolovそれは確かにむしろ哲学的なものです。古いフォーク爆弾はユーザープログラムであり、システムを簡単にクラッシュさせることができます。 OSがそれを禁止していないという事実:バグかどうか? 「哲学的」は正しい言葉ではないかもしれませんが、とにかく私が何を意味するのか願っています。 **注:**私はあなたの最初のコメントに応じて後で自分の答えを調整しますが、現在そうすることはできません。 – Downvoter

関連する問題