154 Глава 9. Независимые процессы
• вновь созданный процесс устанавливается в состояние ready;
• процесс из состояния ready переходит в состояние active, если среди
процессов с равным приоритетом он дольше всех находится в состоянии
ready, нет процессов с более высоким приоритетом, и:
(1) активный процесс переходит в состояние blocked или dead;
(2) активный процесс имеет более низкий приоритет, чем процесс, на-
ходящийся в состоянии готовности;
(3) процесс, находящийся в состоянии готовности, имеет приоритет
активного процесса, а Processor получает сообщение yield;
• активный процесс переходит в состояние ready, когда он заменяется
процессом, находящимся в состоянии готовности, при условиях, опи-
санных выше в пунктах (2, 3);
• активный процесс переходит в состояние blocked, когда семафору, ко-
торый не имеет лишних сообщений signal, процесс посылает сообще-
ние wait;
• блокированный процесс переходит в состояние ready, когда он стано-
вится первым в очереди процессов, ожидающих у семафора, и с емафору
посылается сообщение signal;
• активный процесс переходит в состояние dead или когда достигается
конец блока, вызвавшего создание этого процесса, или когда выполня-
ется выражение Processor terminateActive.
Процессы и семафоры используются также, если пользователь вводит
и обрабатывает необходимую для него информацию. Единственным про-
цессом, который в системе Smalltalk Express отвечает на события, возни-
кающие при нажатии клавиш на клавиатуре или кнопок мыши, является
процесс пользовательского интерфейса (UserInterfaceProcess). В этом про-
цессе, сменяя друг друга, происходит либо ответ на событие ввода, либо
ожидание следующего ввода посредством посылки глобальной переменной
KeyboardSemaphore сообщения wait.
Когда никаких действий по вводу не происходит, могут выполняться
другие процессы, имеющие более низкие приоритеты. Объект Processor
гарантирует существование неактивного процесса с самым низким прио-
ритетом (idleTaskPriority), который выполняется тогда, когда нет никаких
других неактивных процессов.
Когда при работе пользователя с системой возникает ошибка, открыва-
ется окно отладчика. Отладчик открывается всегда, независимо от того, в
каком процессе произошла ошибка. Когда сообщение error: посылается в
процессе пользовательского интерфейса, текущий процесс приостанавли-
вается (становится блокированным), а для отладчика создается новый от-