Linux Ubuntu 10.04 LTS

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

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

Ядро системы предоставляет возможности (набор системных вызовов) для порождения новых процессов, отслеживания окончания порожденных процессов и т.д. С другой стороны, в ОС Linux ядро системы - это полностью пассивный набор программ и данных. Любая программа ядра может начать работать только по инициативе некоторого пользовательского процесса либо по причине внутреннего или внешнего прерывания (примером внутреннего прерывания может быть прерывание из-за отсутствия в основной памяти требуемой страницы виртуальной памяти пользовательского процесса; примером внешнего прерывания является любое прерывание процессора по инициативе внешнего устройства). В любом случае считается, что выполняется ядерная часть обратившегося или прерванного процесса, т.е. ядро всегда работает в контексте некоторого процесса.

Также в ОС Linux присутствует механизм легковесных процессов (light-weight processes), или нитей, или потоков управления (threads). Нить - это процесс, выполняющийся в виртуальной памяти, используемой совместно с другими нитями того же "тяжеловесного" (т.е. обладающего отдельной виртуальной памятью) процесса.

Подсистема управления процессами включает в себя:

1. создание и удаление процессов;

2. распределение системных ресурсов;

3. синхронизацию процессов;

4. межпроцессовое взаимодействие.

Программа – это один из ресурсов, которые использует процесс. Процесс может существовать в 2-х состояниях: задача и ядро (вызов системной функции). В ОС Linux существует 2 типа объектов: файлы и процессы. Когда вы запускаете программу, ядро запускает соответствующий исполняемый файл, создает образ процесса и передает ему управление. Стандартная функция создания процесса – fork(). К моменту выхода из этой функции уже существуют 2 процесса, но возвращаемое значение у них разное – порождающий процесс получает возвращаемое значение, а порожденный процесс – 0.

Существуют следующие виды процессов:

Системные процессы – не имеют соответствующих им программ в виде исполняемых файлов и запускаются особым образом при инициализации ядра системы.

Демоны – не интерактивные процессы, которые запуска­­ются обычным образом и выполняются в фоновом режиме (обеспечивают работу различных подсистем Unix). Большую часть времени демоны ожидают, когда тот или иной процесс запросит определенную услугу.

Прикладные процессы – все остальные, которые выполняются в системе.