Linuxでgccを使用して静的プログラムをコンパイルし、kvmで実行しました。ゲストメモリ内のこのプロセスのすべてのページテーブルエントリを確認したところ、マップされているページとマップされていないページがあることがわかりました。これはオンデマンドページングの機能ですか?私の質問は、すべてのpteをページテーブルに存在させてマップするための解決策があるかどうかです。たとえば、新しいプロセスをフォークして、新しいelfバイナリをロードします。この新しいプロセスのページテーブルに、すべてのページをマップする方法を説明します。ありがとう
2 に答える
4
次のシステム コールを試してください。
#include <sys/mman.h>
int mlockall(int flags);
flags パラメータに MCL_FUTURE を設定すると、現在および将来のすべてのページがメモリにロックされます。詳細については、こちらを参照するか、「man mlockall」と入力すると、多くの情報が表示されます。
于 2010-07-29T07:01:48.330 に答える
3
このためのLinuxAPIはmlock()です。
ただし、KVM上で実行されているLinux VMでこれを実行しようとしている場合、ユーザーモードコードでこれを機能させる方法はないと思います。準仮想化されたLinuxカーネルがこの種の目的で使用できるいくつかのKVMAPIにアクセスできる可能性はありますが、そうなるのではないかと疑っています。
于 2010-07-28T18:16:27.353 に答える