|
|
||
4. Обслуживание потоков |
||
Операционные системы Windows распределяют процессорное время между потоками в соответствии с их приоритетами. По истечении кванта времени исполнение текущего потока прерывается, его контекст запоминается и процессорное время передается потоку с высшим приоритетом. Часто говорят, что поток с высшим приоритетом вытесняет поток с низшим приоритетом. Такое обслуживание потоков в Windows называется вытесняющая многозадачность (preempting multitasking). Величина кванта времени, выделяемого потоку, зависит от типа операционной системы Windows, типа процессора и приблизительно равна 20 мс. Приоритеты потоков в Windows определяются относительно приоритета процесса, в контексте которого они исполняются, и изменяются от 0 (низший приоритет) до 31 (высший приоритет). Приоритет процессов устанавливается при их создании функцией CreateProcess, используя параметр dwCreat ion Flags. Для установки приоритета процесса в этом параметре нужно установить один из следующих флагов. Отметим, что флаги below_normal_priority_class и above_normal_ priority class используются только в операционных системах, начиная с версии Windows 2000. Рассмотрим правила, используемые для назначения приоритетов процессам в Windows. Предполагается, что операционная система Windows различает четыре типа процессов в соответствии с их приоритетами: фоновые процессы, процессы с нормальным приоритетом, процессы с высоким приоритетом и процессы реального времени. Рассмотрим подробнее каждый из этих типов процессов.
- Фоновые процессы выполняют свою работу, когда нет активных пользовательских процессов. Обычно эти процессы следят за состоянием системы. Приоритет таких процессов устанавливается флагом idle_priority_class. Приоритет процесса можно изменить при помощи функции setPriorityciass, которая имеет следующий прототип: При успешном завершении функция SetPriorityciass возвращает ненулевое значение, в противном случае значение — FALSE. Параметр dwPriorityciass этой функции должен быть равен одному из флагов, которые приведены выше. Узнать приоритет процесса можно посредством вызова функции GetPriorityciass, которая имеет следующий прототип: При успешном завершении эта функция возвращает флаг установленного приоритета процесса, в противном случае возвращаемое значение равно нулю. |
||
|
||
4 |