|
|
||
3. Состояния потока. Модель пяти состояний потока |
||
Как видно из определения, поток описывает динамическое поведение всей программы или какой-либо функции в программе. Для удобства обозначений предположим, что программа является однопоточной. Тогда поток можно рассматривать как пару: поток = (процессор, программа) Программа может исполняться процессором только в том случае, если она готова к исполнению. То есть все системные ресурсы, которые необходимы для исполнения этой программы, свободны для использования. Кроме того, для исполнения программы необходимо, чтобы и сам процессор был свободен и готов к исполнению этой программы. Для более формального описания этих ситуаций вводятся понятия "состояние процессора" и "состояние программы”. При этом предполагают, что процессор и программа могут находиться в следующих состояниях. Состояния процессора: Состояния программы: Для краткости записи введем для этих состояний следующие названия: Состояния программы: Тогда мы можем определить состояние потока как пару состояний: Перечислив различные комбинации состояний процессора и программы, можно описать все возможные состояния потока. Введем для состояний потока следующие названия:
Будем считать, что состояние ("выделен", "не готова") является недостижимым для потока. То есть программе, не готовой к исполнению, процессор не выделяется. Более кратко эти состояния потока будем просто обозначать словами: "блокирован", "готов" и "выполняется". Для полноты картины нужно ввести для потоков еще два состояния: "новый" и "завершен", которые описывают соответственно поток, еще не начавший свою работу, и поток, завершивший свою работу. Тогда диаграмма возможных переходов потока из состояния в состояние может быть изображена, как это показано на рис. 2.1.
Рис. 2.1. Модель пяти состояний потока.
|
||
Оставшиеся четыре операции выполняются операционной системой.
Разрешим потокам также выполнять операции друг над другом. Для этого введем операции Suspend и Resume.
Используя эти операции, один поток может соответственно приостановить или возобновить исполнение другого потока независимо от того, в каком состоянии этот последний поток находится. Впрочем, заметим, что поток может приостановить и свое исполнение. Если над потоком выполнена операция Suspend, то будем говорить, что поток находится в приостановленном или подвешенном состоянии. Кратко будем говорить, что в этом случае поток "подвешен". Дополним диаграмму состояний потока, изображенную на рис. 2.1, этими новыми операциями и состояниями. Получим более полную диаграмму состояний потока, которая показана на рис. 2.2. ![]() Рис. 2.2. Модель семи состояний потока |
||
Теперь разрешим потоку выполнять операции над самим собой. Для этого введем операцию Sleep.
Разбудить поток должна операционная система по истечении заданного интервала времени, используя операцию Wakeup. Если поток выполнил операцию Sleep, то будем говорить, что он перешел в сонное состояние или "спит".
В результате можно построить полную диаграмму состояний потока, которая и приведена на рис. 2.3. ![]() Рис. 2.3. Модель девяти состояний потока В заключение этого параграфа скажем, что в конкретных операционных системах для работы с потоками могут быть определены и другие состояния, а также операции, которые переводят поток в эти состояния. |
||
3 |