Операционная система UNIX. Руководство программиста




Как ОС UNIX работает с разделяемыми библиотеками? - часть 2


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

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

Как было указано выше, разделяемая библиотека выполнения подобна файлу a.out(4). В частности, выполняемые файлы также допускают разделение между несколькими процессами одной копии своих команд, но не данных. Кроме того, чтобы выполнять файл, обращающийся к разделяемой библиотеке выполнения, процесс должен иметь право на выполнение по отношению к этой библиотеке.

Таблица переходов ld(1) является средством статического редактирования связей, поэтому он должен назначить адреса всем именам, которые встре- чаются в процессе редактирования. Разделяемая библиотека сборки используется для разрешения внешних ссылок на имена из разделя- емой библиотеки. В полученном выполняемом файле все такие имена получат свои адреса.

Что произойдет, если текст разделяемой библиотеки будет изменен, в результате чего изменится адрес какого-либо имени из библиотеки? Если бы это была архивная библиотека, ничего бы не произошло, поскольку в выполняемый файл была бы включена копия того элемента библиотеки, в котором имя определяется. Хотя это была бы копия старого варианта, такой файл можно было бы выполнять и в дальнейшем. Однако, если бы выполняемый файл создавался с разделяемой библиотекой, подобное изменение библиотеки могло бы отразиться на нем неблагоприятно. Действительно, в таком файле нет самого содержимого библиотеки, а есть только информация, указывающая его местонахождение. После реорганизации библиотеки ее структура могла бы измениться, в результате чего ОС UNIX, выполняя файл, предоставила бы ему не тот вариант библиотеки, который нужен данному файлу. Таким образом, чтобы Ваши программы работали правильно, их связи пришлось бы редактировать после каждого изменения библиотеки.




Содержание  Назад  Вперед