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

В Linux процесс - это основной действующий модуль, занимающий место в операционной системе. Каждый процесс имеет уникальный идентификатор или ID. Любой процесс ассоциируется с идентификатором пользователя, и одним или несколькими идентификаторами групп.

Большинство современных операционных систем поддерживают процессы и нити. Процессы и нити отличаются друг от друга. Процесс представляет определенную исполняющуюся программу. Нить - отдельный контекст исполняющийся внутри процесса. Так, процесс может иметь несколько нитей конкурирующих за ресурсы при исполнении процесса. В Linux нить - это новый процесс. Родительский и порожденный процесс разделяют одно и то же адресное пространство.

В модели управления процессами UNIX создание процесса и запуск новой программы являются различными операциями. Системный вызов fork создает новый процесс. Вызов execve создает новую программу. При создании нового процесса не требуется запуска новой программы. Новый процесс может выполнять ук же самую программу. Аналогично, новая программа не требует создания нового процесса. Процесс может вызвать execve. Работающая программа прерывается. Новая программа выполняется в контексте старого процесса.

При работе большого количества процессов системе необходимо отслеживать их деятельность. Команда ps (process status) используется для получения списка работающих процессов. Она показывает ID процесса, терминал, с которого он запущен, состояние процесса (R - работает, S - ожидает), системное время используемое процессом, и имя команды, введенной в командной стоке,

В некоторых случаях команды могут порождать дочерние процессы. Так, если вы ввели команду ps, порожденный процесс будет отображен в списке. Если текущим пользователем, зарегистрированным в системе является root, он может видеть все процессы работающие в системе, как владелец этих процессов.

Опция -и показывает имена пользователей, а так же %CPU, то есть процент использования ресурсов процессора и %МЕМ, оли процент использования памяти.

Если процесс потребляет слишком много системных ресурсов или больше не нужен, процесс может быть прерван. Для уничтожения процесса используется команда kill.

$ kill

Обычный пользователь может уничтожить только "свои" процессы, но не процессы инициированные другими пользователями. Пользователь root может уничтожить любые процессы, кроме процесса init.


Взаимодействие процессов

Взаимодействие может иметь место в случаях:
• Один процесс информирует другой о свершении некоторого события
• Из одного процесса данные переносятся в другой процесс

На внутреннем уровне, Linux не использует сигналов для взаимодействия между процессами, работающими в режиме ядра. Вместо этого, для информирования о свершении асинхронного события используются структуры scheduling states и wait_queue.

Linux использует так же механизм семафоров. Преимущество использования семафоров в том, что большое количество семафоров может быть разделено множеством независимых процессов. Внутренне, стандартный механизм wait_queue используется для синхронизации взаимодействия процессов с семафорами.

Семафор - коммуникационная связь между двумя работающими процессами. Семафор не передает данные. Эта связь передает управляющую информацию между двумя независимо работающими процессами.

Для пересылки данных между процессами Linux использует механизм каналов. Каналы представляются как inode в программном обеспечении виртуальной файловой системы. Каждый канал имеет пару wait_queue структур для синхронизации приемника и передатчика.

Другой метод разделения данных между процессами - использование разделяемой памяти. Если один процесс записывает данные в разделяемый регион памяти, другой процесс может прочитать их. Недостатком такого механизма является отсутствие синхронизации. То есть процесс не может проверить, что регион был заполнен, и не может приостановить свое выполнение до завершения этой операции. Разделяемые области памяти создаются и удаляются процессами.
назад к оглавлению вперед

Rus. Open Source company, г. Саратов
ул. Орджоникидзе, 156, офис 203
тел: 8 (8452) 57-84-41
e-mail: info@rus_opensource.com

Главная | Обзоры | О разном
Карта сайта

Учебная литература:

Введение в Linux
Основы JAVA
Архивы

© 2013 opensourcerules.net