Средства защиты памяти

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

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

Для защиты памяти в мультипрограммных компьютерах используются следующие способы.

Защита памяти по граничным адресам. Каждой программе выделяется область основной памяти, начинающаяся от ячейки с адресом G1. Предполагается, что различным программам супервизор выделяет непрекрывающиеся области. Адреса А команд и операндов, генерируемые в процессе выполнения программы, проверяются на корректность путем сравнения их с граничными адресами G1АG2 (G1<G2). Адрес некорректен, если А<G1 или А>G2. Проверка адресов производится схемой рис. 3.17, встраиваемой в процессор. При инициировании программы из слова состояния программы СПП (уровня прерывания) в процессор загружаются значения граничных адресов G1, G2. Адрес А, сформированный в программе, перед обращением к памяти сравнивается на меньше–больше с граничными адресами G1, G2. Если А<G1 или А>G2 формируется сигнал прерывания λ, по которому прекращается выполнение программы и управление передается супервизору, который выводит на печать информацию о команде, породившей некорректный адрес.


Если в компьютере используется страничная организация памяти, то программе выделяются области, состоящие из целого числа страниц. В этом случае границы G1, G2 определяются адресами страниц, которыми начинается и заканчивается область памяти. В m-разрядном адресе выделяются старшие разряды, представляющие адрес страницы, к которой производится обращение, и сравниваются с граничными значениями G1, G2 адресов страниц.

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

Защита памяти по ключам. При страничной организации памяти в компьютере общего назначения широко используется способ защиты информации по ключам. Ключ – это r-разрядный двоичный код. Например, могут использоваться 4-разрядные коды, которые позволяют сформировать 16 различных ключей 0,1,…,15. Ключи присваиваются программам и страницам памяти. Каждой программе присваивается свой ключ, называемый ключом программы. Этот же ключ присваивается всем страницам, выделенным программе. Ключи страниц хранятся в памяти ключей (рис. 3. 18): ключ К0 страницы 0 – в ячейке 0; ключ К1 страницы 1 – в ячейке 1 и т. д. Ключи записываются в память ключей супервизором в момент подготовки программы к выполнению. Для этого используется привилегированная операция Установить ключ памяти А, Р, где А – адрес ячейки, в которой хранится значение ключа; Р – адрес страницы, которой присваивается ключ. В результате выполнения этой команды странице Р, закрепленной за программой с ключом КП, присваивается ключ КП, который становится ключом страницы.

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

Чтобы супервизору был обеспечен доступ к любой области памяти и несколько программ могли использовать для обмена информацией общую область памяти, используется универсальный ключ 0, который присваивается супервизору и страницам, общим для нескольких программ. При сравнении ключа программы КП с ключом страницы КР, ключ 0 считается равным любому другому ключу. Поэтому, если один из ключей КП, КР имеет нулевой код, адрес считается корректным и сигнал прерывания λ не формируется.