No history yet

Процессы и программы

Программы и процессы

В мире Linux термины «программа» и «процесс» часто используются как взаимозаменяемые, но они означают совершенно разные вещи. Понимание этого различия — ключ к эффективному управлению системой.

Программа — это пассивный набор инструкций, хранящийся на диске. Это может быть исполняемый файл, такой как /bin/bash, или скрипт, который вы написали. Сама по себе программа ничего не делает. Её можно сравнить с рецептом в поваренной книге: все шаги описаны, но пока вы не начнёте готовить, ужина не будет.

Процесс — это программа в состоянии выполнения. Это активная сущность, которой операционная система выделила ресурсы и которая выполняется на процессоре. Если программа — это рецепт, то процесс — это сам акт приготовления блюда: вы отмеряете ингредиенты (выделение памяти), используете кухонную утварь (файлы и устройства ввода-вывода) и следуете инструкциям (выполнение кода).

Lesson image

От кода к исполнению

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

  1. Загрузка: Ядро считывает исполняемый файл программы с диска в оперативную память (RAM).
  2. Выделение ресурсов: Ядро выделяет процессу отдельное адресное пространство в памяти. Это пространство включает в себя место для кода программы (сегмент текста), глобальных переменных (сегмент данных) и динамической памяти (куча и стек).
  3. Создание структуры данных: Ядро создаёт в своей памяти структуру, называемую «Блок управления процессом» (Process Control Block, PCB). Эта структура хранит всю важную информацию о процессе: его уникальный идентификатор (PID), состояние (выполняется, ожидает, спит), используемые ресурсы, права доступа и многое другое.
  4. Постановка в очередь: После создания процесс помещается в очередь готовых к выполнению процессов. Планировщик ядра решает, когда и какому процессу предоставить доступ к ядру процессора (CPU) для выполнения инструкций.

Ресурсы и взаимодействие

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

Основные ресурсы, которые потребляет процесс:

  • Время ЦП (CPU time): Доля времени, которую процессор тратит на выполнение инструкций данного процесса.
  • Память (Memory): Адресное пространство в ОЗУ, необходимое для хранения кода, данных и стека.
  • Дескрипторы файлов: Указатели на открытые файлы, сокеты и другие каналы ввода-вывода. По умолчанию каждый процесс получает три стандартных потока: stdin (ввод), stdout (вывод) и stderr (ошибки).

Процессы не существуют в вакууме. Они постоянно взаимодействуют с ядром через системные вызовы. Например, когда процессу нужно прочитать файл, он не обращается к диску напрямую. Вместо этого он делает системный вызов к ядру, которое выполняет операцию от его имени и возвращает результат. Это позволяет ядру контролировать доступ к аппаратному обеспечению и управлять ресурсами.

Процессы также могут взаимодействовать друг с другом. Это называется межпроцессным взаимодействием (Inter-Process Communication, IPC). Linux предоставляет для этого множество механизмов: каналы (pipes), сокеты, разделяемая память и сигналы. Например, когда вы используете конвейер в командной строке (ls -l | grep .txt), вы создаёте два процесса, которые обмениваются данными через канал.

Lesson image

Итак, программа — это статический план, а процесс — это динамическое воплощение этого плана в жизнь, со своими ресурсами, состоянием и жизненным циклом, полностью управляемым ядром операционной системы.

Quiz Questions 1/5

В чем заключается основное различие между программой и процессом в Linux?

Quiz Questions 2/5

Какую ключевую структуру данных создает ядро в своей памяти для управления информацией о процессе, такой как его PID и состояние?