Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VSOS_2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.9 Mб
Скачать
    1. Динамическая загрузка

Для достижения более эффективного использования памяти может использоваться так называемая динамическая загрузка. При таком подходе подпрограммы не загружаются в память до тех пор, пока не будут вызваны. Все подпрограммы хранятся в переместимом загрузочном формате. Главная программа загружается в память и выполняется. Когда необходимо из одной подпрограммы вызвать другую, вызывающая подпрограмма проверяет, присутствует ли в памяти вызываемая подпрограмма. Если это не так, то вызывается специальный загрузчик для размещения новой подпрограммы в памяти и коррекции таблицы адресов программы. Затем управление передается новой подпрограмме.

Преимущество такого подхода состоит в том, что не вызванные подпрограммы не будут никогда загружены в ОП. Такая схема особенно полезна, если большие подпрограммы вызываются относительно редко, например, для обработки ошибок.

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

    1. Динамическое связывание

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

Концепция динамического связывания отличается от концепции динамической загрузки. Вместо откладывания загрузки на время исполнения откладывается связывание. Такой подход обычно применяется к системным библиотекам, но ничто не мешает программисту создавать свои подобные библиотеки. Если такой возможности нет, то все программы должны содержать копии системных библиотек или, по крайней мере, копии необходимых подпрограмм, в исполняемом файле. Это приводит к излишнему расходу дисковой и оперативной памяти.

Реализовать динамическое связывание можно, например, включая в образ программы для каждой подобной ссылки небольшой участок кода, содержащий специальный загрузчик. При выполнении сначала проверяется, где находится соответствующая подпрограмма. Если она не размещена в памяти, то она подгружается. После этого происходит связывание. Затем вызов загрузчика может быть подменен вызовом подпрограммы. При последующих обращениях, подпрограмма сразу же будет выполнена без задействования схемы динамического связывания. При такой схеме все процессы используют единственную копию подпрограмм в памяти.

Динамическое связывание облегчает настройку системы в случае изменения библиотек, например, из-за исправления ошибок. Библиотека будет заменена новой копией, и все программу станут автоматически на нее ссылаться. Без динамического связывания все использующие библиотеку программы должны быть повторно собраны.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]