システムが応答しないのはなぜですか?

システムが応答しないのはなぜですか?

dot私は(有向グラフを描くプログラム)を実行しましたが、入力ファイルが大きすぎて適切な時間にレンダリングできませんでした。

システム全体が停止します。 ++を使用してkillCtrlテキストコンソールにようやく入ることができましたが、数分かかりました。AltF1dot

システムがこのようなことを許可するのはなぜですか?重要ではないプログラム(dotシステムの99%)を提供し、応答状態を維持するために残りの1%を使用するのはなぜですか?

ベストアンサー1

これがGNU / Linuxや他のマルチタスクシステムが機能する方法です。それらは実行中のプロセス間でプロセッサを共有し、dotプロセッサの99%ではなくプロセッサの100%を共有します。各プロセスは一定期間プロセッサを支配する。

これはスケジューラによって処理されます(Linuxには複数のスケジューラがあり、一部は一般的な戦略を適用し、一部はユーザーインターフェイスにさらに多くの時間を提供しようとします)。

今、あなたの場合、問題は、これはdotプロセッサ時間をあまり占めませんが、大量のメモリを占有することです。プログラムが多すぎるメモリを使用している場合勝つ、これはまさにシステムを停止するプロセスです。dotこれは多くの作業が行われているためではなく、カーネルがディスク(スワップパーティション)とシステムメモリの間でメモリページを前後に移動する必要があるためです。

CPU時間の99%しか占めていない場合でも、dotすぐにテキスト端末に切り替えることができます。何が起こっているのか、カーネルはキーを見ることができるようにメモリにdot戻すためにメモリからアイテムを移動する必要があります。キーを押してテキスト端末に移動すると、カーネルはまだ実行中のメモリ、テキスト端末プロセス(たぶん?)をメモリに移動するためにメモリから移動する必要があります。 (これが混乱しているようであれば、単なる例は混乱しているからではありません。現実はXXXdotdotloginこれ汚れた。 )

たとえば、テキスト端末にログインしている場合は、キーを押してバックスペースを押すとリアルタイムで問題が発生しますps。ロードするにはメモリを確保する必要があるからです。これは、ファイルシステムがデータを要求psできるようになるまで、メモリの内外にデータを移動するためによく使用されるディスクI / Oキューで待機する必要があるためです。ps

おすすめ記事