Я работаю над Ubuntu 14.04 LTS.Как работает mmap() при использовании в исполняемом файле?
- Есть два файла:
file1.c
иfile2.c
- Они собраны в
exec1
иexec2
соответственно.file2.c
использует функции из статической библиотеки.
exec1
карты exec2
в это виртуальное адресное пространство с помощью mmap
. Следующие строки из file1.c
:
#define MAX_SIZE_BYTES 4000000
fd = open(exec2_path, O_RDONLY);
addr = mmap(NULL, MAX_SIZE_BYTES, PROT_READ, MAP_FILE | MAP_SHARED, fd, 0);
Следующая серия событий происходит:
exec1
выполняется.exec1
mmapsexec2
в своем виртуальном адресном пространстве (что именно здесь происходит?)exec2
выполняется (на данном этапе,exec1
продолжает работать в фоновом режиме, что именно сейчас происходит.?)
PS: Я намерен знать, что произойдет, когда exec2
находится на диске, и это mmap
ed от exec1
? Как изменилось виртуальное адресное пространство и таблицы страниц, соответствующие exec1
?
Затем, когда exec2
фактически выполнен, он доведен до основной памяти. Как все меняется? Где в памяти находятся функции статической библиотеки, которые используются в file2.c
? У меня нет четкого представления об этом процессе. Может ли кто-нибудь пролить свет на эту тему?
Я не могу понять, что вы пытаетесь сделать с этим кодом. Похоже, вы пытаетесь сопоставить память исполняемого файла, а затем отбрасываете адрес, на который вы его сопоставили. – user3344003
Я не понимаю, как я отбрасываю адрес? – jsp99
mmap(), в большинстве своих настроек, возвращает адрес отображения. – user3344003