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

Защита памяти

В Windows NT существует четыре формы защиты памяти. Первые три встреча­ются в большинстве современных ОС:

• Отдельное адресное пространство для каждого процесса. Аппаратура не позволяет потоку обращаться по виртуальным адресам другого процесса.

• Два режима работы: режим ядра, в котором потоки имеют доступ к си­стемному коду и данным, и пользовательский режим, потоки которого такого доступа не имеют.

• Механизм постраничной защиты. С каждой виртуальной страницей связан набор флажков, определяющий, какие типы доступа к ней разре­шены в пользовательском режиме и в режиме ядра.

Следующий механизм, уникальный для Windows NT, обеспечивает еще одну форму защиты памяти:

• Пообъектная защита памяти. Всякий раз, когда процесс открывает опи­сатель объекта—секции или отображает проекцию секции, справочный монитор защиты Windows NT проверяет, имеет ли процесс, пытающий­ся выполнить операцию, соответствующие права доступа.

48. Собственная память процесса. Совместное использование памяти. Собственная память процесса

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

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

Аппаратная страничная защита действует при всяком обращении потока к памяти. Например, на процессоре MIPS R4000 каждая страница виртуальной па­мяти — это либо страница пользовательского режима (нижние 2 Гбайт), либо страницей режима ядра (верхние 2 Гбайт); она также имеет признак "только чтение" либо "чтение/запись". Если поток исполняется в режиме ядра, то про­цессор позволяет ему читать любую действительную страницу памяти и изме­нять действительные страницы с признаком "чтение/запись". В пользовательс­ком режиме поток может обращаться только к действительным страницам пользовательского режима и модифицировать те из них, которые имеют при­знак "чтение/запись". MIPS R4000 генерирует страничную ошибку при обраще­нии к недействительной (отсутствующей в памяти) странице. При попытке чте­ния или записи действительной страницы с нарушением описанных выше пра­вил он генерирует исключение адресной ошибки (нарушение доступа).

Аппаратура может контролировать доступ только для действительных страниц — тех, которые присутствуют в памяти. Если поток обращается к недей­ствительной странице (той, которой в памяти нет), MIPS R4000 генерирует стра­ничную ошибку и в дело вступает программное обеспечение подкачки страниц диспетчера виртуальной памяти.

Диспетчер виртуальной памяти обеспечивает те же виды защиты, которые MIPS R4000 предоставляет для действительных страниц:

• только чтение;

• чтение/запись;

а также предоставляет несколько собственных:

• только исполнение (если есть аппаратная поддержка);

• сторожевая страница;

• нет доступа;

• копирование при записи.

Используя базовые сервисы виртуальной памяти, подсистема среды может управлять страничной защитой личных страниц. Управление защитой страниц может повысить надежность программ, гарантируя, что потоки не модифициру­ют страницы "только для чтения". Эта возможность также полезна, например, при отладке многопоточной программы, один из потоков которой выполняет ошибочную запись в память. Временно изменив защиту соответствующей стра­ницы на "только чтение" или "нет доступа", отладчик может перехватить невер­ную операцию потока и локализовать ошибку.

Поток не может выполнять ни чтение, ни запись страницы "только испол­нение", однако он может перейти по адресу на этой странице и начать выполне­ние. Этот тип защиты подходит для совместно используемого кода приложения, например редактора или компилятора. Все потоки должны иметь возможность выполнения данного кода, но никто не должен иметь права читать или изменять исполняемый образ. (Обратите внимание, что ни MIPS R4000, ни Intel 386 или 486 не поддерживают такой тип защиты. Таким образом, на этих процессорах доступ для исполнения эквивалентен доступу "только для чтения".)

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

Защита страницы "нет доступа" используется, чтобы предотвратить чтение или запись данной страницы. При доступе к такой странице диспетчер вирту­альной памяти генерирует исключение. Он назначает такой тип защиты страни­цам, которые не были выделены или были зарезервированы, но не переданы. Тип защиты "нет доступа" используется в основном отладчиками.

Подсистема Win32 обеспечивает приложениям Win32 доступ к средствам защиты страниц диспетчера виртуальной памяти посредством функции API VirtualProtect(). Эта функция позволяет приложениям помечать виртуальные страницы как “только для чтения”, ”чтение/запись” или “нет доступа” . Не обеспечивается защита вида ”сторожевая страница”, “только исполнение” и “компилирование при записи”.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]