Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Динамическое изменение уровня приоритета потока



Уровень приоритета, получаемый комбинацией относительного приоритета потока и класса приоритета процесса, которому принадлежит данный поток, называют базовым уровнем приоритета потока. Иногда система изменяет уровень приоритета потока. Обычно это происходит в ответ на некоторые события, связанные с вводом-выводом.

Процессор исполняет поток в течение отведенного отрезка времени, а по его истечении система снижает приоритет потока на 1, до уровня 14. Далее потоку вновь выделяется квант процессорного времени, по окончании которого система опять снижает уровень приоритета потока на 1. И теперь приоритет потока снова соответствует его базовому уровню.

Текущий уровень приоритета не может быть ниже базового. Кроме того, драйвер устройства, «разбудивший» поток, сам устанавливает величину повышения приоритета. Система повышает приоритет только тех потоков, базовый уровень которых находится в пределах 1-15. Именно поэтому данный диапазон называется «областью динамического приоритета» (dynamic priority range). Система не допускает динамического повышения приоритета потока до уровней реального времени (более 15). Поскольку потоки с такими уровнями обслуживают системные функции, это ограничение не дает приложению нарушить работу операционной системы. И, кстати, система никогда не меняет приоритет потоков с уровнями реального времени (от 16 до 31).

Функции, позволяющие отключать этот механизм:

BOOL SetProcessPriorityBoost (HANDLE hProcess, BOOL DisablePriorityBoost);

BOOL SetThreadPriorityBoost (HANDLE hThread, BOOL DisablePriorityBoost);

SetProcessPriorityBoost заставляет систему включить или отключить изменение приоритетов всех потоков в указанном процессе, a SetThreadPriorityBoost действует применительно к отдельным потокам. Эти функции имеют свои аналоги, позволяющие определять, разрешено или запрещено изменение приоритетов:

BOOL GetProcessPriorityBoost (HANDLE hProcess, PBOOL pDisablePriorityBoost);

BOOL GetThreadPriorityBoost (HANDLE hThread,

PBOOL pDisablePriorityBoost);

Каждой из этих двух функций передается описатель нужного процесса или потока и адрес переменной типа BOOL, в которой и возвращается результат. [kgl].

Основная литература: [1] 199 - 220 c.

Контрольные вопросы:

1. Назначение счетчика пользователей объектов ядра

2. Для чего используется флаг CREATE_SUSPENDED?

3. Какие данные хранятся в структуре CONTEXT?

4. В каком диапазоне находятся уровни приоритетов потоков?

[gl] Лекция 4. Тема: Синхронизация потоков [:]

Потоки могут значительно упростить разработку и реализацию программы, а также повышают ее быстродействие, но использование потоков требует внимательного отно­шения к защите общих ресурсов от их совместного изменения. Объ­екты синхронизации могут использоваться как для обеспечения синхронизации потоков одного процесса, так и для синхронизации потоков различных процессов.





Дата публикования: 2015-11-01; Прочитано: 610 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...