Совместно используемые библиотеки загружаются в процесс путем отображения файла в некоторой части адресного пространства процесса.Когда несколько процессов загружают одну и ту же библиотеку, ОС просто позволяет им совместно использовать одну и ту же физическую оперативную память.
Части библиотеки, которые могут быть изменены, например статические глобальные переменные, обычно загружаются в режиме копирования при записи,так что при попытке записи происходит сбой страницы, ядро отвечает копированием затронутой страницы на другую физическую страницу ОЗУ (только для этого процесса), сопоставление перенаправляется на новую страницу и, наконец, операция записи завершается.
Чтобы ответить на ваши конкретные вопросы:
- Все процессы имеют свое собственное адресное пространство.Совместное использование физической памяти между процессами невидимо для каждого процесса (если только они не делают это намеренно через API общей памяти).
- Все данные и код находятся в физической памяти, которая является своего рода адресным пространством.Однако большинство адресов, которые вы, вероятно, видите, являются адресами виртуальной памяти, принадлежащими адресному пространству того или иного процесса, даже если этот «процесс» является ядром.