Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Примечания. · Все приведенные числовые значения уровней приоритетов присваиваются в Windows 2000
· Все приведенные числовые значения уровней приоритетов присваиваются в Windows 2000. В других версиях, они могут быть другими. · Уровни приоритетов в диапазонах 17..21 и 27..30 для обычных прикладных программ не задаются. Они могут использоваться только для драйверов устройств, работающих в режиме ядра. · Вновь созданный с помощью функции CreatThread поток по умолчанию получает относительный приоритет «обычный». · Все относительные уровни приоритетов, помимо своих численных значений, имеют общепринятые в системе идентификаторы. · С помощью функции GetThreadPriority () можно получить информацию об относительном приоритете потока по его дескриптору. · С помощью функции SetThreadPriority () можно изменить приоритет процесса. Эта функция имеет два параметра, а именно – дескриптор потока, и идентификатор нового относительного приоритета, который присваивается потоку. Из всего сказанного вытекает, что для любого потока в системе назначается уровень приоритета, зависящий от двух факторов: 1. Класс приоритета процесса; 2. Уровень относительного приоритета потока. Присваиваемый системой уровень приоритета называется базовым уровнем приоритета потока. В некоторых случаях, система может сама, динамически, изменять уровень приоритета потока. Обычно это происходит в ответ на какие-либо внешние события, связанные с вводом-выводом данных, например, нажатие клавиш на клавиатуре, чтение/запись диска. В качестве примера можно привести следующие ситуации, в которых операционная система может динамически менять относительные приоритеты: 1. В системе имеется поток с относительным приоритетом «обычный» в процессе класса «высокий». Поток имеет значение базового уровня, равного 13. Если на клавиатуре нажимается какая-либо клавиша, то поток становится планируемым к исполнению, и управление получает драйвер клавиатуры. Он может инициировать временное увеличение уровня потока, например, с 13 до 15. Новое значение может быть иным, причем неизвестным заранее. После выполнения потока с новым приоритетом в течение кванта времени, система снизит его уровень приоритета до значения 14, и выделит потоку квант процессорного времени, в ходе которого он будет выполняться с новым приоритетом. По его окончании, система снова понизит уровень приоритета потока на единицу, до его исходного базового значения. Таким способом, в ОС осуществляется процесс динамического изменения уровней приоритетов потоков с целью повышения скорости ответной реакции системы на внешние события; 2. В системе имеется готовый к выполнению поток со значением базового уровня приоритета равным 4. Длительное время этот поток не может получить доступ к процессору из-за того, что его полностью занимают потоки с более высокими приоритетами. Обнаружив присутствие такого потока, система динамически может поднять его уровень приоритета до 15 и выделить дополнительный квант процессорного времени. По окончании кванта, потоку снова будет возвращено прежнее значение базового уровня приоритета. Система обладает возможностью изменять динамические приоритеты, и в частности, повышать их, только для тех потоков, базовый уровень приоритета которых находится в диапазоне от 1 до 15. Этот диапазон называется областью динамического приоритета. Повышение динамического приоритета за пределы диапазона для потоков с прикладными задачами не допускается. Потоки с таким уровнем приоритета выполняются системными функциями. Подобное ограничение не позволяет прикладным программам нарушать работу ОС, и, по существу, является одной из мер защиты системных программ от пользовательских. Существуют системные функции (начиная с Windows 2000), которые позволяют либо отключать возможность динамического изменения приоритетов потоков, либо напротив, включать её: 1. SetProcessPriorityBoost (); 2. SetThreadPriorityBoost ().
Дата добавления: 2014-10-10; просмотров: 322; Нарушение авторских прав Мы поможем в написании ваших работ! |