Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0 и1.docx
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
282.53 Кб
Скачать

Барьерные адреса

Барьерный адрес указывает на начало пользовательской области памяти, отделяя ее от области памяти, в которой размещается программы АС и ее данные (как правило, это области младших адресов).

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

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

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

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

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

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