Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os_a_win.doc
Скачиваний:
15
Добавлен:
17.11.2019
Размер:
715.26 Кб
Скачать

Атрибуты защиты страниц памяти

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

  • PAGE_NOACCESS: попытки записи, чтения или выполнения кода с этой страницы вызовут нарушение доступа;

  • PAGE_READONLY: разрешено чтение; попытки записи или выполнения кода с этой страницы вызовут нарушение доступа;

  • PAGE_READWRITE: разрешено чтение и запись, попытка выполнения кода с этой страницы вызовет нарушение доступа.

Следующие атрибуты защиты доступны начиная с ОС Windows 2000:

  • PAGE_EXECUTE: разрешено выполнение кода, попытки записи или чтения вызовут нарушение доступа;

  • PAGE_EXECUTE_READ: разрешено выполнение кода и чтение, попытки записи вызовут нарушение доступа;

  • PAGE_EXECUTE_READWRITE: разрешено выполнение любых операций;

  • PAGE_WRITECOPY: разрешено чтение и запись данных со страницы, попытки выполнения кода с этой страницы вызовут нарушение доступа. При записи на страницу для процесса будет создана индивидуальная копия страницы.

  • PAGE_EXECUTE_WRITECOPY: разрешены все операции, при записи создается индивидуальная копия.

32-х битные процессоры Intel до последнего времени не поддерживали режим защиты PAGE_EXECUTE, поэтому, хотя такой режим и был предусмотрен в Windows, реальное использование его было невозможно, разрешение выполнения было эквивалентно разрешению чтения. С появлением аппаратной поддержки этого бита, появилась возможность и его использования на практике. Windows поддерживает этот режим начиная с Windows XP Service Pack 2 и Windows Server 2003 Service Pack 1.

Атрибут «копирование при записи» позволяет эффективно использовать физическую память при работе с одинаковыми данными нескольких процессов. В этом случае изначально все процессы работают с одной страницей физической памяти, но если один из них попытается модифицировать на ней данные, то ему будет предоставлена копия страницы, на которой и будут произведены изменения. Далее этот процесс будет работать уже со своей отдельной страницей.

Кроме рассмотренных атрибутов имеются также специальные флаги, которые могут быть добавлены к атрибутам защиты. Флаги PAGE_NOCACHE и PAGE_WRITECOMBINE как правило, используются при разработке драйверов. Флаг PAGE_GUARD позволяет процессу получать уведомления (через механизм исключений) в момент, когда происходит попытка записи на страницу.

Windows 2000 использует предварительное резервирование и флаг PAGE_GUARD для эффективной работы со стеком. Максимальный размер стека потока указывается в исполнимом файле. Однако реальный размер стека может быть меньше, чем максимальный. Для экономии физической памяти Windows поступает следующим образом:

  • при создании стека для него резервируется регион, соответствующий максимальному размеру;

  • исходно, физическая память выделяется только для первых двух страниц стека, причем для второй устанавливается флаг PAGE_GUARD;

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

Таким образом, для стека выделяется только то количество оперативной памяти, которое реально необходимо.

Address Windowing Extensions

Выделение и использование памяти через функции AWE осуществляется в три этапа.

  • Выделение физической памяти.

  • Создание региона виртуального адресного пространства — окна, на которое будут проецироваться представления физической памяти.

  • Проецирование на окно представлений физической памяти.

Хотя 32-разрядные версии Windows поддерживают до 128 Гб физической памяти, размер виртуального адресного пространства любого 32-разрядного пользовательского процесса по умолчанию равен 2 Гб (при указании загрузочных параметров /3GB и /USERVA в Boot.ini этот размер составляет 3 Гб). Чтобы 32-разрядный процесс мог получить доступ к большему объему физической памяти, Windows поддерживает набор функций под общим названием Address Windowing Extensions (AWE).

AWE-функции имеются во всех выпусках Windows и доступны независимо от объема физической памяти в системе. Однако AWE наиболее полезен в системах с объемом физической памяти не менее 2 Гб, поскольку тогда этот механизм — единственное средство для прямого использования более чем 2 Гб памяти 32-разрядным процессом. Еще одно его применение — защита. Так как AWE-память никогда не выгружается на диск, данные в этой памяти никогда не имеют копии в страничном файле, а значит, никто не сумеет просмотреть их, загрузив компьютер с помощью альтернативной операционной системы.

Ограничения, налагаемые на память, которая выделяется и проецируется с помощью AWE-функций.

  • Страницы такой памяти нельзя разделять между процессами.

  • Одну и ту же физическую страницу нельзя проецировать по более чем одному виртуальному адресу в рамках одного процесса.

  • В более старых версиях Windows страницы такой памяти могут иметь единственный атрибут защиты — «для чтения и записи». В Windows Server 2003 Service Pack 1 и выше также поддерживаются атрибуты «нет доступа» и «только для чтения».

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