O Torvalds Linus

Сайт о *nix системах и всем что с ними связано

Процессы в Linux

Mar-1-2012 By root

Понятие процесса является фундаментальным в любой многозадачной операционной системе. Так, если 16 пользователей запустят программу vi, в системе будет работать 16 отдельных процессов (хотя все они используют один и тот же код). В исходном коде Linux процессы часто называются задачами или потоками.

В последних двух разделах описано, как можно создавать и уничтожать процессы. Мы также покажем, как в Linux организована поддержка многопоточных приложений: при этом Linux использует так называемые облегченные процессы.

Процессы, облегченные процессы и потоки

Термин процесс”имеет несколько различных значений. В этой книге мы будем придерживаться определения, которое обычно дается в учебниках по операционным системам: процесс —это выполняемый экземпляр программы.

С точки зрения ядра, предназначение процесса в том, чтобы действовать как отдельная сущность, которой выделены системные ресурсы (процессорное время, память и т. д.).

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

Ранние версии ядер Unix придерживались этой простой модели, но в современных Unix – системах она больше не используется. В настоящее время поддерживаются многопоточные приложения —программы, имеющие много относительно независимых ветвей, совместно использующих значительную часть структур данных, принадлежащих приложению. В таких системах процесс состоит из нескольких пользовательских потоков (или просто потоков), каждый из которых представляет выполняемую ветвь процесса. Сейчас многопоточные приложения пишутся с помощью стандартных наборов библиотечных функций, называемых библиотеками pthread (то есть библиотеками POSIX – потоков).

Старые версии ядра Linux не предлагали разработчикам поддержку многопоточных приложений. С точки зрения ядра, многопоточное приложение было обычным процессом. Ветви выполнения многопоточного приложения создавались, обрабатывались и планировались целиком в режиме пользователя, как правило, с помощью POSIX – совместимой библиотеки pthread.

POSIX – совместимые многопоточные приложения лучше всего работают с ядрами, поддерживающими группы потоков”. В Linux группой потоков называется набор облегченных процессов, которые реализуют многопоточное приложение и действуют как единое целое по отношению к некоторым системным вызовам, таким как getpid (), kill () и exit ().

Add A Comment