
- •Операционные системы
- •VI. Планирование процессов
- •1. Процессы и организация планирования процессов
- •1.5. Жизненный цикл процесса в unix-системах.
- •1.5.1. Состояния процесса в unix-системах:
- •1.5.2. Этапы жизненного цикла процесса.
- •1.6. Переключение контекста процесса.
- •1.7. Приоритеты процессов.
- •1.8. Синхронизация процессов.
- •2. Основные понятия планирования процессов
- •2.1. Ситуации, при которых необходимо планирование процессов.
- •2.2. Основные системы планирования процессов.
- •3. Планирование процессов в системах пакетной обработки
- •3.1. Принцип планирования процессов Первый пришел – первым обслужен (fifo - First In Fist Out).
- •3.2. Принцип планирования процессов Кратчайшая задача – первая.
- •3.3. Принцип планирования процессов Наименьшее оставшееся время выполнения.
- •3.4. Принцип трехуровневого планирования процессов.
Операционные системы
Тема
VI. Планирование процессов
1. Процессы и организация планирования процессов
1.5. Жизненный цикл процесса в unix-системах.
Жизненный цикл процесса в UNIX-системах может быть разбит на несколько состояний.
1.5.1. Состояния процесса в unix-системах:
1. Процесс создан системным вызовом fork и находится в переходном состоянии, т. е. он существует, но не готов к запуску и не находится в состоянии сна (начало жизненного цикла процесса).
2. Процесс не выполняется, но готов к запуску, т. е. он находится в очереди на выполнение и обладает всеми необходимыми ему ресурсами, кроме процессора, и ждет, когда планировщик процессов выберет его (состояние runnable).
3. Процесс находится в состоянии сна (asleep), ожидая недоступного в данный момент ресурса (например, завершения операции ввода-вывода).
4. Процесс выполняется в пользовательском режиме, т. е. процессором выполняются прикладные инструкции данного процесса.
5. Процесс выполняется в режиме ядра, т. е. процессором выполняются системные инструкции ядра от имени процесса.
6. Процесс возвращается из режима ядра в режим задачи (пользовательский режим), но ядро прерывает его и производит переключение контекста (образа) для запуска более приоритетного процесса.
7. Процесс выполняет системный вызов exit и переходит в состояние зомби (zombie, defunct), т. е., как такового, процесса не существует, но остаются записи, содержащие код возврата и временную статистику его выполнения, доступную для родительского процесса (конечное состояние в жизненном цикле процесса).
1.5.2. Этапы жизненного цикла процесса.
Переход из одного состояния в другое происходит в зависимости от наступления определенных событий в системе.
1. Процесс начинает свой жизненный путь с состояния 1, когда родительский процесс выполняет системный вызов fork.
2. После того, как создание процесса полностью завершено, процесс завершает дочернюю часть вызова fork и переходит в состояние 2, т. е. готовности к запуску, ожидая своей очереди на выполнение.
3. Когда планировщик процессов выбирает процесс для выполнения, процесс переходит в состояние 4, т. е. выполняется в пользовательском режиме.
4. Выполнение в пользовательском режиме может завершится в результате системного вызова или прерывания, тогда процесс переходит в состояние 5, т. е. в режим ядра, в котором выполняется код системного вызова или прерывания.
5. После этого процесс опять может вернуться в состояние 4, т. е. в пользовательский режим.
6. Во время выполнения системного вызова процесса в режиме ядра процессу может понадобиться недоступный в данный момент ресурс. Для ожидания доступа к такому ресурсу процесс делает системный вызов sleep и переходит в состояние 3, т. е. в состояние сна. При этом процесс добровольно освобождает вычислительные ресурсы, которые предоставляются следующему наиболее приоритетному процессу.
7. Когда ресурс становиться доступным, ядро пробуждает процесс, используя вызов wakeup, помещает его в очередь на выполнение, и, таким образом, процесс переходит в состояние 2, т. е. готовности к запуску.
8. Процесс выполняет системный вызов exit и заканчивает свое выполнение, а также он может быть завершен вследствие получения сигнала. В любом случае ядро освобождает ресурсы, принадлежащие процессу, за исключением кода возврата и статистики его выполнения, и переводит процесс в состояние зомби, в котором он находится до тех пор, пока родительский процесс не выполнит системный вызов wait, после чего вся информация о процессе будет уничтожена, а родительский процесс получит код возврата завершившегося процесса.