Процессом называется программа в стадии ее выполнения.
Процесс включает:
- программный код – последовательность команд, исполняемых процессором;
- данные, обрабатываемые программой;
- стек – динамически выделяемая память для хранения оперативной информации;
- системную информацию о выполняемой задаче (размещаемая память, открытые файлы, статус процесса, системные переменные окружения).
ОС UNIX является многозадачной. Это означает, что одновременно могут выполняться несколько процессов, причем часть процессов могут являться образцами одной и той же программы. Выполнение процесса заключается в исполнении набора машинных команд, который никогда непосредственно не передает управление набору команд другого процесса. Процесс считывает и записывает информацию в область данных и в стек, но ему недоступны данные и стеки других процессов. Современные реализации UNIX, как правило, выделяют каждому процессу независимые адресные пространства. В то же время процессы имеют возможность обмениваться друг с другом данными с помощью предоставляемых UNIX средств межпроцессного взаимодействия (сигналы, каналы, разделяемая память, семафоры, сообщения, файлы).
Процесс обладает средствами порождения новых процессов – системными вызовами exec (прекращение своей работы с замещением самого себя новым процессом) и fork (порождение полной копии процесса). Типичной также является конструкция «fork-и-exec» - процесс порождает свою копию, которая сразу же замещает себя на новый процесс; так производится запуск новой программы.
К основным атрибутам процесса в UNIX относятся:
- PID – уникальный целочисленный идентификатор процесса;
- PPID – идентификатор родительского процесса (процесса, породившего данный);
- Приоритет процесса – число в пределах от –19 до 19, определяющее относительную долю процессорного времени, отводимого данному процессу. Значение –19 соответствует максимальному приоритету, 0 – стандартному приоритету;
- TTY – терминальная линия, т.е. устройство, с которым по умолчанию ассоциирован стандартный ввод и вывод процесса (обычно – рабочее место, с которого запущен процесс).
- RID и RGID – соответственно идентификаторы пользователя, запустившего процесс, и его группы.
- EID и EGID – то же, но определяют пользователя, от имени которого действует процесс, что задает права доступа к файлам и системным операциям. Обычно (но не всегда) совпадают с RID и RGID.
Существуют следующие типы процессов:
1. Системные процессы. Являются частью ядра системы и всегда расположены в оперативной памяти. Обладают наивысшим приоритетом и полным доступом ко всем ресурсам системы. Выполняют системные функции: начальный запуск системы, управление памятью, диспетчеризация прикладных процессов, управление физическими устройствами, а также ряд важнейших сервисных функций – организация файловой системы, базовые сетевые операции (основные протоколы, firewall и т.п.) и т.д. Обычно ядро целиком загружается из единого двоичного файла (/unix, /vmunix, /kernel, /bzImage или др.) при старте системы (технология монолитного ядра). В некоторых системах часть функций вынесены в отдельные, динамически подключаемые и удаляемые файлы – модули ядра. Системы, в которых само ядро реализует лишь минимальный набор функций, а модули ядра несут основную функциональную нагрузку, называют системами, построенными по технологии микроядра.
2. Процессы-«демоны» (англ. daemon – от аббревиатуры Disk And Execution Monitor – следящий за диском и исполнением) – неинтерактивные процессы, которые запускаются обычным образом – путем загрузки в память соответствующих программных (исполняемых) файлов и выполняются в фоновом режиме. Обычно демоны запускаются при инициализации системы, но после инициализации ядра, и обеспечивают работу различных подсистем UNIX: системы доступа с терминалов, печати, сетевых услуг и т.д., а также серверных приложений (сервера Internet, баз данных и др.). Демоны не связаны ни с одним пользовательским сеансом работы и обычно не могут непосредственно управляться пользователем. Большую часть времени демоны ожидают, пока тот или иной процесс запросит определенную услугу, например, печать документа или доступ к базе данных. К числу важнейших процессов-демонов относятся:
- cron – отвечающий за периодический запуск процессов по предварительно заданному расписанию;
- syslog – обеспечивающий централизованное ведение журналов событий и сообщений (log-файлов);
- atd - выполняющий разовый запуск программ в указанное время;
- lpd – сервер печати;
- сетевые сервисы (см. раздел 9).
3. Прикладные (пользовательские) процессы. К прикладным относятся все остальные процессы, выполняющиеся в системе. Как правило, это процессы, порожденные в рамках пользовательского сеанса работы. Например, запуск любой команды (ls, mv…) породит соответствующий процесс этого типа. Важнейшим пользовательским процессом является основной командный интерпретатор (оболочка, shell), который обеспечивает работу пользователя в UNIX. Он запускается сразу же после успешного входа, обеспечивает ввод и выполнение команд; завершение работы основной оболочки приводит к отключению от системы.
Пользовательские процессы могут выполняться как в интерактивном (диалоговом), так и в фоновом режиме. При выходе пользователя из системы все его процессы уничтожаются.
В UNIX различается два класса исполняемых файлов (программ) – двоичные (бинарные) и интерпретируемые (сценарии, скрипты).
Двоичные программные файлы получаются путем компиляции исходных текстов программ (как правило, реализуемых на языке Си или Си++) и содержат набор машинных команд (инструкций процессора), непосредственно исполняемых процессором, а также статические исходные данные. Существуют собственно исполняемые двоичные файлы, а также библиотеки. Библиотеки представляют собой фрагменты программного кода, вынесенные в отдельный файл и подключаемые к основной программе либо на этапе компиляции (статическое связывание), либо на этапе исполнения (динамическое связывание, называемое также использованием разделяемых библиотек). Большинство исполняемых файлов используют те или иные разделяемые библиотеки.
Среди стандартных двоичных форматов в современных UNIX-системах наиболее распространены COFF и ELF, а также «старый» формат – a.out. Двоичные программные файлы обеспечивают максимальное быстродействие.
Интерпретируемые программы представляют собой текстовые файлы, составленные из команд некоторого командного языка (обычно это один из стандартных командных интерпретаторов (shell) либо интерпретирующий язык программирования, напр. Perl). При запуске программы-сценария система загружает в память соответствующий интерпретатор, обычно выполненный в виде бинарного файла, который считывает команды и исполняет их. Производительность программ-сценариев обычно ниже за счет времени, необходимого на анализ текста команд и преобразования их в соответствующий набор процессорных инструкций.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.