Состояния процесса

Время жизни процесса можно разделить на несколько состояний, каждое из которых имеет определенные характеристики, описывающие процесс. На рис. 2 показаны состояния, в которых процесс может находиться с момента создания до завершения выполнения:

1. Процесс выполняется в режиме задачи. Процессор выполняет прикладные инструкции данного процесса.

2. Процесс выполняется в режиме ядра. Процессор выполняет системные инструкции ядра ОС от имени процесса.

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

4. Процесс приостановлен ("спит"). Процесс "впадает в сон", когда он не может больше продолжать выполнение, например, когда ждет завершения ввода-вывода или освобождения занятого ресурса.

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

6. Процесс только что создан вызовом fork и находится в переходном состоянии: он существует, но не готов к запуску и не находится в состоянии сна.

7. Процесс выполнил системный вызов exit и перешел в состояние "зомби". Как такового процесса не существует, но осталась запись с системной таблице процессов, содержащая код возврата и временную статистику, доступные для родительского процесса.

Поскольку процессор в каждый момент времени выполняет только один процесс, в состояниях 1 и 2 на однопроцессорной машине может находиться самое большее один процесс.

Процессы непрерывно переходят из состояния в состояние в соответствии с определенными правилами. Диаграмма переходов (Рис.2) представляет собой ориентированный граф. Вершинами этого графа являются состояния, в которые может перейти процесс, а дугами – события, которые стали причинами перехода процесса из одного состояния в другое. Переход между двумя состояниями разрешен, если существует дуга из начального состояния в конечное. Несколько дуг может выходить из одного состояния, однако процесс переходит только по одной из них в зависимости от того, какое событие произошло в системе.

Рис. 2. Состояния процесса и переходы между ними

В режиме разделения времени может выполняться одновременно несколько процессов, и все они могут одновременно работать в режиме ядра. Если им разрешить свободно выполняться в режиме ядра, то они могут испортить глобальные информационные структуры, принадлежащие ядру. Запрещая произвольное переключение контекста и управляя возникновением событий, ядро защищает свою целостность. Ядро разрешает переключение контекста только тогда, когда процесс переходит из состояния "запуск в режиме ядра" в состояние "сна в памяти". Процессы, запущенные в режиме ядра, не могут быть выгружены другими процессами; поэтому иногда говорят, что ядро невыгружаемо, при этом процессы, находящиеся в режиме задачи, могут выгружаться системой. Ядро поддерживает целостность своих информационных структур, поскольку оно невыгружаемо, таким образом решая проблему "взаимного исключения" – обеспечения того, что критические секции программы выполняются в каждый момент времени в рамках самое большее одного процесса.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: