Мне нужно получить физический адрес огромной страницы (2 МБ) из пользовательского пространства. Мне удалось получить физический адрес обычной страницы 4 КБ с pagemap, как показано в https://shanetully.com/2014/12/translating-virtual-addresses-to-physcial-addresses-in-user-space/#codeprocpidpagemapcode, однако я не понимаю, как использовать pagemap для получения физического адреса огромной страницы. Как представлен номер страницы страницы с огромной страницей в pagemap? Любые ссылки и особенно любой фрагмент кода будут высоко оценены.Как получить физический адрес огромной страницы
ответ
Это должно быть то же самое. Основное различие между обычными страницами и огромными страницами - это несколько слоев таблиц страниц. Начальная страница страницы заканчивается для огромных страниц (по крайней мере, на x86).
Огромные страницы, как правило, заканчиваются более нулями, чем типичные страницы, так как они должны быть выровнены по их размеру (в случае 2 МБ низкие 21 бит должны быть равны нулю).
Если вы получаете -EINVAL от вашего чтения, проверить эту цитату из pagemap documentation (пример считывает неправильное число байтов):
Чтение любой из файлов будет возвращать -EINVAL если вы не являются , начиная с чтения на 8-байтной границе (например, если вы искали нечетное число байтов в файле), или если размер чтения не является , кратным 8 байтам.
Но это может быть и не то же самое. Дайте мне знать, какую ошибку вы получаете, и я посмотрю, смогу ли я понять, почему. – ruthafjord
Большое спасибо, похоже, сейчас работает. Я заметил, что у меня есть адреса с множеством завершающих нулей, которые имели смысл, но я не знал точно, это было просто наблюдение, на которое я не хотел слепо полагаться. еще раз спасибо – alex10791
- 1. Как получить физический адрес связанных данных со страницы структуры?
- 2. Как получить физический адрес из страницы структуры в ядре linux
- 3. Виртуальный адрес на физический адрес
- 4. Как получить файл физический адрес в Java
- 5. Физический адрес в JAVA
- 6. java.nio.MappedByteBuffer виртуальный/физический адрес
- 7. Линейный адрес и физический адрес
- 8. Как преобразовать виртуальный адрес в физический адрес?
- 9. Как преобразовать адрес kmalloc() в физический адрес
- 10. получить физический адрес буфера под Linux
- 11. __get_free_page, физический адрес и своп
- 12. физический адрес объектов в C#
- 13. Как проверить физический адрес с часовым поясом
- 14. физический адрес глобальной таблицы дескрипторов?
- 15. перевести виртуальный адрес на физический адрес
- 16. Как получить физический адрес местоположения в файле в Linux
- 17. Как получить физический адрес памяти GPU для DMA? (OpenCL)
- 18. linux kernel - как получить физический адрес (управление памятью)?
- 19. Как получить физический (MAC) адрес IP-адреса с помощью C#?
- 20. Как получить физический адрес из пространства ядра Linux?
- 21. memcpy принимает виртуальный адрес или физический адрес?
- 22. Физический адрес для GeoLocation UK
- 23. Физический адрес Расчет сборки IAPX8088
- 24. Как получить адрес страницы url
- 25. Как получить адрес перенаправленной страницы?
- 26. физический адрес переменной в c
- 27. преобразование логического адреса в физический адрес
- 28. Как вычислить физический адрес в компьютерной архитектуре?
- 29. Как Асесс физический адрес в пространстве ядра
- 30. Как перевести адрес виртуальной памяти на физический адрес?
Вы прочитали [документацию для pagemap] (https://www.kernel.org/doc/Documentation/vm/pagemap.txt)? Это даже ссылка на ссылку, которую вы предоставили. В частности, раздел, описывающий «COMPOUND_HEAD» и «COMPOUND_TAIL». – kaylum
Я искал документацию pagemap, но в разделе ОГРОМНОЕ, которое мало говорило. Итак, согласно COMPOUND_HEAD и COMPOUND_TAIL начало моего буфера в 2 МБ должно быть головой, поэтому любое место в первых 4 Кбайтах моего буфера должно отображаться на PFN всей огромной страницы? Как я должен интерпретировать значение? Должен ли я ожидать 9 нулей в конце PFN? И рассмотрите бит 10 и выше как биты физической памяти, расширяющие мое смещение? – alex10791