Книга: 2.Внутреннее устройство Windows (гл. 5-7)
Динамическое повышение приоритета потоков активного процесса после выхода из состояния ожидания
Динамическое повышение приоритета потоков активного процесса после выхода из состояния ожидания
Всякий раз, когда поток в активном процессе завершает ожидание на объекте ядра, функция ядра KiUnwaitThread динамически повышает его текущий (не базовый) приоритет на величину текущего значения PsPrioritySeparation. (Какой процесс является активным, определяет подсистема управления окнами.) Как было сказано в разделе «Управление величиной кванта» ранее в этой главе, PsPrioritySeparation представляет собой индекс в таблице квантов (байтовом массиве), с помощью которой выбираются величины квантов для потоков активных процессов. Однако в данном случае PsPrioritySeparation используется как значение, на которое повышается приоритет.
Это увеличивает отзывчивость интерактивного приложения по окончании ожидания. B результате повышаются шансы на немедленное возобновление его потока — особенно если в фоновом режиме выполняется несколько процессов с тем же базовым приоритетом.
B отличие от других видов динамического повышения приоритета этот поддерживается всеми системами Windows, и его нельзя отключить даже через Windows-функцию SetThreadPriorityBoost.
ЭКСПЕРИМЕНТ: наблюдение за динамическим изменением приоритета потока активного процесса
Увидеть механизм повышения приоритета в действии позволяет утилита CPU Stress (входит в состав ресурсов и Platform SDK).
1. B окне Control Panel (Панель управления) откройте апплет System (Система) или щелкните правой кнопкой мыши значок My Computer (Мой компьютер), выберите команду Properties (Свойства) и перейдите на вкладку Advanced (Дополнительно). Если вы используете Windows 2000, щелкните кнопку Performance Options (Параметры быстродействия) и выберите переключатель Applications (Приложений). B случае Windows XP или Windows Server 2003 щелкните кнопку Options (Параметры) в разделе Performance (Быстродействие), откройте вкладку Advanced (Дополнительно) и выберите переключатель Programs (Программ). B итоге PsPrioritySeparation получит значение 2.
2. Запустите Cpustres.exe.
3. Запустите Windows NT 4 Performance Monitor (Perfmon4.exe на компакт-диске ресурсов Windows 2000). Для эксперимента нужна имен-
но эта устаревшая версия, поскольку она способна запрашивать значения счетчиков производительности с более высокой частотой, чем оснастка Performance (Производительность), которая запрашивает такие значения не чаще, чем раз в секунду.
4. Щелкните на панели инструментов кнопку Add Counter (или нажмите клавиши Ctrl+I), чтобы открыть диалоговое окно Add To Chart.
5. Выберите объект Thread и счетчик Priority Current.
6. Пролистайте список Instance и найдите процесс Cpustres. Выберите второй поток под номером 1, так как первый (под номером 0) является потоком GUI.
7. Щелкните кнопку Add, затем — кнопку Done.
8. Из меню Options выберите команду Chart. Установите максимум по вертикальной шкале на 16, а в поле Interval введите 0.010 и щелкните кнопку ОК.
9. Теперь активизируйте процесс Cpustres. B результате приоритет потока Cpustres должен повыситься на 2 уровня, а потом снизиться до базового, как показано на следующей иллюстрации.
10. Причиной наблюдаемого повышения приоритета Cpustres на 2 уровня является пробуждение его потока, который спит около 75 % времени. Чтобы повысить частоту динамического повышения приоритета потока, увеличьте значение Activity с Low до Medium, затем до Busy. Если вы поднимете Activity до Maximum, то не увидите никакого повышения приоритета, поскольку при этом поток входит в бесконечный цикл и не вызывает никаких функций ожидания. A значит, его приоритет будет оставаться неизменным.
11. Закончив эксперимент, закройте Performance Monitor и CPU Stress.
- Внутреннее устройство процессов
- Структуры данных
- Переменные ядра
- Счетчики производительности
- Сопутствующие функции
- Что делает функция CreateProcess
- Этап 1: открытие образа, подлежащего выполнению
- Этап 2: создание объекта «процесс»
- Этап 2A: формирование блока EPROCESS
- Этап 2B: создание начального адресного пространства процесса
- Этап 2C: создание блока процесса ядра
- Этап 2D: инициализация адресного пространства процесса
- Этап 2E: формирование блока PEB
- Этап 2F: завершение инициализации объекта «процесс» исполнительной системы
- Этап 3: создание первичного потока, его стека и контекста
- Этап 4: уведомление подсистемы Windows о новом процессе
- Этап 5: запуск первичного потока
- Этап 6: инициализация в контексте нового процесса
- Сборки, существующие в нескольких версиях
- Внутреннее устройство потоков
- Структуры данных
- Адрес Идентификатор ETHREAD потока Адрес TEB
- Переменные ядра
- Счетчики производительности
- Сопутствующие функции
- Рождение потока
- Наблюдение за активностью потоков
- Планирование потоков
- Обзор планирования в Windows
- Уровни приоритета
- Функции Windows API, связанные с планированием
- Сопутствующие утилиты
- Диспетчер системных ресурсов Windows
- Приоритеты реального времени
- Уровни прерываний и уровни приоритета
- Состояния потоков
- База данных диспетчера ядра
- Квант
- Учет квантов времени
- Управление величиной кванта
- Динамическое увеличение кванта
- Параметр реестра для настройки кванта
- Сценарии планирования
- Самостоятельное переключение
- Вытеснение
- Завершение кванта
- Завершение потока
- Переключение контекста
- Поток простоя
- Динамическое повышение приоритета
- Динамическое повышение приоритета после завершения ввода-вывода
- Динамическое повышение приоритета по окончании ожидания событий и семафоров
- Динамическое повышение приоритета потоков активного процесса после выхода из состояния ожидания
- Динамическое повышение приоритета после пробуждения GUI-потоков
- Динамическое повышение приоритета при нехватке процессорного времени
- Многопроцессорные системы
- База данных диспетчера ядра в многопроцессорной системе
- Системы с поддержкой Hyperthreading
- Системы NUMA
- Привязка к процессорам
- Идеальный и последний процессоры
- Алгоритмы планирования потоков в многопроцессорных системах
- Выбор процессора для потока при наличии простаивающих процессоров
- Выбор процессора для потока в отсутствие простаивающих процессоров
- Выбор потока для выполнения на конкретном процессоре (Windows 2000 и Windows XP)
- Выбор потока для выполнения на конкретном процессоре (Windows Server 2003)
- Объекты-задания
- Резюме
- Динамическое повышение приоритета
- Сущность процесса миграции
- Достоинства и недостатки потоков
- Повышение производительности приложений с помощью хранимых процедур
- V Совершенствование процесса
- Ограничение времени ожидания для транзакций (Lock timeout)
- Использование сервера Yaffil внутри процесса
- 4. Стадии бизнес-процесса взаимодействия с клиентами
- 2.2.2.2 Состояния процесса
- 1.2 Процесс, контекст процесса и потоки
- Вытеснение процесса
- Повышение точности вычисления формул