Управление памятью. Настройка адресов и защита

Настройка адресов и защита

Допустим, первая команда программы представляет собой вызов процедуры по абсолютному адресу 100 внутри двоичного файла. Если программа загрузится в раздел 1, то команда обратится к абсолютному адресу 100, находящемуся внутри ОС, а правильная процедура находится по адресу 100к + 100. Эта проблема известна как проблема перемещения программ в памяти или настройка адресов.

Одним из возможных решений является модификация команд при загрузке программ в памяти. К каждому адресу будет добавляться абсолютный адрес раздела. Для выполнения такой настройки компоновщик должен присоеденить к программе список слов, которые являются адресами и подлежат модификации. Настройка адресов во время загрузки не решает проблему защиты. Вредоносная программа может создать новую команду с абсолютным адресом и перейти в другой раздел. Не существует стандартных средств, способных запретить программе обращения к любому слову в памяти. В качестве решения IBM разделила память на блоки по 2кб и назначила каждому блоку 4-битовый защитный код. Регистр PSW (Programm Status/Security Word) содержит 4-битовый ключ. Аппаратура перехватывает все попытки обратиться к любой части памяти, чей защитный код отличался от значения регистра PSW работающего процесса.

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

24. Управление памятью. Многозадачность с динамическими разделами. Основная подкачка.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: