Основы операционной системы UNIX


         

Жизненный цикл процесса в UNIX и основные системные вызовы


Жизненный цикл процесса в ОС UNIX может быть разбит на несколько состояний. Переход из одного состояния в другое происходит в зависимости от наступления определенных событий в системе.

Возможны следующие состояния процесса:

  • Процесс выполняется в пользовательском режиме. При этом процессором выполняются прикладные инструкции данного процесса.
  • Процесс выполняется в режиме ядра. При этом процессом выполняются системные инструкции ядра от имени процесса.
  • Процесс не выполняется, но готов к запуску, как только планировщик выберет его (состояние runnable). Процесс находиться в очереди на выполнение и обладает всеми необходимыми ему ресурсами, кроме процессора.
  • Процесс находиться в состоянии сна (asleep), ожидая недоступного в данный момент ресурса, например завершения операции ввода-вывода.
  • Процесс возвращается из режима ядра в режим задачи, но ядро прерывает его и производит переключение контекста для запуска более приоритетного процесса.
  • Процесс только что создан системным вызовом fork и находится в переходном состоянии: он существует, но не готов к запуску и не находиться в состоянии сна.
  • Процесс выполнил системный вызов exit и перешел в состояние зомби (zombie, defunct). Как такового процесса не существует, но остаются записи, содержащие код возврата и временную статистику его выполнения, доступную для родительского процесса. Это состояние является конечным в жизненном цикле процесса.
  • Процесс начинает свой жизненный путь с состояния 6, когда родительский процесс выполняет системный вызов fork. После того как создание процесса полностью завершено, процесс завершает "дочернюю часть" вызова fork и переходит в состояние 3 готовности к запуску, ожидая своей очереди на выполнение. Когда планировщик выбирает процесс для выполнения, он переходит в состояние 1 и выполняется в пользовательском режиме.

    Выполнение в пользовательском режиме завершается в результате системного вызова

    или прерывания, и процесс переходит в режим ядра, в котором выполняется код системного вызова или прерывания. После этого процесс опять может вернуться в пользовательский режим. Однако во время выполнения системного вызова процесса в режиме ядра процессу может понадобиться недоступный в данный момент ресурс. Для ожидания доступа к такому ресурсу, процесс делает системный вызов sleep и переходит в состояние 4 - сна. При этом процесс добровольно освобождает вычислительные ресурсы, которые предоставляются следующему наиболее приоритетному процессу. Когда ресурс становиться доступным, ядро "пробуждает процесс", используя вызов wakeup, помещает его в очередь на выполнение, и процесс переходит в состояние 3 готовности к запуску.




    Содержание  Назад  Вперед