Недавно я читал "компьютерные системы". В нем говорится, что разделяемая библиотека отображается на той же странице физической памяти, что и разделяемый объект между процессами, включая разделы .data и раздел .text. И операция записи в общем объекте в одном процессе также может быть «разделена» другим процессом. Вот проблема: при создании разделяемой библиотеки раздел данных начинается с GOT, который содержит адреса глобальных переменных. А динамический загрузчик отвечает за заполнение адресов для каждой программы, связанной с общей библиотекой, что означает запись адресов на соответствующей странице физической памяти, так как это может не повлиять на другой процесс, связанный с общей библиотека, так как она содержит совершенно другой GOT.