- •2. Функции ос
- •Понятие ресурса. Управление ресурсами в вычислительной системе
- •Процессы и потоки
- •4. Водопадная (каскадная, последовательная) модель
- •Итерационная модель
- •Спиральная модель
- •5. Архитектуры осрв
- •Классификации информационных систем [править] Классификация по архитектуре
- •9, Диспетчер объектов
- •Типовые задачи администрирования
- •Особенности
- •35, Уровни запросов программных прерываний
- •37, Программные прерывания
- •Суть dpc
- •Управление dpc
- •Примечания
- •43, Синхронизация
- •44, Спин-блокировки
- •Спин-блокировки с очередями
- •45, Синхронизация при низком irql
- •47, События с ключом и критические секции
- •48, Быстрые и защищенные мьютексы
- •Ресурсы исполнительной системы
- •52, Трассировка событий ядра
47, События с ключом и критические секции
Синхронизирующий объект, впервые появившийся в Windows XP и названный событием с ключом(keyed event), заслуживает особого упоминания. Он помогает процессам справляться с нехваткой памяти при использовании критических секций. Это недокументированное событие позволяет потоку указать «ключ» в следующей ситуации-, данный поток должен пробуждаться, когда другой поток того же процесса освобождает событие с тем же ключом. Windows-процессы часто используют функции критических секций - EnterCriticalSectionи LeaveCriticalSection- для синхронизации доступа потоков к личным ресурсам процесса. Вызовы этих функций эффективнее прямого обращения к объектам «мьютекс», так как в отсутствие конкуренции они не заставляют переходить в режим ядра. При наличии конкуренции EnterCriticalSectionдинамически создает объект «событие», и поток, которому нужно захватить критическую секцию, ждет, когда поток, владеющий этой секцией, освободит ее вызовом LeaveCriticalSection. Если создать объект «событие» для критической секции не удалось из-за нехватки системной памяти, EnterCriticalSectionиспользует глобальное событие с ключом - CritSecOutOjMemoryEvent(в каталоге \Ker-nel пространства имен диспетчера объектов). Если EnterCritica amp;ectionвынуждена задействовать CritSecOutOjMemoryEventвместо стандартного события, поток, ждущий критическую секцию, использует адрес этой секции как ключ. Это обеспечивает корректную работу функций критических секций даже в условиях временной нехватки памяти. Мы не ставили себе задачу исчерпывающе описать все объекты исполнительной системы, а лишь хотели дать представление об их базовой функциональности и механизмах синхронизации. Об использовании этих объектов в Windows-программах см. справочную документацию Windows или четвертое издание книги Джеффри Рихтера «Windows для профессионалов».
48, Быстрые и защищенные мьютексы
Быстрые мьютексы(fast mutexes), также известные как мьютексы исполнительной системы, обычно обеспечивают более высокую производительность, чем объекты «мьютекс». Почему? Дело в том, что быстрые мьютексы, хоть и построены на объектах событий диспетчера, в отсутствие конкуренции не требуют ожидания объекта «событие» (и соответственно спин-блокировок, на которых основан этот объект). Эти преимущества особенно ярко проявляются в многопроцессорной среде. Быстрые мьютексы широко используются в ядре и драйверах устройств. Однако быстрые мьютексы годятся, только если можно отключить доставку обычных APC режима ядра. B исполнительной системе определены две функции для захвата быстрых мьютексов: ExAcquireFastMutexи ExAcquire-FastMutexUnsafe.Первая функция блокирует доставку всех APC, повышая IRQL процессора до уровня APC_LEVEL, а вторая - ожидает вызова при уже отключенной доставке обычных APC режима ядра (такое отключение возможно повышением IRQL до уровня «APC» или вызовом KeEnterCriticalRegiori).Другое ограничение быстрых мьютексов заключается в том, что их нельзя захватывать рекурсивно, как объекты «мьютекс». Защищенные мьютексы(guarded mutexes) - новшество Windows Server 2003; они почти идентичны быстрым мьютексам (хотя внутренне используют другой синхронизирующий объект, KGATE). Захватить защищенные мьютексы можно вызовом функции KeAcquireGuardedMutex,отключающей доставку всех APC режима ядра через KeEnterGuardedRegion,а не KeEnterCritical-Region,которая на самом деле отключает только обычные APC режима ядра. Защищенные мьютексы недоступны вне ядра и используются в основном диспетчером памяти для защиты глобальных операций вроде создания страничных файлов, удаления определенных типов разделов общей памяти и расширения пула подкачиваемой памяти. (Подробнее о диспетчере памяти см. главу 7.)
