В ОС Linux используются две категории процессов: системные и пользовательские. Для их выполнения требуются два режима - пользовательский и режим ядра. Пользовательские процессы выполняются как в пользовательском режиме, таки и в режиме ядра при вызове системной функции, генерации исключения или обработке прерывания.
Любой процесс или задание может быть представлен структурой данных task_struct. Linux поддерживает таблицу task, представляющую собой список указателей на определенную в данный момент структуру данных. В этой структуре содержится следующая информация:
o Состояние – состояние выполнения процесса;
o Информация по планированию процесса – тип выполнения процесса (обычный или в реальном времени), приоритет процесса, счетчик времени, выделенного процессу;
o Идентификаторы – пользователя, группы – определяют право доступа к ресурсам пользователя и членов его группы.
o Обмен информацией между процессами
o Связи – содержание связей с родственными процессами.
o Время и таймеры – время создания процесса, количество процессорного времени, затраченного на процесс.
o Файловая система – указатели на все открытые файлы
o Виртуальная память – определяет отведенную данному процессу виртуальную память
o Контекст процесса
Все процессы могут находиться в следующих состояниях: выполняющийся, прерываемый (блокированный, ожидает наступления события), непрерываемый (блокированный, может продолжаться только при выполнении какого – то условия), остановленный (может быть продолжен при воздействии другого процесса) , зомби (остановленный процесс) (рис. 2.8.).
В Linux новый процесс создается путем копирования атрибутов предыдущего. Говорят новый процесс «клонирован». Два клонированных процесса пользуются одной и той же виртуальной памятью и фактически функционируют как два потока. Дополнительные структуры данных для потоков не задаются, поэтому фактически понятия процесс и поток в ОС Linux не различаются.