Иллюстрированный самоучитель по теории операционных систем

Разделяемые библиотеки

Пример 5.2. Структура PLT для процессора SPARC (цитируется по [docs.sun.com 816-0559-10]).

Первые две (специальные) записи PLT до загрузки программы:

.PLT0:
un imp
unimp
unimp.PLT1:
unimp
unimp
unimp

Обычные записи PLT до загрузки программы:

.PLT101:
sethi (.-.PLT0),%gl
ba,a.PLTO
пор.PLT102:
sethi (.-.PLT0),%gl
ba,a.PLTO
nop
…

Специальные записи PLT после загрузки программы:

.PLT0:
save %sp,-64,°osp
call runtime-linker
пор
.PLT1:
.word identification
unimp
unimp
…

Обычные записи PLT после настройки:

PLT101:
sethi (.-.PLT0),%g1
sethi %hi(name1),%g1
jmpl %g1+%lo(namel),%g0
PLT102:
sethi (.-.PLT0),%g1
sethi %hi (name2),%g1
jmpl %g1+%lo(name2),%g0

Таким образом, каждая пользовательская задача, загруженная в Unix, имеет собственное адресное пространство с собственной структурой (рис. 5.18). Некоторые участки памяти у разных задач могут совпадать, и это позволяет сэкономить ресурсы за счет их разделения. Это существенно менее глубокое разделение, чем то, что достигается в Windows, но, как мы видели в разд. "Динамические библиотеки" более глубокое и принудительное разделение кода чревато серьезными проблемами.

Иллюстрированный самоучитель по теории операционных систем › Сегментная и страничная виртуальная память › Разделяемые библиотеки
Рис. 5.18. Разделяемые библиотеки ELF

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.