Параллелизм -- CRK раздел OS3

Polze, Andreas Russinovich, Mark E. Solomon, David A, “Concurrency -- CRK Unit OS3”, public translation into Russian from English More about this translation.

Translate into another language.

Раздел OS3: параллелизм

3.2. Диспетчеризация ловушек в Windows, прерывания, синхронизация.

Авторские права Notice © 2000-2005 David A. Solomon and Mark Russinovich

Эти материалы являются частью Windows Operating System Internals Curriculum Development Kit, разработанным David A. Solomon и Mark E. Russinovich с Andreas Polze.

Microsoft лицензировала эти материалы от David Solomon Expert Seminars, Inc. для распространения среди академических организаций исключительно в академическом окружении (и не для коммерческого использования).

План раздела 3.2.

Диспетчеризация ловушек и прерываний.

IRQL уровни и превосходство прерываний.

Спин-блокировки и синхронизация с использованием ядра.

Исполнительная синхронизация

Процессы и потоки

Что такое процесс?

Представляет экземпляр запущенной программы.

вы создеаете процесс для запуска программы

запуск приложения создает процесс

Процесс определяется

Адрессным пространством

Ресурсами (например, открытые хэндлы)

Профиль безопасности (токен)

Что такое поток?

Исполняемое содержимое внутри процесса

Раздел планирования (потоки запускаются, процессы не запускаются)

Все потоки в процессе делят между собой одно адресное пространство родительского процесса

Поскольку услуги предоставляются, потоки могут синхронизировать доступ к общим ресурсам (критические секции, мьютексы, события семафоры)

Все потоки в системе планируются как равные другим, независимо от родительского процесса.

Системные вызовы

Основной аргумент в CreateProcess - имя образа файла (или командная строка)

Основной аргумента для CreateThread - адрес-входная точка для функции

Режим ядра против пользовательского режима

Состояние процессора

Контроллирует доступ к памяти

Каждая страница памяти содержит тег для того, чтобы показать требуемый режим для чтения и записи.

Защищает систему от пользователей

Защищает пользователя (процесс) от самого себя

Система не защищена от системы

Регионы кода помечены как "не писать ни в каком режиме"

Контроллирует способность исполнять привилегированные инструкции

Абстракция Windows

Intel: Ring 0, Ring 3

Контроллировать поток при смене режима ядра на пользовательский и наоборот

Не влияет на планирование

Контекст потока включает информацию об исполнительном режиме (среди других регистров и т.д.)

PerfMon счетчики:

"Привилегированное время" и "пользовательское время"

4 уровня гранулярности: поток, процесс, процессор, система

Вход в режим ядра

Код запускается в режиме ядра по одной из причин:

1. Запросы из пользовательского режима

Через системный сервисный механизм диспетчеризации

Код в режиме ядра запускается в контексте запрашиваемого потока

2. Прерывания от внешних устройств

Диспетчер прерываний Windows исполняет рутинную работу по обработке прерываний.

ISR запускается в контексте прерываемого потока (также называется "произвольный контекст потока")

ISR часто запрашивает исполнение "DPC routine", которая также запускается в режиме ядра

Время не сказывается на прерванном потоке.

3.Системные потоки Dedicated режима ядра

Некоторые потоки в системе остаются в режиме ядра все время (преимущественно системные процессы)

Запланированные, в отдельной очереди и т.д., подобно каким-либо другим потокам

Диспетчеризация ловушек

Ловушка: механизм процессора для отлавливания исполняющегося потока

Переключает из пользовательского режима в режим ядра

Прерывания асинхронны

Исключения синхронны

Диспетчеризация прерываний

Превосходство прерываний с IRQLs (x86)

IRQL - прерывание запрашивания уровня

"преимущество" прерывания в признании других прерываний

Разные источники прерываний имеют разные IRQL

не то же самое, что и IRQ

IRQL - также состояние процессора

Обслуживание прерывания изменяет IRQL процессора на IRQL этого прерывания

это маскирует прерывания от последующих прерываний такого же IRQL или меньше.

Пользовательский режим ограничивается IRQL 0

Нет ожиданий ии ошибок страницы при IRQL >= DISPATCH_LEVEL

Обработка прерывания

Таблица диспетчеризации прерываний (IDT)

Ссылается на стандартные работы сервисов прерываний

x86:

Контроллер прерываний прерывает процессор (одна строка)

Процессор запрашивает вектор прерывания; использует вектор как индекс для IDT

После исполнения ISR, IRQL понижается до начального значения

Объект прерывания

Позволяет драйверам устройства регистрировать ISR своих устройств

Содержит код диспетчеризации (начальный хэндлер)

Код диспетчеризации вызывает ISR с помощью объекта прерывания как параметр (HW не может пропустить параметры в ISR).

Включение/отключение объектов прерываний:

Динамическое объединение ISR и IDT начальных точек

Загружаемые драйверы (модули ядра)

Включить/выключить ISR

Прерывание объектов может синхронизировать доступ к данным ISR

Множество экземпляров ISR может быть активно одновременно (MP машина)

Множество ISR может быть соединено с IRQL

Предопределенные IRQL

Высокий

используюется при искажении системы (через KeBugCheck())

Power fail

берет начало в документации разработки NT, но никогда не использовался

Внутреннее процессорное прерывание

используется для того, чтобы запросить действие от другого процессора (диспетчеризация потока, обновление процессорной TLB, выход из системы, падение системы)

Часы

Pages: ← previous Ctrl next
1 2 3

Original (English): Concurrency -- CRK Unit OS3

Translation: © Gargo .

translated.by crowd

Like this translation? Share it or bookmark!