К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

4. Обслуживание потоков

Операционные системы Windows распределяют процессорное время между потоками в соответствии с их приоритетами. По истечении кванта времени исполнение текущего потока прерывается, его контекст запоминается и процессорное время передается потоку с высшим приоритетом. Часто говорят, что поток с высшим приоритетом вытесняет поток с низшим приоритетом. Такое обслуживание потоков в Windows называется вытесняющая многозадачность (preempting multitasking). Величина кванта времени, выделяемого потоку, зависит от типа операционной системы Windows, типа процессора и приблизительно равна 20 мс.

Приоритеты потоков в Windows определяются относительно приоритета процесса, в контексте которого они исполняются, и изменяются от 0 (низший приоритет) до 31 (высший приоритет). Приоритет процессов устанавливается при их создании функцией CreateProcess, используя параметр dwCreat ion Flags. Для установки приоритета процесса в этом параметре нужно установить один из следующих флагов.
- Idle_priority_class — класс фоновых процессов;
- below_normal_priority_class — класс процессов ниже нормальных;
- normal_priority_class — класс нормальных процессов;
- above_normal_priority_class — класс процессов выше нормальных;
- high_priority_class — класс высокоприоритетных процессов;
- real_time_priority_class — класс процессов реального времени.

Отметим, что флаги below_normal_priority_class и above_normal_ priority class используются только в операционных системах, начиная с версии Windows 2000.

Рассмотрим правила, используемые для назначения приоритетов процессам в Windows. Предполагается, что операционная система Windows различает четыре типа процессов в соответствии с их приоритетами: фоновые процессы, процессы с нормальным приоритетом, процессы с высоким приоритетом и процессы реального времени. Рассмотрим подробнее каждый из этих типов процессов.

- Фоновые процессы выполняют свою работу, когда нет активных пользовательских процессов. Обычно эти процессы следят за состоянием системы. Приоритет таких процессов устанавливается флагом idle_priority_class.
- Процессы с нормальным приоритетом — это обычные пользовательские процессы. Приоритет таких процессов устанавливается флагом normal_priority_class. Этот приоритет также назначается пользовательским процессам по умолчанию. В Windows 2000 приоритет обычных пользовательских процессов может также устанавливаться флагами BELOW_NORMAL_PRIORITY_CLASS ИЛИ ABOVE_NORMAL_PRIORITY_CLASS, КОТО-рые соответственно немного повышают или понижают приоритет пользовательского процесса.
- Процессы с высоким приоритетом это такие пользовательские процессы, от которых требуется более быстрая реакция на некоторые события, чем от обычных пользовательских процессов. Приоритет таких процессов устанавливается флагом high_priority_class. Эти процессы должны содержать небольшой программный код и выполняться очень быстро, чтобы не замедлять работу системы. Обычно такие приоритеты имеют другие системы, работающие на платформе операционных систем Windows.
- последнему типу процессов относятся процессы реального времени. Приоритет таких процессов устанавливается флагом real_time_priority_class. Работа таких процессов обычно происходит в масштабе реального времени и связана с реакцией на внешние события. Эти процессы должны работать непосредственно с аппаратурой компьютера.

Приоритет процесса можно изменить при помощи функции setPriorityciass, которая имеет следующий прототип:
BOOL SetPriorityClass(
  HANDLE hProcess, // дескриптор процесса
  DWORD dwPriorityClass // приоритет
);

При успешном завершении функция SetPriorityciass возвращает ненулевое значение, в противном случае значение — FALSE. Параметр dwPriorityciass этой функции должен быть равен одному из флагов, которые приведены выше.

Узнать приоритет процесса можно посредством вызова функции GetPriorityciass, которая имеет следующий прототип:
DWORD GetPriorityClass (
  HANDLE hProcess // дескриптор процесса
);

При успешном завершении эта функция возвращает флаг установленного приоритета процесса, в противном случае возвращаемое значение равно нулю.

 

 


Предыдущая        В начало страницы       Следующая
4