Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 106 стр.

UptoLike

ляет набор функций для управления классами и относительными приори-
тетами потоков.
Планировщик операционной системы также может корректировать
уровень приоритета (из диапазона 1-15), однако базовый уровень
.е. класс) не может быть изменен. Такая коррекция приоритета выполня-
ется в случае:
Завершения операции ввода-вывода – в зависимости от устрой-
ства, приоритет повышается на 1 – 8 уровней.
По окончании ожидания события или семафора (см. далее) – на
один уровень.
При пробуждении GUI потоков – на 2 уровня.
По окончании ожидания потоком активного процесса (опреде-
ляется по активности интерфейса) – на величину, указанную
младшими 2 битами параметра Win32PrioritySeparation (см. уп-
равление длительностью кванта).
В случае коррекции приоритета по одной из перечисленных причин,
повышенный приоритет начинает постепенно снижаться до начального
уровня потока – с каждым тиком таймера на один уровень.
Еще один случай повышения приоритета (вместе с увеличением дли-
тельности кванта) – процесс долгое время не получал процессорного вре-
мени. В этой ситуации система раз в 3-4 секунды назначает процессу при-
оритет, равный 15, и квант удвоенной длительности. По истечении этого
кванта приоритет возвращается к прежнему значению и восстанавливает-
ся рекомендуемая длительность кванта.
Разработчик приложения может изменять класс приоритета, назна-
ченный процессу, и относительный приоритет потоков в процессе в соот-
ветствии с приведенной таблицей 6.2. Планировщик при выборе потока
для исполнения учитывает итоговый уровень приоритета.
В зависимости от настройки планировщика, NORMAL_PRIORITY_CLASS с
базовым уровнем приоритета 8 может быть «расщеплен» на два базовых
уровня – для потоков активных процессов (базовый уровень 9) и для по-
токов фоновых процессов (базовый уровень 7). Для класса HIGH_PRIORI-
TY_CLASS относительные приоритеты потока THREAD_PRIORITY_HIGHEST и
THREAD_PRIORITY_TIME_CRITICAL дают одинаковое значение приоритета 15.
Основы многозадачности
199
«background services»
длинные кванты фиксированной длины, значение 0x18 т.е.
01 10 00 (длинные кванты фиксированной длительности, 36 ед.).
Более тонкая настройка возможна с помощью редактора реестра.
Управление длительностью кванта связано с активностью процесса,
которая определяется наличием интерфейса пользователя (GUI или кон-
соль) и его активностью. Если процесс находится в фоновом режиме, то
длительность назначенного ему кванта соответствует «нулевым» колонкам
таблицы 6.1 (выделены серым цветом; т.е. длительности 6 или 24 – для пе-
ременной длины кванта или 18 и 36 – для фиксированной). Когда процесс
становится активным, то ему назначается продолжительность квантов, ис-
ходя из значения двух младших бит параметра Win32PrioritySeparation в
соответствии с приведенной таблицей.
Еще один случай увеличения длительности кванта – процесс долгое
время не получал процессорного времени (это может случиться, если все
время есть активные процессы более высокого приоритета). В этой ситуа-
ции система раз в 3-4 секунды (в зависимости от продолжительности ти-
ка) назначает процессу повышенный приоритет и квант удвоенной дли-
тельности. По истечении этого кванта приоритет возвращается к прежне-
му значению и восстанавливается рекомендуемая длительность кванта.
6.1.2.2. Управление приоритетами
В Windows выделяется 32 уровня приоритетов. 0 соответствует само-
му низкому приоритету (с таким приоритетом работает только специаль-
ный поток обнуления страниц), 31 – самому высокому. Этот диапазон де-
лится на три части:
Приоритет 0 – соответствует приоритету потока обнуления
страниц.
Приоритеты с 1 по 15 – соответствуют динамическим уровням
приоритетов. Большинство потоков работают именно в этом
диапазоне приоритетов, и Windows может корректировать в
некоторых случаях приоритеты потоков из этого диапазона.
Приоритеты с 16 по 31 – соответствуют приоритетам «реально-
го времени». Этот уровень достаточно высок для того, чтобы по-
ток, работающий с таким приоритетом, мог реально помешать
нормальной работе других потоков в системе – например, поме-
шать обрабатывать сообщения от клавиатуры и мыши. Windows
самостоятельно не корректирует приоритеты этого диапазона.
Для некоторого упрощения управления приоритетами в Windows вы-
деляют «классы приоритета» (priority class), которые задают базовый уро-
вень приоритета, и «относительные приоритеты» потоков, которые корре-
ктируют указанный базовый уровень. Операционная система предостав-
198
CIL и системное программирование в Microsoft .NET
198                         CIL и системное программирование в Microsoft .NET   Основы многозадачности                                               199


