Когда говорят о диспетчеризации, то всегда в неявном или явном виде имеют в виду понятие задачи (потока). Известно большое количество правил (дисциплин диспетчеризации), в соответствии с которыми формируется список (очередь) готовых к выполнению задач. Различают два больших класса дисциплин обслуживания – бесприоритетные и приоритетные. При бесприоритетном обслуживании выбор задачи производится в некотором заранее установленном порядке без учёта их относительной важности и времени обслуживания. При реализации приоритетных дисциплин обслуживания отдельным задачам предоставляются преимущественное право попасть в состояние исполнения. Перечень дисциплин обслуживания и их классификация приведены на рисунке:
- приоритет, присвоенный задаче, может являться величиной постоянной
- приоритет задачи может изменяться в процессе её решения.
Диспетчеризация с динамическими приоритетами требует дополнительных расходов на вычисление значений приоритетов исполняющихся задач, поэтому во многих ОС реального времени используются методы диспетчеризации на основе статических (постоянных приоритетов).
|
|
// получаем кадр всех процессов в системе
hS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 PS;
// устанавливаем размер структуры
PS.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hS, &PS))
do
{ // выводим информацию о каждом процессе
…..
_itoa(PS.pcPriClassBase, szStrVal, 10);
strcat(szStrPr, szStrVal);
SendMessage(hListProcs, LB_ADDSTRING, 0, (LPARAM)szStrPr);
…..
} while (Process32Next(hS, &PS));
CloseHandle(hS); // удаляем кадр