Процессы в Linux

В ОС Linux используются две категории процессов: системные и пользовательские. Для их выполнения требуются два режима - пользовательский и режим ядра. Пользовательские процессы выполняются как в пользовательском режиме, таки и в режиме ядра при вызове системной функции, генерации исключения или обработке прерывания.

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

o Состояние – состояние выполнения процесса;

o Информация по планированию процесса – тип выполнения процесса (обычный или в реальном времени), приоритет процесса, счетчик времени, выделенного процессу;

o Идентификаторы – пользователя, группы – определяют право доступа к ресурсам пользователя и членов его группы.

o Обмен информацией между процессами

o Связи – содержание связей с родственными процессами.

o Время и таймеры – время создания процесса, количество процессорного времени, затраченного на процесс.

o Файловая система – указатели на все открытые файлы

o Виртуальная память – определяет отведенную данному процессу виртуальную память

o Контекст процесса

Все процессы могут находиться в следующих состояниях: выполняющийся, прерываемый (блокированный, ожидает наступления события), непрерываемый (блокированный, может продолжаться только при выполнении какого – то условия), остановленный (может быть продолжен при воздействии другого процесса) , зомби (остановленный процесс) (рис. 2.8.).

В Linux новый процесс создается путем копирования атрибутов предыдущего. Говорят новый процесс «клонирован». Два клонированных процесса пользуются одной и той же виртуальной памятью и фактически функционируют как два потока. Дополнительные структуры данных для потоков не задаются, поэтому фактически понятия процесс и поток в ОС Linux не различаются.