- •Операционные системы Windows32
- •Объекты ядра Windows
- •Пользователи объектов ядра
- •Защита объектов ядра
- •Дескрипторы. Таблица дескрипторов объектов ядра.
- •Создание объектов ядра
- •Закрытие объектов ядра
- •Совместное использование объектов ядра различными процессами
- •Процессы и потоки в Windows Создание процесса
- •Завершение процесса
- •Операции с процессами
- •Создание потока
- •Завершение потока
- •Потоки и библиотека языка с
- •Операции с потоками
- •Приоритеты потоков в Windows
- •Потоки в мультипроцессорных системах
- •Синхронизация потоков
- •Interlocked-функции
- •Критические секции
- •Wait-функции
- •Wait-функции для работы с одним объектом
- •Wait-функции для работы с несколькими объектами.
- •Побочные эффекты ожидания.
- •События
- •Семафоры
- •Мьютексы
- •Ожидаемые таймеры
- •Управление памятью в Windows
- •Организация виртуальной памяти Windows
- •Выделение памяти процессу
- •Атрибуты защиты страниц памяти
- •Функции менеджера памяти Windows
- •Проецируемые в память файлы
- •Проекции файлов и разделяемая память
Атрибуты защиты страниц памяти
Для повышения устойчивости работы операционной системы и пользовательских процессов каждой странице памяти присваиваются атрибуты защиты, определяющие, какие операции могут проводиться с этой памятью. Все операционные системы 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 и выше также поддерживаются атрибуты «нет доступа» и «только для чтения».