Состояния процесса
Жизненный цикл процесса может быть разбит на несколько состояний. Переход процесса из одного состояния в другое происходит в зависимости от наступления тех или иных событий в системе.
На рисунке представлена диаграмма состояния процесса.
Процесс выполняется в режиме задачи. При этом процессором выполняются прикладные инструкции данного процесса.
Процесс выполняется в режиме ядра. При этом процессором выполняются системные инструкции ядра ОС от имени процесса.
Процесс не выполняется, но готов к выполнению
Процесс находится в состоянии сна, ожидая недоступного в данный момент ресурса, например завершения операции ввода-вывода.
Процесс возвращается из режима ядра в режим задачи, но ядро прерывает его и производит п
ереключение
контекста для запуска более
высокоприоритетного процесса.Процесс только что создан вызовом fork и находится в переходном состоянии: он существует, но не готов к запуску и не находится в состоянии сна.
Процесс выполнил системный вызов exit() и перешел в состояние зомби. Как такового процесса не существует, но остаются записи. Это состояние является конечным в жизненном цикле процесса.
Не все процессы проходят через вышеописанные состояния.
Процесс начинает свой жизненный путь с состояния 6, когда родительский процесс выполняет системный вызов fork, после создания процесса он переходит в состояние 3 готовности к запуску, ожидая своей очереди на выполнение. Когда планировщик выбирает процесс из очереди готовых процессов, он переходит в состояние 1 и выполняется в режиме задачи.
Выполнение в режиме задачи завершается в результате системного вызова или прерывания, и процесс переходит в режим ядра, в котором выполняется код системного вызова или прерывания. После этого процесс опять может вернуться в режим задачи. Если во время выполнения системного вызова в режиме ядра процессу может понадобиться недоступный в данный момент ресурс, то процесс переходит в состояние сна (или ожидания ресурса). Для ожидания доступа к такому ресурсу, процесс вызывает функцию ядра sleep() и переходит в состояние сна.
Когда ресурс становится доступным ядро пробуждает процесс, используя функцию wakeup(), и помещает его в очередь на выполнение, и процесс переходит в состояние «готов к запуску».
Процесс состоит из адресного пространства и набора структур данных, содержащихся внутри ядра.
Адресное пространство представляет собой совокупность страниц памяти, которые ядро выделило для выполнения процесса.
Адресное пространство содержит сегменты для кода программы, которую выполняет процесс, используемые процессом переменные, стек процесса и различную вспомогательную информацию, необходимую ядру во время работы процесса.
В структурах данных ядра хранится различная информация о каждом процессе. К наиболее важным сведениям относятся:
Таблица распределения памяти процесса;
Текущий статус процесса;
Приоритет выполнения процесса;
Информация о ресурсах, которые использует процесс;
Владелец процесса.
