Что значит «запустить процесс» с точки зрения операционной системы?

Когда пользователь или система инициирует выполнение программы, происходит не просто открытие файла. Операционная система (ОС) выполняет сложную последовательность действий, результатом которой становится создание нового процесса. Если программа — это статичный набор инструкций, хранящийся на диске (исполняемый файл с расширением .exe, .app, .sh и т.д.), то процесс — это динамическая сущность, «живой» экземпляр этой программы, загруженный в оперативную память и выполняемый процессором.

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

Ключевые этапы запуска процесса

Запуск процесса — это многошаговая процедура, которую координирует ядро ОС. Основные этапы включают:

  1. Поиск и проверка исполняемого файла. Система находит файл по указанному пути, проверяет права доступа (может ли текущий пользователь его выполнить) и корректность формата.
  2. Создание нового адресного пространства. ОС резервирует область оперативной памяти для кода программы, данных и стека. Это изолированное «песочное» пространство, защищающее процесс от вмешательства других процессов.
  3. Загрузка кода и данных. Содержимое исполняемого файла (машинные инструкции, статические переменные) копируется из файловой системы в выделенную память.
  4. Инициализация структур данных процесса. Ядро создаёт и заполняет дескриптор процесса (Process Control Block, PCB). Это главная запись, содержащая всю информацию о процессе:
    • PID (Process Identifier) — уникальный числовой идентификатор процесса в системе.
    • Состояние процесса (выполняется, ожидает, готов к выполнению).
    • Значения регистров процессора (программный счётчик, указатель стека).
    • Таблицы открытых файлов и дескрипторов.
    • Информация о планировании и приоритете.
    • Данные об использовании ресурсов (процессорное время, память).
  5. Настройка начального контекста выполнения. Устанавливается точка входа в программу (как правило, функция main()), подготавливаются аргументы командной строки и переменные окружения.
  6. Передача управления программе. Процессор начинает выполнять инструкции программы. Процесс переходит в состояние «готов к выполнению», а затем, когда планировщик ОС предоставит ему квант времени, — в состояние «выполняется».

Чем процесс отличается от программы и потока?

Чтобы понять суть процесса «запустить», важно разграничить три ключевых понятия.

Программа vs. Процесс: Программа — это рецепт, а процесс — это готовящееся по этому рецепту блюдо. Один и тот же рецепт (программа) может использоваться для приготовления множества порций (процессов). Например, можно запустить несколько копий текстового редактора Notepad — это будут разные процессы с разными PID, работающие с разными файлами, но использующие один и тот же код программы.

Процесс vs. Поток (thread): Процесс — это контейнер для ресурсов, а потоки — это легковесные единицы выполнения внутри этого контейнера. Один процесс может содержать несколько потоков, которые разделяют его память и открытые файлы, но выполняют разные части кода параллельно. Запуск процесса всегда подразумевает создание как минимум одного (главного) потока.

Как увидеть запущенные процессы?

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

  • В Windows: «Диспетчер задач» (Ctrl+Shift+Esc). На вкладке «Подробности» или «Процессы» отображаются все запущенные процессы, их PID, загрузка ЦП и памяти.
  • В Linux/macOS: Команда ps aux или top в терминале. Они показывают аналогичную информацию в текстовом виде.

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

Кто и как может запустить процесс?

Инициатором запуска процесса может быть:

  1. Пользователь: Через двойной клик по ярлыку, ввод команды в терминале или командной строке.
  2. Другой процесс (родительский): Большинство процессов запускаются другими процессами. Например, оболочка (bash, cmd.exe) запускает процессы по команде пользователя. Родительский процесс может «порождать» дочерние, создавая тем самым иерархию процессов.
  3. Операционная система: При загрузке ОС запускаются системные процессы и службы (демоны в Linux). Также планировщик задач (cron в Linux, Планировщик заданий в Windows) может запускать процессы по расписанию.

Таким образом, фраза «запустить процесс» описывает фундаментальный механизм, лежащий в основе работы любого компьютера. Это не просто «открыть программу», а сложная процедура выделения ресурсов, изоляции и подготовки к выполнению, которую обеспечивает ядро операционной системы.

Источники