Параллелизм -- CRK раздел OS3 |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
Раздел 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, выход из системы, падение системы)
Часы
