0

スワップして終了するとは、つまり、プロセスがスワップ空間にスワップされるか、( OOM killer によって) 終了されてメモリが解放されようとしている場合です。

Linux カーネルはどのアルゴリズムに従っていますか?

たとえば、プロセス A には追加のメモリが必要であり、プロセス B はスワップまたは強制終了するように選択されていますが (スワップ領域が既に占有されている場合)、プロセス B にはまだブロッキング スレッドがあります。

a.)ブロックしているスレッドに関係なく、プロセス B はスワップまたは強制終了されますか?

b.)そうでない場合、この種のケースはどのように処理されますか?

私の例がありそうもないケースである場合、洞察をいただければ幸いです。

4

1 に答える 1

1

ええ-@CLで提案されているように、ページ化された仮想メモリを読み取る必要があります。プロセスは完全にスワップアウトされず、swapping!=終了です。

OS が特定の API 要求または OOM アルゴリズムのためにプロセスを終了する必要がある場合、OS は最初にすべてのスレッドを停止します。ブロックされたスレッドは実行されていないため、簡単に「停止」できます。再度実行されないように状態を変更するだけで済みます。実際にコアで実行されているスレッドは、スレッドを実行しているコアをハードウェアで中断できるコア間通信ドライバーによって停止する必要があります。すべてのスレッドが実行されなくなったら、プロセスに割り当てられたすべてのユーザー空間メモリを含むリソースを解放し、OS スレッド/プロセス管理構造体を解放できます。その後、プロセスは存在しなくなります。

于 2013-08-15T09:24:15.647 に答える