Лекция № 7

Модель процесса. Создание процесса. Завершение процесса

Процесс в операционных системах — это исполнение программы с учетом всех необходимых ресурсов.

Когда процесс запускается, операционная система выделяет ему ресурсы (например, память, процессорное время и другие), управляет его выполнением, а по завершении освобождает эти ресурсы. Изучение процессов важно для понимания работы операционной системы, а также для оптимизации ее работы и разработки программного обеспечения.

1 Модель процесса

Модель процесса представляет собой абстракцию, которая описывает, как процессы работают в операционной системе, как они взаимодействуют с ресурсами и как выполняются.

Рассмотрим основные компоненты модели процесса:

Основные компоненты процесса:

  1. Идентификатор процесса (PID) — уникальный номер, который операционная система присваивает каждому процессу.
  2. Состояние процесса — процесс может находиться в различных состояниях: готов к выполнению, выполняется в данный момент, заблокирован в ожидании ресурсов и т. д.
  3. Контекст процесса — включает в себя информацию, необходимую для продолжения выполнения процесса, такую как регистры процессора, стек вызовов, указатели на память и другие данные.

2 Создание процесса

Создание нового процесса — это важный шаг в операционной системе, и процесс создается с помощью системных вызовов. Основные этапы создания процесса:

  1. Инициализация процесса: Процесс создается при помощи системного вызова, как правило, fork() в операционных системах семейства UNIX или CreateProcess в Windows. Этот вызов приводит к тому, что операционная система выделяет память для нового процесса и копирует данные из родительского процесса.
  2. Копирование контекста: Новый процесс, как правило, является копией родительского процесса (когда используется системный вызов fork()), и в процессе создания копируются все данные, связанные с выполнением: память, регистрационные данные и т. д. Однако могут быть и другие случаи, например, создание процесса с новым кодом, как это происходит при вызове exec() в UNIX.
  3. Ресурсы: Операционная система выделяет процессу необходимые ресурсы, такие как память и время процессора. В многозадачной операционной системе управление процессами осуществляется с помощью планировщика, который решает, когда процесс будет выполняться.
  4. Назначение состояния процесса: После создания процесс может быть в одном из нескольких состояний: в очереди на выполнение, готов к исполнению, выполняется или ожидает ресурсы.

3 Завершение процесса

Завершение процесса — это последний этап его жизненного цикла. Это может произойти по разным причинам: выполнение всех команд программы, ошибка, получение сигнала от другого процесса и другие. Основные причины завершения процесса:

  1. Нормальное завершение: Процесс завершает свою работу, когда он выполнил все операции, для которых был создан. В UNIX-системах это может быть вызов системного вызова exit(), который освобождает все ресурсы, связанные с процессом.
  2. Завершение по ошибке: Процесс может завершиться с ошибкой, например, если он не смог получить нужные ресурсы, произошла ошибка в коде или возникла ошибка выполнения.
  3. Прерывание процесса: Процесс может быть принудительно завершен другими процессами (например, при помощи команды kill в UNIX или аналогичных команд в других системах). Процесс, завершивший выполнение, может оставаться в системе некоторое время в так называемом "зомби-состоянии". В это время его ресурсы еще не освобождены, но процесс уже не выполняется.

Операционная система освобождает ресурсы и окончательно удаляет процесс только когда родительский процесс выполнит системный вызов wait().

4 Управление завершением процесса

Завершение процесса обычно происходит в несколько этапов:

  1. Освобождение ресурсов: память, дескрипторы файлов, другие ресурсы, которые были выделены процессу, освобождаются.
  2. Обработка статуса завершения: операционная система может оставить информацию о завершении процесса для его родителя, чтобы тот мог обработать результат работы дочернего процесса.
  3. Удаление процесса: процесс исчезает из списка процессов операционной системы.

Вопросы и ответы по лекции № 7

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

1. Что такое процесс в операционной системе?

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

Отличие между программой и процессом состоит в следующем:

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

2. Опишите этапы создания нового процесса.

Этапами создания нового процесса являются:

  1. Инициализация процесса через системный вызов (fork() в Unix-подобных ОС)
  2. Копирование контекста родительского процесса (память, файловые дескрипторы, окружающая среда)
  3. Выделение уникального идентификатора PID и адреса пространства памяти
  4. Установка начального состояния (готов к выполнению)
  5. Регистрация процесса в таблице процессов операционной системы

3. Какие ресурсы выделяет операционная система для процесса при его создании?

Ресурсы, выделяемые системой для процесса:

  • Адресное пространство виртуальной памяти
  • Время центрального процессора (квант времени)
  • Файловые дескрипторы и права доступа к вводу-выводу
  • Другие специальные ресурсы (сетевые сокеты, устройства ввода-вывода и т.д.)

4. Что происходит при завершении процесса в операционной системе? Какие могут быть причины его завершения?

При завершении процесса происходят следующие события:

  • Освобождаются используемые ресурсы (память, дескрипторы файлов и т.д.)
  • Удаляются таблицы управления процессами и файловыми дескрипторами
  • Родительскому процессу передается статус завершения (если применимо)

Причины завершения процесса:

  • Нормальное завершение после выполнения поставленных задач
  • Ошибка выполнения (например, недостаток ресурсов, сегментная ошибка)
  • Принудительное завершение другим процессом (например, команда kill)

5. Что такое "зомби-процесс" и когда он возникает?

Зомби-процесс — это процесс, завершившийся, но оставшийся зарегистрированным в таблице процессов, пока родительский процесс не обработает сигнал завершения, вызвав системный вызов wait(). Обычно это связано с неправильной обработкой завершения родительским процессом.

6. Какой системный вызов в UNIX используется для создания нового процесса?

Для создания нового процесса в UNIX-системах применяется системный вызов fork(), создающий точную копию текущего процесса.

7. В чём заключается различие между нормальным завершением процесса и его завершением по ошибке?

Различия заключаются в следующем:

  • Нормальное завершение означает успешное выполнение всех запланированных операций и передачу статуса завершения родительскому процессу
  • Завершение по ошибке вызвано сбоями (отсутствие ресурсов, неверный синтаксис, критические ошибки) и иногда сопровождается выдачей сообщений об ошибках

8. Как операционная система освобождает ресурсы, связанные с завершившимся процессом?

Система автоматически освобождает ресурсы таким образом:

  • Возвращает память обратно в систему
  • Закрывает открытые файлы и сетевые подключения
  • Удаляет записи о процессе из управляющих структур

Полностью удаление происходит лишь после обработки родительским процессом сигнала завершения.

9. Что произойдет в операционной системе, если родительский процесс не вызовет wait() для обработки завершения дочернего процесса?

Если родительский процесс не вызовет wait() для обработки завершения дочернего процесса, то процесс останется в состоянии "зомби", сохраняя запись в таблице процессов до момента, пока родитель не обработает его завершение. Сам процесс при этом уже остановлен и не потребляет никаких ресурсов.