![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Атрибуты защиты страниц памяти
Для повышения устойчивости работы операционной системы и пользовательских процессов каждой странице памяти присваиваются атрибуты защиты, определяющие, какие операции могут проводиться с этой памятью. Все операционные системы 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 и снимает его с предыдущей страницы. Таким образом, для стека выделяется только то количество оперативной памяти, которое реально необходимо.
|