Как сделать каждую страницу процесса в таблице страниц представленной? - PullRequest
2 голосов
/ 28 июля 2010

Я скомпилировал статическую программу, используя gcc на linux, и запустил ее под kvm.Я проверил каждую запись таблицы страниц этого процесса в гостевой памяти и обнаружил, что некоторые страницы были отображены, а некоторые нет.Это функция подкачки по требованию?Мой вопрос заключается в том, есть ли решение, чтобы все pte присутствовали и отображались в таблице страниц?Например, я создаю новый процесс и загружаю новый двоичный файл elf, как сделать так, чтобы каждая страница отображалась в таблице страниц этого нового процесса.Спасибо

Ответы [ 2 ]

4 голосов
/ 29 июля 2010

Попробуйте следующий системный вызов:

#include <sys/mman.h>

int mlockall(int flags);

Установите параметр flags с помощью MCL_FUTURE, и он заблокирует все текущие и будущие страницы в памяти. Вы можете найти больше информации об этом здесь или просто набрать "man mlockall", и вы получите кучу информации.

3 голосов
/ 28 июля 2010

API для Linux это mlock () .

Однако, если вы пытаетесь сделать это на виртуальной машине Linux, работающей поверх KVM, я не думаю, что есть способ для кода пользовательского режима заставить это работать. Возможно, что паравиртуализированное ядро ​​Linux может иметь доступ к некоторым API-интерфейсам KVM, которые оно может использовать для такого рода вещей, но отчасти сомневается, что это будет сделано.

...