1

私は、コンピューターのハード ドライブ コントローラーがクラッシュしたときに、ある種の自己修復手順を開始するプログラム デーモンを作成しました。このプログラムはすでに正常に動作していますが、プログラム (約 18KB のコンパイル済みファイル サイズ) がオペレーティング システムによって RAM に完全にロードされない可能性があること、および (本当に運が悪い場合) いくつかのプログラム ページをプログラムをアクティブにする必要があり、ディスク アクセスができなくなった正確なタイミングでディスクを削除します。

結局のところ、ほとんどの場合、プログラムは無限ループにとどまり、すべてが正常で、プログラム コードの 95% が使用されていないかどうかをチェックします。したがって、カーネルは未使用のプログラムページをRAMから削除することでRAMの使用を最適化できると思います。

それで、私の質問: Linux はすべてのプログラム コード ページをメモリにロードして保持し、プログラムが開始されたら、プログラム コード自体を実行するためにハードディスクに再度アクセスする必要はありませんか?

技術的な詳細: Linux カーネル 2.6.36+、約 1 GB の RAM、Debian 5、アクティブなスワップ スペースなし

を呼び出すことでスワッピングを防ぐことができることはすでに学びましmlockall(MCL_CURRENT | MCL_FUTURE);たが、本当にマシンを更新する必要があるかどうか疑問に思っています。

4

2 に答える 2

1

いいえ、プログラム コード ページはプロセスのアドレス空間にメモリ マップされており、他の とそれほど変わらないため、mmap()これらのページに長時間アクセスしないと、最終的に RAM から削除できます。それを避けるには、mlockall()呼び出しを使用してください。

于 2013-10-10T10:02:55.160 に答える