Сведения о процессах
100%

Процессы · Урок 3

Сведения о процессах

Узнайте, какие состояние и ресурсы отличают работающий процесс от программы, сохранённой на диске.

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

Экземпляры программ и PID

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

$ pgrep -a cat
18420 cat
18457 cat

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

Что отличает два работающих экземпляра одной программы?

Состояние, отслеживаемое ядром

Ядро хранит сведения, необходимые для планирования и управления каждым процессом, включая:

  • идентификаторы процесса и родителя
  • пользовательские и групповые учётные данные
  • отображения виртуальной памяти
  • открытые файловые дескрипторы и текущий каталог
  • обработчики и ожидающие сигналы
  • политику планирования, приоритет и состояние выполнения
  • учётные данные, например время CPU

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

Какой компонент хранит состояние планирования и учётных данных процессов Linux?

Планирование CPU и память

Готовые к выполнению потоки конкурируют за время CPU. Планировщик ядра выбирает, какой поток будет работать на каком CPU, с учётом класса планирования, приоритета, привязки CPU, нагрузки и политики. Это не обещает каждому процессу равную долю.

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

Что выбирает планировщик Linux?

Завершение процесса и освобождение ресурсов

При завершении процесса ядро освобождает большинство его личных ресурсов, закрывает оставшиеся дескрипторы и записывает сведения о завершении для родителя. Небольшая запись таблицы процессов может оставаться зомби, пока родитель не получит код завершения. Поэтому «процесс закончил выполнение» и «все его следы исчезли из таблицы процессов» не всегда происходят одновременно.

Почему завершившийся процесс может ненадолго остаться зомби?

Урок завершён

Вы завершили Сведения о процессах

Теперь вы можете описать процесс как нечто большее, чем файл программы.

  • Отличайте сохранённый исполняемый код от живого экземпляра процесса.

  • Определяйте состояние и ресурсы, отслеживаемые ядром.

  • Связывайте планирование с готовыми потоками, а не равными долями.

  • Помните, что статус завершения может сохраняться, пока родитель его не получит.

Сохраните прогресс

Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.

Создать бесплатный аккаунт
Следующий Урок
Назад к Процессы