Как файлы отображаются на адресное пространство процесса? - PullRequest
0 голосов
/ 29 июня 2018

Как можно в памяти картографических файлов обрабатывать адресное пространство? Обычно файлы хранятся на вторичных устройствах памяти, таких как NAND, SD-карта и т. Д. (Встроенная среда), которые не обеспечивают побайтный доступ? Мне нужен конвейер, как файл обновляется во вторичном хранилище, когда мы обновляем память, которая сопоставлена ​​с файлом? А также почему mmap быстрее по сравнению с системным вызовом write () или библиотечным вызовом fwrite ()?

1 Ответ

0 голосов
/ 29 июня 2018

Вся ваша карта потенциально копируется во внутреннюю память. Так что если вы обращаетесь к какому-либо адресу вашего прог-файла с SD-карты или чего-то еще, копия данных загружается во внутреннюю память. Насколько большой диапазон на самом деле, известно только ОС. Даже если вы зарезервируете место для полного файла, при необходимости будет прочитана только небольшая часть. Если процессор имеет MMU, это может быть просто реализовано ошибками страницы, что приводит к перезагрузке.

Доступ будет быстрее, если вы не сохраняете данные напрямую на базовое физическое устройство. Таким образом, изменения будут сделаны только в оперативной памяти, что быстро, и записывается позже сразу на более медленные устройства, такие как последовательная флэш-память или что-то еще.

Синхронизация от измененного подключенного виртуального ОЗУ к базовому файлу может быть выполнена с помощью msync http://man7.org/linux/man-pages/man2/msync.2.html

Если вам нужна некоторая базовая информация о том, как (виртуальный) ram адресован и как mmap отображается в виртуальный ram, вы можете прочитать это: https://www.xml.com/ldd/chapter/book/ch13.html

...