Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5. ЛЕКЦИОННЫЙ КОМПЛЕКС (1).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.03 Mб
Скачать

3. Функции доступа.

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

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

Рис. 7- Загрузка

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

Компоновщик получает в качестве входа набор объектных модулей и генерирует на их основе загружаемый модуль объединением множества модулей кода и данных для последующей передачи его загрузчику. В каждом объектном модуле могут иметься ссылки на память в других модулях. Каждая такая ссылка в нескомпонованном модуле может быть выражена только символьно. Компоновщик создает единый загружаемый модуль, который объединяет все отдельные о6ъектные модули. Kaждая ссылка из одного модуля в другой должна быть разрешена и транслирована из символьного адpeca в ссылку на ячейку памяти загружаемого модуля.

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

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

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