Отображение адресного пространства программы на основную память
Алгоритмы распределения, использования, освобождения ресурсов и представления к ним доступа предназначены для наиболее эффективной организации работы всего комплекса устройств ЭВМ. Рассмотрим их на примере управления основной памятью. Для выполнения программы при ее загрузке в основную память ей выделяется часть машинных ресурсов — они необходимы для размещения команд, данных, управляющих таблиц и областей ввода-вывода, т.е. производится трансляция адресного пространства откомпилированной программы в местоположение в реальной памяти. Выделение ресурсов может быть осуществлено самим программистом (особенно, если он работает на языке, близком машинному), но может производиться и операционной системой. Если выделение ресурсов производится перед выполнением программы, такой процесс называется статическим перемещением, в результате которого программа «привязывается» к определенному месту в памяти вычислительной машины. Если же ресурсы выделяются в процессе выполнения программы, это называется динамическим перемещением, и в этом случае программа не привязана к определенному месту в реальной памяти. Динамический режим можно реализовать только с помощью операционной системы. При статическом перемещении могут встретиться два случая: • реальная память больше требуемого адресного пространства программы. В этом случае загрузка программы в реальную память производится, начиная с 0-го адреса (рис. 4.2). Рис. 4.2. Загрузка программы в избыточную реальную память Загружаемая программа А является абсолютной программой, так как никакого изменения адресов в адресном пространстве, подготовленном компилятором, при загрузке в основную память не происходит — программа располагается с 0-го адреса реальной памяти;
· реальная память меньше требуемого адресного пространства программы (рис. 4.3). В этом случае программист (или операционная система) вынужден решать проблему, как организовать выполнение программы. Методов решения проблемы существует несколько: можно создать оверлейную структуру (т.е. разбить программу на части, вызываемые в ОП по мере необходимости), сделать модули программы реентерабельными (т.е. допускающими одновременную работу модуля по нескольким обращениям из разных частей программы или из различных программ) и т. д. Рис. 4.3. Загрузка программы в реальную память при недостатке памяти
В некоторых операционных системах адреса откомпилированной (с 0-го адреса) программы могут быть преобразованы в адреса реальной памяти, отличные от 0. При этом создается абсолютный модуль, который требует размещения его в памяти всегда с одного и того же адреса. При мультипрограммном режиме, если имеем программы А, В и С, для которых известно, что программа А выполняется при размещении в памяти с адреса 60 Кбайт до 90 Кбайт, В — с 60 Кбайт до 90 Кбайт, С — с 50 Кбайт до 120 Кбайт, организовать их совместное выполнение невозможно, так как им необходим один и тот же участок реальной памяти. Эти программы будут ждать друг друга либо их нужно заново редактировать с другого адреса. При работе в мультипрограммном режиме может сложиться ситуация, когда между программами образуются незанятые участки памяти. На рис. 4.4 общий объем незанятой памяти, составляющий 50 Кбайт, достаточен, чтобы загрузить и программу D, находящуюся в ожидании. Но ее не удается загрузить, так как свободные участки памяти не являются смежными. Такое состояние называется фрагментацией реальной памяти. Оно характерно для систем со статическим перемещением.
Рис. 4.4. Фрагментация реальной памяти В системах с динамическим перемещением программ перемещающий загрузчик размещает программу в свободной части памяти (рис. 4.5) и допускает использование ее несмежных участков. В этом случае имеется больше возможностей для организации мультипрограммной работы, а следовательно, и для более эффективного использования временных ресурсов ЭВМ.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|