Аппаратная защита памяти и процессора
В целях совместного использования системных ресурсов (памяти, процессора, внешних устройств) несколькими программами, требуется, чтобы аппаратура и операционная система обеспечили невозможность влияния некорректно исполняемой программы на другие пользовательские программы. Для этого необходима аппаратная поддержка, как минимум, двух режимов исполнения программ – пользовательского (непривилегированного ) режима ( user mode ) –для выполнения программ пользователей – и системного ( привилегированного , режима ядра - system mode , monitor mode )- для модулей операционной системы. Идея двух режимов в том, чтобы выполняемые в привилегированном режиме модули ОС могли выполнять распределение и выделение системных ресурсов, в частности, формировать новые адреса, а пользовательские программы, в результате ошибок или преднамеренных атак, выполняясь в обычном режиме, не могли бы обратиться в область памяти операционной системы или другой задачи, изменять их и этим нарушать их целостность. Для определения текущего режима выполнения команд в аппаратуре вводится бит режима, равный 0 для системного и 1 – для пользовательского режима. При прерывании или сбое аппаратура автоматически переключается в системный режим. Некоторые привилегированные команды, изменяющие системные ресурсы и состояние системы (например, регистр состояния процессора), должны выполняться только в системном режиме, что защитит системные ресурсы от случайной или преднамеренной порчи при выполнении этих команд обычной пользовательской программой.
Для защиты ввода-выводавсе команды ввода-вывода считаются привилегированными. Необходимо гарантировать, чтобы пользовательская программа никогда не получила управление в системном режиме и, в частности, не могла бы записать новый адрес в вектор прерываний, который, как уже отмечалось, содержит адреса подпрограмм обработки прерываний, в частности, связанных со вводом-выводом.
Использование системного вызова для выполнения ввода-вывода иллюстрируется на рис.7.
Рис. 7.Использование системного вызова для выполнения ввода-вывода.
На схеме системный вызов номер nвызывает программируемое прерывание (trap), вызывается ОС в привилегированном режиме, и по номеру системного вызова определяется операция ввода-вывода, которая должна быть выполнена по данному прерыванию. Затем в привилегированном режиме выполняется операция ввода-вывода, после чего происходит прерывание и возврат в пользовательскую программу, выполняемую в обычном режиме.
Для защиты памятинеобходимо обеспечить защиту, по крайней мере, для вектора прерываний и подпрограмм обслуживания прерываний. Например, недопустимо разрешить пользовательской программе формировать в обычном режиме произвольный адрес и обращаться по нему, так как при этом может быть нарушена целостность системных областей памяти. Чтобы этого избежать, в аппаратуре вводятся два регистра, которые отмечают границы допустимой области памяти, выделенной пользовательской программе. Это базовый регистр (base register),содержащий начальный адрес области памяти, выделенной пользовательской программе, и регистр границы (limit register),содержащий размер пользовательской области памяти. Память вне отмеченного диапазона считается защищенной, т.е. обращения к ней из пользовательской программы не допускаются (при попытке такого обращения возникает прерывание).
Использование базового регистра и регистра границы иллюстрируется на рис. 8.
Рис. 8.Использование регистра базы и регистра границы для защиты памяти
На схеме заданию 2 выделена область памяти, начиная с адреса 300040 (хранящегося в регистре базы), длиной 120900 (хранящейся в регистре границы), т.е. по адрес 420939 включительно. Обращение, например, по адресу 420940 из программы задания 2 приводит к прерыванию как недопустимое – срабатывает защита памяти.
Схема аппаратной защиты адресов памяти иллюстрируется рис. 9.
Рис. 9.Схема аппаратной защиты адресов памяти