адресное пространство разделяемой библиотеки - PullRequest
9 голосов
/ 07 ноября 2011

Пока я изучал общую библиотеку, я прочитал заявление

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

У меня просто мало сомнений.

  1. Находится ли часть кода каждого процесса в отдельном адресном пространстве?
  2. Находится ли часть кода совместно используемой библиотеки в некотором глобальном (уникальном) адресном пространстве.

Я только начинающий, поэтому, пожалуйста, помогите мне понять.

Спасибо!

1 Ответ

20 голосов
/ 07 ноября 2011

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

Части библиотеки, которые могут быть изменены, например статические глобальные переменные, обычно загружаются в режиме копирования при записи,так что при попытке записи происходит сбой страницы, ядро ​​отвечает копированием затронутой страницы на другую физическую страницу ОЗУ (только для этого процесса), сопоставление перенаправляется на новую страницу и, наконец, операция записи завершается.

Чтобы ответить на ваши конкретные вопросы:

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