Лекции / 2. Процессы и потоки
.pdfСхема назначения приоритета потокам в Windows NT
Классы приоритетов процессов и приоритеты
потоков Win32
Уровни приоритета потоков назначаются исходя из двух разных позиций: одной - от Windows API и другой от ядра Windows. Сначала Windows API систематизирует процессы по классу приоритета, который им присваивается при создании:
•Реального времени — Real-Qme (4),
•Высокий — High (3),
•Выше обычного — Above Normal (7),
•Обычный — Normal (2),
•Ниже обычного — Below Normal (5) Простоя — Idle (1).
Затем назначается относительный приоритет отдельных потоков внутри этих процессов. Здесь номера представляют изменение приоритета, применяющееся к базовому приоритету процесса:
•Критичный по времени — Time-criQcal (15),
•Наивысший — Highest (2),
•Выше обычного — Above-normal (1),
•Обычный — Normal (0),
•Ниже обычного — Below-normal (–1),
•Самый низший — Lowest (–2)
•Простоя — Idle (–15).
•Поэтому в Windows API каждый поток имеет базовый приоритет, являющийся функцией класса приоритета процесса и его относительного приоритета процесса.
Сценарии планирования
Истечение кванта времени
Самостоятельное переключение
Вытеснение потока
Сценарии и причины повышения приоритета
üПовышение вследствие событий планировщика или диспетчера
üПовышение вследствие завершения ввода/вывода
üПовышение вследствие ввода из пользовательского интерфейса
üПовышение вследствие слишком продолжительного ожидания ресурса исполняющей системы
Алгоритм планирования Linux
В операционной системе Linux поддерживаются три класса потоков:
•1. потоки реального времени, обслуживаемые по алгоритму FIFO;
•2. потоки реального времени, обслуживаемые в порядке циклической очереди;
•3. потоки разделения времени.
Linux различает 140 уровней приоритета.
Потоки реального времени имеют приоритеты от 0 до 99, причем 0 – самый высокий приоритет.
Обычному потоку ставится в соответствие уровень приоритета от 100 до 139.
Каждому уровню приоритета обычных потоков соответствует свое значение длительности кванта времени.
Linux связывает с каждым потоком значение nice, которое определяет
статический приоритет каждого потока. По умолчанию он равен 0, но его можно изменить при помощи системного вызова nice(value), где value меняется от -20 до +19.
Очередь исполнения и массивы приоритетов для каждого
ЦП в Linux-планировщике О(1)