Этапы жизненного цикла процесса.
Жизненный цикл процесса в UNIX-системах.
Процессы и организация планирования процессов
VI. Планирование процессов
Тема
Жизненный цикл процесса в UNIX-системах может быть разбит на несколько состояний.
1.5.1. Состояния процесса в UNIX-системах:
1. Процесс создан системным вызовом fork и находится в переходном состоянии, т. е. он существует, но не готов к запуску и не находится в состоянии сна (начало жизненного цикла процесса).
2. Процесс не выполняется, но готов к запуску, т. е. он находится в очереди на выполнение и обладает всеми необходимыми ему ресурсами, кроме процессора, и ждет, когда планировщик процессов выберет его (состояние runnable).
3. Процесс находится в состоянии сна (asleep), ожидая недоступного в данный момент ресурса (например, завершения операции ввода-вывода).
4. Процесс выполняется в пользовательском режиме, т. е.процессором выполняются прикладные инструкции данного процесса.
5. Процесс выполняется в режиме ядра, т. е.процессором выполняются системные инструкции ядра от имени процесса.
6. Процесс возвращается из режима ядра в режим задачи (пользовательский режим), но ядро прерывает его и производит переключение контекста (образа) для запуска более приоритетного процесса.
7. Процесс выполняет системный вызов exit и переходит в состояние зомби (zombie, defunct), т. е., как такового, процесса не существует, но остаются записи, содержащие код возврата и временную статистику его выполнения, доступную для родительского процесса (конечное состояние в жизненном цикле процесса).
Переход из одного состояния в другое происходит в зависимости от наступления определенных событий в системе.
1. Процесс начинает свой жизненный путь с состояния 1, когда родительский процесс выполняет системный вызов fork.
2. После того, как создание процесса полностью завершено, процесс завершает дочернюю часть вызова fork и переходит в состояние 2, т. е. готовности к запуску, ожидая своей очереди на выполнение.
3. Когда планировщик процессов выбирает процесс для выполнения, процесс переходит в состояние 4, т. е. выполняется в пользовательском режиме.
4. Выполнение в пользовательском режиме может завершится в результате системного вызова или прерывания, тогда процесс переходит в состояние 5, т. е. в режим ядра, в котором выполняется код системного вызова или прерывания.
5. После этого процесс опять может вернуться в состояние 4, т. е. в пользовательский режим.
6. Во время выполнения системного вызова процесса в режиме ядра процессу может понадобиться недоступный в данный момент ресурс. Для ожидания доступа к такому ресурсу процесс делает системный вызов sleep и переходит в состояние 3, т. е. в состояние сна. При этом процесс добровольно освобождает вычислительные ресурсы, которые предоставляются следующему наиболее приоритетному процессу.
7. Когда ресурс становиться доступным, ядро пробуждает процесс, используя вызов wakeup, помещает его в очередь на выполнение, и, таким образом, процесс переходит в состояние 2, т. е. готовности к запуску.
8. Процесс выполняет системный вызов exit и заканчивает свое выполнение, а также он может быть завершен вследствие получения сигнала. В любом случае ядро освобождает ресурсы, принадлежащие процессу, за исключением кода возврата и статистики его выполнения, и переводит процесс в состояние зомби, в котором он находится до тех пор, пока родительский процесс не выполнит системный вызов wait, после чего вся информация о процессе будет уничтожена, а родительский процесс получит код возврата завершившегося процесса.