Similar presentations:
Размещение в памяти и выполнение программы. Тема 4
1. 4 Размещение в памяти и выполнение программы
2. 4.1 Загрузчик
= (loader) = программа, котораяпомещает программы в память и
готовит их к выполнению
3. 4.1.1 Общая схема загрузки (вариант 1: один модуль)
4. 4.1.1 Общая схема загрузки (вариант 2: несколько модулей)
5. 4.1.2 Загрузчик: функции
1. распределение ОП (ОЗУ)2. связывание модулей
3. перемещение программы
4. загрузка программ в ОП (ОЗУ)
5. запуск на выполнение
6. 4.1.2.1 Загрузчик : 1. распределение памяти
= выделение в памяти места дляпрограмм
7. 4.1.2.1 Загрузчик : 1. распределение памяти
при загрузке по фиксированным адресам8. 4.1.2.1 Загрузчик : 1. распределение памяти
= Слева и справа: подпрограмма SQRTразмещена с адреса 0100
= Слева: оттранслированная программа 1-го
пользователя размещена с адреса 1200
между модулями с памяти свободный
участок памяти
= Справа: оттранслированная программа 2-го
пользователя размещена с адреса 056F
перекрытие памяти !!!
9. 4.1.2.1 Загрузчик : 1. распределение памяти
этот процесс необходимоавтоматизировать
10. Загрузчик: 2. связывание
= связывание двух или болееотдельных оттранслированных
программ
= разрешение символических ссылок
между объектными программами
= машинно-зависимое свойство
загрузчика
11. Загрузчик: 2. связывание
12. 4.1.2.2 Загрузчик: 2. связывание
необходим механизм вызоваподпрограмм
1.
2.
Пометка символов как внешних
(обращение к ним в этой программе, а их
определения – в других)
Пометка символов как внутренних
(их определения в этой программе, а
обращение к ним – в других)
13. 4.1.2.2 Загрузчик: 2. связывание
3.4.
Выделение регистров для хранения адреса
вызываемой подпрограммы
Осуществление возврата в вызывающую
программу
+ . . . настройка передаваемых
параметров
= машинно-зависимое свойство
загрузчика
14. 4.1.2.3 Загрузчик: 3. перемещение
= модификация объектной программытак, чтобы она могла загружаться с
адреса, отличного от первоначального
= настройка всех величин в программе,
зависящих от физических адресов
(адресные константы) в соответствии с
адресом выделенной для программы
области памяти
15. 4.1.2.3 Загрузчик: 3. перемещение
16. 4.1.2.3 Загрузчик: 3. перемещение
Если внутри модулей имеютсяадресные константы, которые
вычисляются от начала модуля, то
адреса будут корректироваться
относительно «базы»
17. 4.1.2.3 Загрузчик: 3. перемещение
= перемещающие загрузчики(relocationg loader) или
относительные загрузчики (relative
loader) = загрузчики, обеспечивающие
перемещение программ
18. 4.1.2.4 Загрузчик: 4. загрузка
= физическое помещение машинныхкоманд и данных в память
19. 4.1.2.4 Загрузчик: 5. запуск на выполнение
= передача управления первойкоманде машинной программы ,
помещенной в ОЗУ
20. Загрузчик
• многие загрузчики обеспечиваютперемещение и связывание
• в некоторых системах функция
связывания отделена от функций
перемещения и загрузки связывание
выполняется специальной редактором
связей, перемещение и загрузка загрузчиком
21. 4.1.3 Схемы загрузки
= Сегмент = информация,рассматриваемая как единое целое,
независимо от того, идет ли речь о
программе или о данных
• обычно сегментом является
отдельная исходная или объектная
программа
22. 4.1.3 Схемы загрузки
• в ассемблерах и некоторых языкахпрограммирования можно задать
исходную программу, состоящую из
нескольких программных сегментов и
сегментов данных
23. 4.1.3 Схемы загрузки
1. Загрузчик типа «компиляция выполнение»2. Абсолютный загрузчик
3. Настраивающий загрузчик
4. Непосредственно связывающий
загрузчик
24. 4.1.3 Схемы загрузки
5.6.
7.
8.
Объединитель
Связывающий загрузчик
Перекрывающий загрузчик
Динамический объединитель
25. 4.1.3.1 Загрузчик типа «компиляция - выполнение»
26. 4.1.3.1 Загрузчик типа «компиляция - выполнение»
1. компилятор (Ассемблер), работая водной части ОЗУ, помещает
машинные команды и данные по
мере трансляции непосредственно в
выделенные для них ячейки памяти
27. 4.1.3.1 Загрузчик типа «компиляция - выполнение»
2.«загрузчик» состоит из одной
команды, которая передает
управление первой команде,
подлежащей выполнению
скомпилированной программы
28. 4.1.3.1 Загрузчик типа «компиляция - выполнение»
Недостатки:1. некоторая часть памяти не может
быть использована, так как занятая
транслятором память недоступна
для объектной программы.
29. 4.1.3.1 Загрузчик типа «компиляция - выполнение»
Недостатки:2. при каждом новом сеансе работы с
программой приходится заново
транслировать (ассемблировать)
программу пользователя
30. 4.1.3.1 Загрузчик типа «компиляция - выполнение»
Недостатки:3. затруднительно организовать
совместную работу нескольких
сегментов программы, если
исходные программы написаны на
разных языках
31. 4.1.3.1 Загрузчик типа «компиляция - выполнение»
Реализация функций:1. распределение – программист
2. связывание – программист
3. перемещение – транслятор
4. загрузка – транслятор
5. запуск на выполнение – «загрузчик»
32. 4.1.3.2 Общая схема загрузки (вариант 3)
(программы могут быть на разных языках)33. 4.1.3.2 Общая схема загрузки (вариант 3)
• можно организовать хранение результатовтрансляции на некотором внешнем носителе,
с тем чтобы загрузить их в память тогда, когда
понадобится выполнить полученную
программу
• при этом скомпилированная программа
может быть загружена в ту же область
памяти, которую раньше занимал транслятор
( трансляция уже будет завершена)
34. Общая схема загрузки
• использование объектной программы какпромежуточных данных приводит к
включению в СП загрузчика
• входные данные загрузчика: объектная
программа (скомпилированные машинные
команды, данные и другая информация)
• выходные данные загрузчика: машинные
команды и данные в форме, готовой для
выполнения ЭВМ, помещенные в ОЗУ
35. 4.1.3.2 Общая схема загрузки (вариант 3)
Преимущества:• загрузчик занимает меньше памяти,
чем транслятор у пользователя
оказывается большее количество
доступной памяти
• при повторном выполнении
программы нет необходимости в
перекомпилировании
36. 4.1.3.2 Общая схема загрузки (вариант 3)
Преимущества:• если все трансляторы имеют единый
формат объектной программы и
используют одинаковые соглашения о
связях, возможно писать подпрограммы
на различных языках (язык объектных
программ общий)
37. 4.1.3.2 Общая схема загрузки (вариант 3)
Преимущества:• если все трансляторы имеют единый
формат объектной программы и
используют одинаковые соглашения о
связях, возможно писать подпрограммы
на различных языках (язык объектных
программ общий)
38. 4.1.3.3 Абсолютный загрузчик
39. 4.1.3.3 Абсолютный загрузчик
• транслятор выводит результатытрансляции исходной программы
почти в такой же форме, как при
использовании схемы «компиляциявыполнение»
• но результаты трансляции выводятся
в файл объектной программы, а не в
ОП
40. 4.1.3.3 Абсолютный загрузчик
• загрузчик считывает текст программына машинном языке и помещает его в
ОП по адресу, заданную транслятором
41. 4.1.3.3 Абсолютный загрузчик
Преимущества:• обеспечивает большее количество ОП,
доступной пользователю ( во время
загрузки транслятор уже не находится
в памяти)
• простота реализации
42. 4.1.3.3 Абсолютный загрузчик
Недостатки:• программист должен указать транслятору
адрес загрузки готовой программы
• если имеется ряд подпрограмм,
программист должен помнить абсолютный
адрес каждой из них и использовать эти
адреса в явном виде для связывания
подпрограмм
43. 4.1.3.3 Абсолютный загрузчик
Реализация функций:1. распределение – программист
2. связывание – программист
3. перемещение – транслятор
4. загрузка – загрузчик
5. запуск на выполнение – загрузчик
44. 4.1.3.3 Абсолютный загрузчик
Не подходит:• для многозадачных ОС
• для использования в библиотеках
стандартных подпрограмм
45. 4.1.3.3 Абсолютный загрузчик
Домашнее задание:Записать алгоритм работы
абсолютного загрузчика
Бек Л. Введение в системное программирование. М.: Мир, 1988
46. 4.1.3.4 Настраивающий загрузчик
Назначение:• избежать необходимости повторной
трансляции всех подпрограмм при
внесении изменения в одну из них
• освободить программиста от задач
распределения памяти и осуществления
связи подпрограмм
47. 4.1.3.4 Настраивающий загрузчик
Пример:• загрузчик подпрограмм в двоичносимволической форме (BSS-загрузчик)
• допускает наличие в программе
нескольких программных сегментов и
только одного сегмента данных
(общего сегмента)
48. 4.1.3.4 Настраивающий загрузчик
• транслятор компилирует каждыйпрограммный сегмент независимо и
передает загрузчику текст и
информацию о перемещениях и
перекрестных ссылках между
сегментами
49. 4.1.3.4 Настраивающий загрузчик
Выходные данные транслятора:1. вектор переходов
2. объектная программа
3. индикаторы переместимости
+
4. общая длина программы
5. длина вектора переходов
50. 4.1.3.4 Настраивающий загрузчик
Вектор переходов:= информация обо всех других
программах, к которым в данной
программе имеются обращения
• записывается перед текстом
объектной программы
51. 4.1.3.4 Настраивающий загрузчик
индикаторы (биты) переместимости =разряд перемещения:
= информация о ячейках, содержимое
которых зависит от расположения
программы в памяти (они должны
быть изменены при необходимости
загрузки программы в произвольное
место памяти)
52. 4.1.3.4 Настраивающий загрузчик
53. 4.1.3.4 Настраивающий загрузчик
Пример:Пусть подпрограмма B является первой
по порядку вызываемой
подпрограммой программы A
1. Работа транслятора:
• первая ячейка вектора переходов
содержит символическое имя B
54. 4.1.3.4 Настраивающий загрузчик
• команда (оператор/ инструкция),содержащее вызов подпрограммы B,
транслируется в команду перехода,
указывающую адрес элемента
вектора переходов, связанного с
подпрограммой B
55. 4.1.3.4 Настраивающий загрузчик
2. Работа загрузчика:1. загружает в память объектную
программу A и вектор переходов
2. загружает в память каждую
подпрограмму из вектора переходов
(B), используя информацию о длине
программы A
56. 4.1.3.4 Настраивающий загрузчик
2. Работа загрузчика:3. в каждый элемент вектора переходов
помещает команду перехода к
соответствующей подпрограмме
57. 4.1.3.4 Настраивающий загрузчик
2. Работа загрузчика:вызов подпрограммы B приведет к
выполнению команды перехода к
первой ячейке вектора переходов, в
которой будет находиться команда
перехода к вызываемой
подпрограмме B
58. 4.1.3.4 Настраивающий загрузчик
используется:• в ЭВМ с фиксированным (единым)
форматом команд и
непосредственной адресацией (адрес
операнда явно указывается в команде,
базовые регистры не используются)
59. 4.1.3.4 Настраивающий загрузчик
при перемещении программнеобходимо вносить изменения в
адресную часть каждой команды,
перемещение программ намного
сложнее
60. 4.1.3.4 Настраивающий загрузчик
Решение проблемы перемещения:1. Работа транслятора:
• с каждой командой или полем адреса
связывает специальный двоичный
разряд
61. 4.1.3.4 Настраивающий загрузчик
Решение проблемы перемещения:1. Работа транслятора:
• если поле адреса подлежит настройке,
бит устанавливается в единицу, иначе в
нуль
• эти биты переместимости
помещаются в объектную программу
62. 4.1.3.4 Настраивающий загрузчик
Решение проблемы перемещения:2. Работа загрузчика:
• используя значения битов
переместимости, изменяет
содержимое полей адреса в
соответствии с начальным адресом
программы
63. 4.1.3.4 Настраивающий загрузчик
BSS-загрузчик автоматически выполняетвсе 5 функций загрузчика, при этом:
• для распределения – информация о
длине программы
• для перемещения – биты
переместимости
64. 4.1.3.4 Настраивающий загрузчик
Недостатки:1. вектор переходов не вполне удобен
для загрузки и сохранения внешних
данных (расположенных в другом
программном сегменте)
2. вектор переходов увеличивает
размер объектной программы
65. 4.1.3.4 Настраивающий загрузчик
Недостатки:3. работает с программными
сегментами, но не облегчает доступ
к сегментам данных, которые могут
совместно использоваться
несколькими подпрограммами
66. 4.1.3.4 Настраивающий загрузчик
Устранение недостатка 3:1. использовать общий сегмент данных
2. расширения поля битов
переместимости до двух разрядов:
• 01 - перемещение по отношению к
программному сегменту
67. 4.1.3.4 Настраивающий загрузчик
• 10 - перемещение по отношению кадресу общего сегмента данных
• 00 или 11 – при перемещении не
требуется модификация
68. 4.1.3.5 Непосредственно связывающий загрузчик
• наиболее полно обеспечиваетвозможность перемещения в памяти
программ и данных
• является наиболее распространенным
69. 4.1.3.5 Непосредственно связывающий загрузчик
Преимущество:• допускает использование большого числа
программных сегментов и сегментов данных
обеспечивает гибкие перекрестные
обращения между сегментами и возможности
доступа
допускает независимую трансляцию
программ
70. 4.1.3.5 Непосредственно связывающий загрузчик
Транслятор должен передать загрузчику:1. длину каждого сегмента программы
или данных
2. словарь внешних символов (ESD)
3. объектные коды оттранслированной
программы (TXT)
71. 4.1.3.5 Непосредственно связывающий загрузчик
4. словарь перемещаемых символов (RLD)5. адрес, с которого должно начинаться
выполнение программы, если она не
вызывается другой программой, а
является «главной»
72. 4.1.3.5 Непосредственно связывающий загрузчик
Словарь внешних символов (ESD) :1. список всех символов сегмента, к
которым возможно обращение из других
сегментов, и их относительные адреса
внутри сегмента
2. список всех символов, не определенных
в сегменте, к которым есть обращения
внутри сегмента
73. 4.1.3.5 Непосредственно связывающий загрузчик
Словарь внешних символов (ESD) :для программ, к которым возможно
обращение извне:
1. тип («определение сегмента»)
2. относительный адрес
3. длина (в байтах)
74. 4.1.3.5 Непосредственно связывающий загрузчик
Словарь внешних символов (ESD) :• для локальных имен:
1. тип («местное определение»)
2. относительный адрес
75. 4.1.3.5 Непосредственно связывающий загрузчик
Словарь внешних символов (ESD) :• для внешних имен:
1. тип («внешняя ссылка»)
76. 4.1.3.5 Непосредственно связывающий загрузчик
Объектные коды оттранслированнойпрограммы (TXT):
• машинные коды, полученные в
результате трансляции исходной
программы, и приписанные им
относительные адреса (по аналогии с
абсолютным загрузчиком)
77. 4.1.3.5 Непосредственно связывающий загрузчик
Словарь перемещаемых символов (RLD):• информация о расположении
адресных констант в сегменте и
описание того, каким образом должны
изменяться их значения
78. 4.1.3.5 Непосредственно связывающий загрузчик
Словарь перемещаемых символов (RLD):1.адрес каждой константы, которая должна
изменяться при перемещении программы
2.указание на символ, значение которого
определяет величину изменения константы
3.операцию, с помощью которой вносится
изменение (+ / -)
79. 4.1.3.5 Непосредственно связывающий загрузчик
Словарь перемещаемых символов (RLD):• процесс корректировки адресных
констант для внутренних символов,
называют перемещением
• процесс определения содержимого
адресных констант для внешних
символов называют связыванием
80. 4.1.3.5 Непосредственно связывающий загрузчик
Словарь перемещаемых символов (RLD):• используется в обоих случаях
его называют словарь перемещения и
связывания
81. 4.1.3.5 Непосредственно связывающий загрузчик
Работа загрузчика в 2 просмотра:1. назначение адресов внешним
ссылкам
2. фактические связывание,
перемещение и загрузка
82. 4.1.3.5 Непосредственно связывающий загрузчик
Реализация функций:1. распределение – загрузчик
2. связывание – загрузчик
3. перемещение – загрузчик
4. загрузка – загрузчик
5. запуск на выполнение – загрузчик
83. 4.1.3.5 Непосредственно связывающий загрузчик
Недостатки:1. необходимость при каждом
выполнении программы повторно
выполнять все функции загрузчика
для всех необходимых подпрограмм
таких подпрограмм могут быть десятки
и сотни процесс загрузки приводит
к затратам времени
84. 4.1.3.5 Непосредственно связывающий загрузчик
Недостатки:2. хотя загрузчик и занимает меньше
места, чем транслятор, но он требует
выделения значительного места в
памяти
85. 4.1.3.6 Общая схема загрузки (вариант 4)
86. 4.1.3.6 Общая схема загрузки (вариант 4)
Для устранения этих недостатков:выполнения загрузки с помощью двух
самостоятельных программ:
1. объединителя
2. загрузчика модуля
87. 4.1.3.7 Объединитель
1. Объединитель:= программа, которая выполняет те же
самые функции, что и непосредственно
связывающий загрузчик по
объединению подпрограмм, но
настроенный и связанный текст
помещает не в ОП, а файл загрузочного
модуля
88. 4.1.3.7 Объединитель
= загрузочный модуль = имеет формат,допускающий загрузку программы в ОП
для выполнения
89. 4.1.3.7 Объединитель
2. Загрузчик модуля:= реализует функции:
• загрузки
• запуска
= это может быть настраивающий
(перемещающий) загрузчик
90. 4.1.3.7 Объединитель
Два основных класса:1. построитель образа памяти
2. редактор связей
91. 4.1.3.6 Объединитель: построитель образа памяти
• простейший тип объединителя• вырабатывает загрузочный модуль,
похожий на файл, создаваемый
абсолютным загрузчиком
привязка программы к конкретным
адресам памяти выполняется в
процессе объединения подпрограмм
92. 4.1.3.7 Объединитель: построитель образа памяти
• загрузочный модуль такого типавыглядит как моментальная фотография
(образ памяти), его называют модулем
образа памяти, а объединитель построитель образа памяти
93. 4.1.3.7 Объединитель: построитель образа памяти
Преимущества:• относительно прост
• обеспечивает высокое быстродействие
94. 4.1.3.7 Объединитель: построитель образа памяти
Реализация функций:1. распределение – объединитель
2. связывание – объединитель
3. перемещение – объединитель
4. загрузка – загрузчик
5. запуск на выполнение – загрузчик
95. 4.1.3.8 Связывающий загрузчик = редактор связей
• выполняет только связывание объектныхмодулей и подпрограмм
• сохраняет информацию, необходимую
для перемещения модуля в памяти
загрузочный модуль как единое целое
может затем настраиваться и
загружаться в произвольное место ОП
96. 4.1.3.8 Связывающий загрузчик = редактор связей
загрузчик модуля должен такжевыполнять функции распределения
памяти и перемещения
97. 4.1.3.8 Связывающий загрузчик = редактор связей
Преимущества:• обеспечивает большую гибкость при
распределении, памяти и загрузке, чем
построитель образа памяти
Недостаток:
• более сложен, чем построитель образа
памяти
98. 4.1.3.8 Связывающий загрузчик = редактор связей
Реализация функций:1. распределение – загрузчик
2. связывание – объединитель
3. перемещение – загрузчик
4. загрузка – загрузчик
5. запуск на выполнение – загрузчик
99. Объединитель
Преимущество (построитель образапамяти и редактор связей):
• программы, которые предполагается
использовать многократно,
обрабатываются только один раз, после
чего могут быть загружены тогда, когда
это потребуется
100. 4.1.3.9 Динамическая загрузка
• схемы загрузки 1-6 предполагают, чтовсе необходимые подпрограммы
загружаются в память одновременно
• если общее количество требуемой
всеми подпрограммами памяти
превышает размер доступной ОП,
возникают затруднения
101. 4.1.3.9 Динамическая загрузка
существуют аппаратные методы длярешения этой задачи (страничная
организация и сегментация)
рассмотрим традиционную схему
динамической загрузки с
последовательным использованием
объединителя и загрузчика
102. 4.1.3.10 Перекрывающий загрузчик
• обычно разные подпрограммы однойпрограммы требуются в разное время
(например, фазы анализа и генерации
кода в компиляторе взаимно исключают
друг друга)
103. 4.1.3.10 Перекрывающий загрузчик
• используя явное определение того,какая подпрограмма содержит
обращения к другим подпрограммам,
можно задать так называемую
структуру с перекрытием (оверлейную
структуру), которая указывает на
взаимоисключающие подпрограммы
104. 4.1.3.10 Перекрывающий загрузчик
Пример:•A вызывает B,D
•B вызывает C,E
•D вызывает E
•C,E не вызывают
всего 100К
105. 4.1.3.10 Перекрывающий загрузчик
Пример:никогда
не выполняются
одновременно:
• ВиD
• СиЕ
106. 4.1.3.10 Перекрывающий загрузчик
Как уменьшить требуемое количествопамяти?
загрузить в память только те
процедуры, которые в действительности
могут быть использованы в некоторый
конкретный момент времени
107. 4.1.3.10 Перекрывающий загрузчик
всего 70К (определено по самой длиннойветви структуры с перекрытием)
108. 4.1.3.10 Перекрывающий загрузчик
распределение памятидля всех подпрограмм
в структуре с перекрытием
Необходимо: загрузчик
модуля загружает различные
подпрограммы по мере
необходимости
109. 4.1.3.10 Перекрывающий загрузчик
= супервизор перекрытий =та часть загрузчика, которая принимает
запросы и загружает необходимые
подпрограммы
110. 4.1.3.10 Перекрывающий загрузчик
Реализация функций:1. распределение – загрузчик
2. связывание – объединитель
3. перемещение – загрузчик
4. загрузка – загрузчик
5. запуск на выполнение – загрузчик
111. 4.1.3.11 Динамический объединитель
Недостатки схем 1-7:1. если к некоторой подпрограмме
имеется обращение, а она не
используется при выполнении
программы, загрузчик все равно
выполняет работу по связыванию этой
подпрограммы с основной
программой
112. 4.1.3.11 Динамический объединитель
2. требуют от программиста явногоуказания тех подпрограмм, которые
могут потребоваться
113. 4.1.3.11 Динамический объединитель
Для устранения недостатков:динамическое связывание =
= механизм, с помощью которого загрузка
и связывание по внешним ссылкам
откладываются до выполнения
программы
114. 4.1.3.11 Динамический объединитель
транслятор вырабатывает текст и
информацию для объединения и
настройки адресов исходной
программы
загрузчик загружает только основную
программу
115. 4.1.3.11 Динамический объединитель
когда основная программа выполняет
команды перехода по внешним
адресам или обращается к внешним
переменным, вызывается загрузчик
загрузчик выполняет загрузку в память
сегмента, содержащего внешний
адрес, к которому было сделано
обращение
116. 4.1.3.11 Динамический объединитель
Преимущества:• в ОП загружаются только те сегменты
программ или данных, к которым
действительно происходит обращение
• возможна динамическая
реконфигурация системы
117. 4.1.3.11 Динамический объединитель
Недостаток:• дополнительные затраты и сложности,
связанных с переносом большей части
процесса связывания на время
выполнения программы
118. 4.1.3.11 Динамический объединитель
Реализация функций:1. распределение – загрузчик
2. связывание – загрузчик
3. перемещение – загрузчик
4. загрузка – загрузчик
5. запуск на выполнение – загрузчик
119. О терминологии
Бек Л. называет:• «связывающим загрузчиком»
непосредственно связывающий
загрузчик, а не «редактор связей»
• «перемещающим загрузчиком»
настраивающий загрузчик