«background services»                                                           ляет набор функций для управления классами и относительными приори-
     длинные кванты фиксированной длины, значение 0x18 т.е.                     тетами потоков.
     01 10 00 (длинные кванты фиксированной длительности, 36 ед.).                     Планировщик операционной системы также может корректировать
     Более тонкая настройка возможна с помощью редактора реестра.               уровень приоритета (из диапазона 1-15), однако базовый уровень
     Управление длительностью кванта связано с активностью процесса,            (т.е. класс) не может быть изменен. Такая коррекция приоритета выполня-
которая определяется наличием интерфейса пользователя (GUI или кон-             ется в случае:
соль) и его активностью. Если процесс находится в фоновом режиме, то                     • Завершения операции ввода-вывода – в зависимости от устрой-
длительность назначенного ему кванта соответствует «нулевым» колонкам                       ства, приоритет повышается на 1 – 8 уровней.
таблицы 6.1 (выделены серым цветом; т.е. длительности 6 или 24 – для пе-                 • По окончании ожидания события или семафора (см. далее) – на
ременной длины кванта или 18 и 36 – для фиксированной). Когда процесс                       один уровень.
становится активным, то ему назначается продолжительность квантов, ис-                   • При пробуждении GUI потоков – на 2 уровня.
ходя из значения двух младших бит параметра Win32PrioritySeparation в                    • По окончании ожидания потоком активного процесса (опреде-
соответствии с приведенной таблицей.                                                        ляется по активности интерфейса) – на величину, указанную
     Еще один случай увеличения длительности кванта – процесс долгое                        младшими 2 битами параметра Win32PrioritySeparation (см. уп-
время не получал процессорного времени (это может случиться, если все                       равление длительностью кванта).
время есть активные процессы более высокого приоритета). В этой ситуа-                 В случае коррекции приоритета по одной из перечисленных причин,
ции система раз в 3-4 секунды (в зависимости от продолжительности ти-           повышенный приоритет начинает постепенно снижаться до начального
ка) назначает процессу повышенный приоритет и квант удвоенной дли-              уровня потока – с каждым тиком таймера на один уровень.
тельности. По истечении этого кванта приоритет возвращается к прежне-                  Еще один случай повышения приоритета (вместе с увеличением дли-
му значению и восстанавливается рекомендуемая длительность кванта.              тельности кванта) – процесс долгое время не получал процессорного вре-
                                                                                мени. В этой ситуации система раз в 3-4 секунды назначает процессу при-
6.1.2.2. Управление приоритетами                                                оритет, равный 15, и квант удвоенной длительности. По истечении этого
     В Windows выделяется 32 уровня приоритетов. 0 соответствует само-          кванта приоритет возвращается к прежнему значению и восстанавливает-
му низкому приоритету (с таким приоритетом работает только специаль-            ся рекомендуемая длительность кванта.
ный поток обнуления страниц), 31 – самому высокому. Этот диапазон де-                  Разработчик приложения может изменять класс приоритета, назна-
лится на три части:                                                             ченный процессу, и относительный приоритет потоков в процессе в соот-
         • Приоритет 0 – соответствует приоритету потока обнуления              ветствии с приведенной таблицей 6.2. Планировщик при выборе потока
           страниц.                                                             для исполнения учитывает итоговый уровень приоритета.
         • Приоритеты с 1 по 15 – соответствуют динамическим уровням                   В зависимости от настройки планировщика, NORMAL_PRIORITY_CLASS с
           приоритетов. Большинство потоков работают именно в этом              базовым уровнем приоритета 8 может быть «расщеплен» на два базовых
           диапазоне приоритетов, и Windows может корректировать в              уровня – для потоков активных процессов (базовый уровень 9) и для по-
           некоторых случаях приоритеты потоков из этого диапазона.             токов фоновых процессов (базовый уровень 7). Для класса HIGH_PRIORI-
         • Приоритеты с 16 по 31 – соответствуют приоритетам «реально-          TY_CLASS относительные приоритеты потока THREAD_PRIORITY_HIGHEST и
           го времени». Этот уровень достаточно высок для того, чтобы по-       THREAD_PRIORITY_TIME_CRITICAL дают одинаковое значение приоритета 15.
           ток, работающий с таким приоритетом, мог реально помешать
           нормальной работе других потоков в системе – например, поме-
           шать обрабатывать сообщения от клавиатуры и мыши. Windows
           самостоятельно не корректирует приоритеты этого диапазона.
     Для некоторого упрощения управления приоритетами в Windows вы-
деляют «классы приоритета» (priority class), которые задают базовый уро-
вень приоритета, и «относительные приоритеты» потоков, которые корре-
ктируют указанный базовый уровень. Операционная система предостав-