Операционные системы. Учебное пособие. Марапулец Ю.В. - 59 стр.

UptoLike

Составители: 

Среди атрибутов объекта потока различают базовый и динамический приоритеты.
При вызове команды для изменения приоритета потока меняется его базовый приоритет,
который не может быть выше или ниже приоритета процесса-владельца более чем на 2
уровня. Операционная система способствует «продвижению» потока для его выполне-
ния. Для этого система поддерживает динамический приоритет потоков, которые вы-
полняют важные задачи. Например, если процесс выводит информацию в окно, либо
считывает данные с диска временно повышается приоритет всех потоков такого процес-
са. Эти временные приращения в сумме с базовым приоритетом образуют динамический
приоритет процесса. Планировщик определяет очередность выполнения потоков на ос-
новании их динамического приоритета. Со следующим тактом процесса приращение
приоритета начинает уменьшаться на один уровень, постепенно достигая уровня базово-
го приоритета.
Выбирая поток, который будет выполняться следующим, программа-планировщик
начинает просмотр очереди заданий с потоков, имеющий наивысший приоритет, выпол-
няет их, а затем переходит к остальным потокам. Однако иногда в очереди заданий со-
держатся не все созданные в системе потоки, поскольку некоторые из них могут быть
приостановлены или заблокированы. В каждый момент времени поток может находить-
ся в одном из шести состояний.
Ready (готов) - поставлен в очередь и ожидает выполнения.
Standby (ближайший) - готов быть выполненным следующим.
Running (выполнение) - находится в режиме выполнения и взаимодействует с централь-
ным процессором.
Waiting (ожидание) не выполняется, ожидая сигнала выполнения.
Transition (промежуточное) будет выполняться после того, как система загрузит его
контекст.
Terminated (завершен) - выполнение завершено, однако объект не удален.
Когда программа-планировщик выбирает из очереди готовый к выполнению поток,
она загружает его контекст. В состав контекста входит набор значений регистров про-
цессора, стек ядра, блок параметров окружения потока и пользовательский стек в адрес-
ном пространстве процесса, который является владельцем данного потока. Если часть
контакта была записана на диск, поток проходит в промежуточное состояние и ожидает,
пока система соберет все составные части контекста.
Чтобы потоки могли надежно работать, их необходимо синхронизировать. Пред-
ставьте себе, что один поток создает кисть, а затем создает несколько потоков, которые
вместе используют эту кисть для выполнения графических операций. Первый поток не
должен уничтожать кисть до тех пор, пока другие потоки не завершат операции рисова-
ния. Или представьте себе, что один поток принимает данные, введенные пользователем,
и записывает их в файл, а другие потоки считывают данные из этого файла и образовы-
вают веденный текст. Считывание не должно происходить в тот момент, когда идет за-
пись. В обоих случаях надо принять меры по координации последовательности опера-
ций в нескольких потоков.
Одно из возможных решений заключается в создании глобальной переменной типа
Boolean, которую один из потоков будет использовать с целью информирования других
потоков о том, что объект занят. Например, поток, записывающий данные в файл, может
присвоить переменной bDone значение TRUE, а потоки, считывающие данные из файла,
будут циклически просматривать эту переменную до тех пор, пока ее значение не изме-
нится. Такая схема вполне работоспособна, однако циклический просмотр флага не-
сколькими потоками занимает много времени процессора. Вот почему в Win32 поддер-
живается набор синхронизирующих объектов [9, 12]. Перечислим их.
Объект типа исключающий семафор функционирует подобно узкой двери, "про-
пуская" (т.е. давая допуск) одновременно по одному потоку.
61
      Среди атрибутов объекта потока различают базовый и динамический приоритеты.
При вызове команды для изменения приоритета потока меняется его базовый приоритет,
который не может быть выше или ниже приоритета процесса-владельца более чем на 2
уровня. Операционная система способствует «продвижению» потока для его выполне-
ния. Для этого система поддерживает динамический приоритет потоков, которые вы-
полняют важные задачи. Например, если процесс выводит информацию в окно, либо
считывает данные с диска временно повышается приоритет всех потоков такого процес-
са. Эти временные приращения в сумме с базовым приоритетом образуют динамический
приоритет процесса. Планировщик определяет очередность выполнения потоков на ос-
новании их динамического приоритета. Со следующим тактом процесса приращение
приоритета начинает уменьшаться на один уровень, постепенно достигая уровня базово-
го приоритета.
      Выбирая поток, который будет выполняться следующим, программа-планировщик
начинает просмотр очереди заданий с потоков, имеющий наивысший приоритет, выпол-
няет их, а затем переходит к остальным потокам. Однако иногда в очереди заданий со-
держатся не все созданные в системе потоки, поскольку некоторые из них могут быть
приостановлены или заблокированы. В каждый момент времени поток может находить-
ся в одном из шести состояний.
Ready (готов) - поставлен в очередь и ожидает выполнения.
Standby (ближайший) - готов быть выполненным следующим.
Running (выполнение) - находится в режиме выполнения и взаимодействует с централь-
ным процессором.
Waiting (ожидание) не выполняется, ожидая сигнала выполнения.
Transition (промежуточное) будет выполняться после того, как система загрузит его
контекст.
Terminated (завершен) - выполнение завершено, однако объект не удален.
      Когда программа-планировщик выбирает из очереди готовый к выполнению поток,
она загружает его контекст. В состав контекста входит набор значений регистров про-
цессора, стек ядра, блок параметров окружения потока и пользовательский стек в адрес-
ном пространстве процесса, который является владельцем данного потока. Если часть
контакта была записана на диск, поток проходит в промежуточное состояние и ожидает,
пока система соберет все составные части контекста.
      Чтобы потоки могли надежно работать, их необходимо синхронизировать. Пред-
ставьте себе, что один поток создает кисть, а затем создает несколько потоков, которые
вместе используют эту кисть для выполнения графических операций. Первый поток не
должен уничтожать кисть до тех пор, пока другие потоки не завершат операции рисова-
ния. Или представьте себе, что один поток принимает данные, введенные пользователем,
и записывает их в файл, а другие потоки считывают данные из этого файла и образовы-
вают веденный текст. Считывание не должно происходить в тот момент, когда идет за-
пись. В обоих случаях надо принять меры по координации последовательности опера-
ций в нескольких потоков.
      Одно из возможных решений заключается в создании глобальной переменной типа
Boolean, которую один из потоков будет использовать с целью информирования других
потоков о том, что объект занят. Например, поток, записывающий данные в файл, может
присвоить переменной bDone значение TRUE, а потоки, считывающие данные из файла,
будут циклически просматривать эту переменную до тех пор, пока ее значение не изме-
нится. Такая схема вполне работоспособна, однако циклический просмотр флага не-
сколькими потоками занимает много времени процессора. Вот почему в Win32 поддер-
живается набор синхронизирующих объектов [9, 12]. Перечислим их.
      Объект типа исключающий семафор функционирует подобно узкой двери, "про-
пуская" (т.е. давая допуск) одновременно по одному потоку.

                                         61