mremap и страничные ошибки - PullRequest
       98

mremap и страничные ошибки

0 голосов
/ 26 сентября 2018

Глядя на impre mremap () на ядро, он выглядит так, как будто он перемещается и перемещает страницы памяти, он также сбрасывает tlb, если необходимо, и так далее.Тем не менее, на самом деле, похоже, что это не так, а скорее сгенерированный позже сбой страницы сделает фактическое отображение.

, поэтому мой вопрос - почему, если код специально вызывает move_page_tables, move_ptes иflush_tlb, если необходимо.

Я сделал тест для подтверждения,

У меня есть 2 блока памяти, выделенных при вызове mmap.оба одинаковы по размеру, флаги одинаковы и доступны, анонимны, так как мне не нужен файл, и для общего доступа разрешено многократное сопоставление одного и того же региона:

a = mmap(NULL, buffs_size, PROT_READ| PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
b = mmap(NULL, buffs_size, PROT_READ| PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);

Теперь я вызываю mremap:

mremap(a, 0, buff_size, MREMAP_MAYMOVE | MREMAP_FIXED,  b)

В этот момент b содержит содержимое a, однако, похоже, что mremap не отображал страницы, произошел сбой страницы, когда я получил доступ к b, сопоставил память с данными a и продолжил выполнение.

Любые идеи или указатели кода, где находится это решение?

...