Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет. ук. лаб. АСВК..doc
Скачиваний:
23
Добавлен:
20.11.2018
Размер:
26.21 Mб
Скачать

2.2. Понятие адресного пространства.

Алгоритмы распределения, использования, освобождения ресурсов и предоставления к ним доступа предназначены для наиболее эффективной организации работы всего комплекса устройств ЭВМ. Рассмотрим их на примере управления основной памятью.

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

Выделение ресурсов может быть осуществлено самим программистом (особенно если он работает на языке, близком машинному), но может производиться и операционной системой.

Если выделение ресурсов производится перед выполнением программы, такой процесс называется статическим перемещением, в результате которого программа “привязывается” к определенному месту в памяти вычислительной машины. Если же ресурсы выделяются в процессе выполнения программы, это называется динамическим перемещением, в этом случае программа не привязана к определенному месту в реальной памяти. Динамический режим можно реализовать только с помощью операционной системы.

При статическом перемещении может встретиться два случая. 1. Реальная память больше требуемого адресного пространства программы. В этом случае загрузка программы в реальную память производится, начиная с 0-го адреса (рис.4.2).

Рис.1. Загрузка программы в реальную память (объем реальной памяти больше адресного пространства программы)

Загружаемая программа А является абсолютной программой, так как никакого изменения адресов в адресном пространстве, подготовленном компилятором, при загрузке в основную память не происходит - программа располагается с 0-го адреса реальной памяти.

2. Реальная память меньше требуемого адресного пространства программы (рис2).

Рис.2. Загрузка программы в реальную память (объем реальной памяти меньше адресного пространства программы)

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

Рис. 3. Фрагментация реальной памяти

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

При мультипрограммном режиме, если имеем программы А, В и С, для которых известно, что программа А выполняется при размещении в памяти с адреса 60 Кбайт до 90 Кбайт, В - с 60 Кбайт до 90 Кбайт, С - с 50 Кбайт до 120 Кбайт, организовать их совместное выполнение невозможно, так как им необходим один и тот же участок реальной памяти. Эти программы будут ждать друг друга либо их нужно заново редактировать с другого адреса.

При работе в мультипрограммном режиме может сложиться ситуация, когда между программами образуются незанятые участки памяти. На рис.4.4

Рис.4. Размещение программы в свободной части ОП

общий объем незанятой памяти, составляющий 50 Кбайт, достаточен, чтобы загрузить и программу D, находящуюся в ожидании. Но ее не удается загрузить так как свободные участки памяти не являются смежными. Такое состояние называется фрагментацией реальной памяти. Оно характерно для систем со статическим перемещением.

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

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

К основным способам логической организации памяти относятся адресная, ассоциативная и стековая организации.

В случае адресной организации размещение и поиск информации в ЗМ основаны на использовании адреса хранения слова - номера ячейки ЗМ.

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

Стековая. Как и ассоциативная - безадресная стековая память - одномерный массив ячеек. Запись/выборка производится по дисциплине “последний пришел - первым обслужен” (LIFO).

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

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

Аи = Аб + Ак

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