
dot
私は(有向グラフを描くプログラム)を実行しましたが、入力ファイルが大きすぎて適切な時間にレンダリングできませんでした。
システム全体が停止します。 ++を使用してkillCtrlテキストコンソールにようやく入ることができましたが、数分かかりました。AltF1dot
システムがこのようなことを許可するのはなぜですか?重要ではないプログラム(dot
システムの99%)を提供し、応答状態を維持するために残りの1%を使用するのはなぜですか?
答え1
これがGNU / Linuxや他のマルチタスクシステムが機能する方法です。それらは実行中のプロセス間でプロセッサを共有し、dot
プロセッサの99%ではなくプロセッサの100%を共有します。各プロセスは一定期間プロセッサを支配する。
これはスケジューラによって処理されます(Linuxには複数のスケジューラがあり、一部は一般的な戦略を適用し、一部はユーザーインターフェイスにさらに多くの時間を提供しようとします)。
今、あなたの場合、問題は、これはdot
プロセッサ時間をあまり占めませんが、大量のメモリを占有することです。プログラムが多すぎるメモリを使用している場合勝つ、これはまさにシステムを停止するプロセスです。dot
これは多くの作業が行われているためではなく、カーネルがディスク(スワップパーティション)とシステムメモリの間でメモリページを前後に移動する必要があるためです。
CPU時間の99%しか占めていない場合でも、dot
すぐにテキスト端末に切り替えることができます。何が起こっているのか、カーネルはキーを見ることができるようにメモリにdot
戻すためにメモリからアイテムを移動する必要があります。キーを押してテキスト端末に移動すると、カーネルはまだ実行中のメモリ、テキスト端末プロセス(たぶん?)をメモリに移動するためにメモリから移動する必要があります。 (これが混乱しているようであれば、単なる例は混乱しているからではありません。現実はX
X
X
dot
dot
login
これ汚れた。 )
たとえば、テキスト端末にログインしている場合は、キーを押してバックスペースを押すとリアルタイムで問題が発生しますps
。ロードするにはメモリを確保する必要があるからです。これは、ファイルシステムがデータを要求ps
できるようになるまで、メモリの内外にデータを移動するためによく使用されるディスクI / Oキューで待機する必要があるためです。ps