Отображение памяти двоичного файла в VAS - PullRequest
0 голосов
/ 29 июня 2010

Когда создается новый процесс, адресное пространство создается с помощью fork (), т. Е. Для нового процесса создаются новые записи таблицы страниц, которые в точности совпадают с родительским процессом. После fork () вызывается exec (). Что происходит во время системного вызова exec ()?

Я прочитал в книге «Концепции операционной системы», что при запуске новой программы процессу присваивается новый пустой VAS. Означает ли это, что записи таблицы страниц, созданные во время fork (), будут удалены / modifeid? Что означает пустой VAS?

Как выполняется отображение памяти двоичного файла на VAS? Как загрузчик знает, какие адреса VAS должны быть сопоставлены с соответствующим двоичным файлом?

Я действительно запутался здесь.

1 Ответ

1 голос
/ 29 июня 2010

когда вы вызываете exec, ядро ​​загрузит двоичный файл и настроит новый набор таблиц страниц (заменив старые).

Загрузчик получает адрес для загрузки двоичного файла из самого двоичного файла (в основном он делает read(), чтобы получить заголовки и данные, которые не являются кодом, затем mmap() для фактической загрузки кода / данных вдвоичный файл)

, поэтому он смотрит на двоичный файл и выясняет, как он должен быть загружен, делает mmap(), передавая адрес для сопоставления для каждой части двоичного файла, который должен быть вдругое место (т. е. секции кода и данных, вероятно, представляют собой два разных вызова mmap(), а секция .bss будет отображаться из / dev / zero)

Обратите внимание, что в зависимости от ОС и загружаемого двоичного файла некоторыеэти вещи могут быть обработаны ядром напрямую или загрузчиком пространства пользователя (в системах UNIX ld будет загрузчиком, он обрабатывает загрузку общего объекта)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...