Существуют два основных подхода к обеспечению защиты оперативной памяти процесса от несанкционированного доступа со стороны других процессов.
Первый подход заключается в том, что при каждом обращении процессора к оперативной памяти осуществляется проверка корректности доступа. Теоретически этот подход позволяет создать абсолютно надежную защиту от несанкционированного доступа процесса к "чужой" памяти. Действительно, если выделить каждому процессу отдельную область памяти и блокировать, все обращения за ее пределы, доступ процесса к чужой памяти становится невозможным. Однако при этом станет практически невозможным и взаимодействие процессов. В применяемых на практике операционных системах значительная часть оперативной памяти, выделенной процессу, является разделяемой, т.е. доступной другим процессам. Например, в Microsoft Windows все копии выполняющейся программы разделяют общий код. Другими словами, код программы загружается в оперативную память один раз, и при запуске новых процессов, являющихся экземплярами той же программы, эти процессы получают доступ к области оперативной памяти, содержащей код программы. Таким образом, разные процессы имеют доступ к одной и той же памяти. Похожая ситуация имеет место и при использовании динамически подгружаемых библиотек. Если запретить подобное разделение памяти между процессами, требования операционной системы к объему оперативной памяти возрастут в несколько раз. Таким образом, при практическом применении рассматриваемого подхода разработчики операционной системы оказываются "между двух огней" - с одной стороны, необходимо организовать эффективные средства взаимодействия процессов, а с другой стороны - организовать эффективную защиту процессов от несанкционированных воздействий друг на друга. Эти требования взаимно противоречивы, и разработчики операционной системы вынуждены искать разумный компромисс между ними, некую "золотую середину".
Альтернативный подход к обеспечению защиты оперативной памяти заключается в выделении каждому процессу индивидуального адресного пространства, аппаратно изолированного от других процессов. При этом, по какому бы адресу оперативной памяти ни обратился процесс, он не сможет обратиться к памяти, выделенной другому процессу, поскольку одному и тому же значению адреса в разных адресных пространствах соответствуют разные физические адреса оперативной памяти. При практической реализации этого подхода необходимо, чтобы центральный процессор компьютера поддерживал логическую адресацию оперативной памяти, т.е. позволял бы обращаться к ячейкам памяти не по физическим адресам, а по неким виртуальным адресам, автоматически преобразуемым в физические незаметно для выполняющегося процесса. Подавляющее большинство современных процессоров поддерживают такую возможность. В частности, эту возможность поддерживают все процессоры, аппаратно поддерживающие использование программами виртуальной памяти.
Данный подход надежно защищает от случайных, обусловленных ошибками в программном обеспечении, обращений процессов к чужой оперативной памяти, но не всегда позволяет защититься от подобных обращений, предпринимаемых преднамеренно с целью несанкционированного доступа к чужому адресному пространству. Дело в том, что при данном подходе, так же как и при предыдущем
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.