Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Романов.Модуль2.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.88 Mб
Скачать
  1. Последовательность загрузки и выполнения образа после его перемещения из пзу в озу. Рисунок, пояснения

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

Процесс загрузки осуществляется следующим образом:

- Сжатый образ приложения копируется из ПЗУ в ОЗУ.

- Выполняются шаги инициализации, которые входят в процедуру распаковки.

- Загрузчик передает управление образу. Это осуществляется «перепрыгиванием» на начальный адрес инициализированного образа с помощью команды “jump”, детали которой зависят от используемого процессора. В сущности, команда “jump” устанавливает новое значение в счетчик команд.

- Как показано на Рисунке 15.1, участок памяти, который занимал загрузчик, используется заново. В частности, указатель стека переопределяется на этот участок (см. пунктирную линию) так, что участок памяти может быть использован в качестве стека для новой программы. Рабочее пространство памяти, использованное во время распаковки, также полностью становится доступным

Загрузчик по-прежнему остается доступным, поскольку он хранится в ПЗУ. То, что загрузчик остается доступным для дальнейшего использования – часто намеренное решение со стороны разработчика. Представьте ситуацию, в которой управляющая программа (монитор) встроена в загрузчик. Одна из частей процесса загрузки управляющей программы – установка обработчиков прерываний по умолчанию. Это особенно важно, поскольку во время разработки программы, разрабатываемая программа часто неполна и подвергается постоянным обновлениям. В таком случае, эта программа может оказаться неспособна обработать определенные системные прерывания и исключительные ситуации. Предпочтительно, чтобы по умолчанию монитор выполнял обработку в таких случаях. Например, программа не устанавливает обработчик исключений доступа к памяти и таким образом не обрабатывает возникающие исключительные ситуации. В таком случае, монитор возьмет на себя управление системой, если выполнение программы вызовет исключение, например, если программа аварийно завершит свою работу. Теперь разработчик может отладить и проследить последовательность выполнения программы, используя интерфейс монитора. Как отмечалось ранее, монитор позволяет разработчику изменять значение регистров процессора. Следовательно, как только ошибка найдена и создан новый образ программы, разработчик может изменить счетчик команд таким образом, чтобы он указывал на начальный адрес загрузчика в ПЗУ – в сущности, передать ему управление. В результате, загрузчик скачивает новый образ и заново инициализирует всю систему, без необходимости перезагрузки выключением-включением системы. Так же, еще одно преимущество выполнения кода загрузчика из ПЗУ состоит в том, что плохо работающая программа не сможет испортить код загрузчика в системах, в которых отсутствует блок управления памятью.

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