К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

3. Состояния потока. Модель  пяти состояний потока

Как видно из определения, поток описывает динамическое поведение всей программы или какой-либо функции в программе. Для удобства обозначений предположим, что программа является однопоточной. Тогда поток можно рассматривать как пару:

поток = (процессор, программа)

Программа может исполняться процессором только в том случае, если она готова к исполнению. То есть все системные ресурсы, которые необходимы для исполнения этой программы, свободны для использования. Кроме того, для исполнения программы необходимо, чтобы и сам процессор был свободен и готов к исполнению этой программы. Для более формального описания этих ситуаций вводятся понятия "состояние процессора" и "состояние программы”. При этом предполагают, что процессор и программа могут находиться в следующих состояниях.

Состояния процессора:
•   процессор не выделен для исполнения программы;
•   процессор выделен для исполнения программы.

Состояния программы:
•  программа не готова к исполнению процессором;
•  программа готова к исполнению процессором.

Для краткости записи введем для этих состояний следующие названия:
Состояния процессора:
•  "не выделен";
•  "выделен".

Состояния программы:
•  "не готова";
•   "готова”.

Тогда мы можем определить состояние потока как пару состояний:
состояние потока = (состояние процессора, состояние программы).

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

  • поток блокирован = ("не выделен", "не готова");
  • поток готов к выполнению = ("не выделен", "готова");
  • поток выполняется = ("выделен", "готова");

Будем считать, что состояние ("выделен", "не готова") является недостижимым для потока. То есть программе, не готовой к исполнению, процессор не выделяется. Более кратко эти состояния потока будем просто обозначать словами: "блокирован", "готов" и "выполняется". Для полноты картины нужно ввести для потоков еще два состояния: "новый" и "завершен", которые описывают соответственно поток, еще не начавший свою работу, и поток, завершивший свою работу. Тогда диаграмма возможных переходов потока из состояния в состояние может быть изображена, как это показано на рис. 2.1.
В результате мы получили простейшую диаграмму переходов потока из состояния в состояние. Сами переходы потока из состояния в состояние, которые на диаграмме обозначаются дугами, описывают некоторые операции над потоком. Названия этих операции указаны рядом со стрелками. Кратко опишем эти операции.

  • Операция Create выполняется потоком, который создает новый поток из функции. Эта операция переводит поток из состояния "новый" в состояние "готов".
  • Операция Exit выполняется самим исполняемым потоком в случае его завершения. Эта операция переводит поток из состояния "выполняется" в состояние "завершен".
Рис. 2.1. Модель пяти состояний потока.

Оставшиеся четыре операции выполняются операционной системой.

  • Операция Run запускает готовый поток на выполнение, т. е. выделяет ему процессорное время. Эта операция переводит поток из состояния "готов" в состояние "выполняется". Поток получает процессорное время в том случае, если подошла его очередь к процессору на обслуживание.
  • Операция interrupt задерживает исполнение потока и переводит его из состояния "выполняется" в состояние "готов". Эта операция выполняется над потоком в том случае, если истекло процессорное время, выделенное потоку на исполнение, или исполнение потока прервано по каким-либо другим причинам.
  • Операция Block блокирует исполнение потока, т. е. переводит его из со­стояния "выполняется" в состояние "блокирован". Эта операция выполняется над потоком в том случае, если он ждет наступления некоторого события, например, завершения операции ввода-вывода или освобождения ресурса.
  • Операция Unblock разблокирует поток, т. е. переводит его из состояния "блокирован" в состояние "готов". Эта операция выполняется над потоком в том случае, если событие, ожидаемое потоком, наступило.

Разрешим потокам также выполнять операции друг над другом. Для этого введем операции Suspend и Resume.

  • Операция Suspend приостанавливает исполнение потока.
  • Операция Resume возобновляет исполнение потока.

Используя эти операции, один поток может соответственно приостановить или возобновить исполнение другого потока независимо от того, в каком состоянии этот последний поток находится. Впрочем, заметим, что поток может приостановить и свое исполнение. Если над потоком выполнена операция Suspend, то будем говорить, что поток находится в приостановленном или подвешенном состоянии. Кратко будем говорить, что в этом случае поток "подвешен". Дополним диаграмму состояний потока, изображенную на рис. 2.1, этими новыми операциями и состояниями. Получим более полную диаграмму состояний потока, которая показана на рис. 2.2.

Рис. 2.2. Модель семи состояний потока

Теперь разрешим потоку выполнять операции над самим собой. Для этого введем операцию Sleep.

  • Операция Sleep позволяет потоку приостановить свое исполнение на некоторый интервал времени или, другими словами, заснуть.

Разбудить поток должна операционная система по истечении заданного интервала времени, используя операцию Wakeup. Если поток выполнил операцию Sleep, то будем говорить, что он перешел в сонное состояние или "спит".

  • Операция Wakeup позволяет операционной системе разбудить поток.

В результате можно построить полную диаграмму состояний потока, кото­рая и приведена на рис. 2.3.


Рис. 2.3. Модель девяти состояний потока

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


Предыдущая        В начало страницы       Следующая
3