
- •Статические и динамические библиотеки (сборка и использование)
- •Автоматизация сборки приложений с помощью make
- •Создание процессов, системные вызовы fork и exec(см.Файлик)
- •Процессы демоны, создание процессов демонов Демоны и потоки
- •Структуры данных процесса
- •Идентификационные данные процесса
- •Контекст процесса
- •Состояния процессов
- •Другие параметры процесса
- •Режимы выполнения процессов
- •Средства межпроцессорного взаимодействия
- •Методы межпроцессного взаимодействия
- •[Править]Реализации
- •Проблемы межпроцессного взаимодействия
- •Обмен информацией между процессами
- •Сигналы
- •Разделяемая память
- •Семафоры, системные вызовы для работы с семафорами
- •Семафоры
- •3.1. Использование семафоров
- •3.2. Создание множеств семафоров
- •3.3. Управление семафорами
- •3.3.1. Использование semctl
- •Очереди сообщений, системные вызовы для работы с очередями сообщений
- •2.1. Использование очередей сообщений
- •2.2. Создание очередей сообщений
- •2.2.1. Использование msgget
- •Разделяемая память, системные вызовы для работы с разделяемой памятью
- •4.1. Использование разделяемых сегментов памяти
- •4.2. Создание разделяемых сегментов памяти
- •4.3. Управление разделяемыми сегментами памяти
- •4.3.1. Использование shmctl
Создание процессов, системные вызовы fork и exec(см.Файлик)
Процессы демоны, создание процессов демонов Демоны и потоки
Среди всех процессов можно выделить несколько особых типов процессов.
Системные процессы являются частью ядра и всегда находятся в оперативной памяти. Такие процессы не имеют соответствующих им программ в виде исполняемых файлов и запускаются особым образом при инициализации ядра системы. Примерами системных процессов являются планировщик процессов, диспетчер свопинга, диспетчер буферного кэша, диспетчер памяти ядра. Такие процессы являются фактически потоками ядра.
Демоны отличаются от обычных процессов только тем, что они работают в неинтерактивном режиме. Если с обычным процессом всегда ассоциирован какой-то терминал или псевдотерминал, через который осуществляется взаимодействие процесса с пользователем, то демон такого терминала не имеет. Демоны обычно используются для выполнения сервисных функций, обслуживания запросов от других процессов, причем не обязательно выполняющихся на данном компьютере. Пользователь не может непосредственно управлять демонами, он может влиять на их работу, только посылая им какие-то задания, например, отправляя документ на печать.
Одним из главных, если можно так выразиться, демонов в системе является демон init. Как уже говорилось, init является прародителем всех процессов в системе и имеет идентификатор 1. Выполнив задачи, поставленные в ему в файле inittab, демон init не завершает свою работу – он постоянно находится в памяти и отслеживает выполнение других процессов.
Прикладные процессы – это все остальные процессы, выполняющиеся в системе. Как правило, эти процессы порождаются в рамках сеанса работы пользователя. В каждом таком сеансе работы вначале запускается оболочка (командный интерпретатор) shell. Этот экземпляр оболочки называется login shell и завершение соответствующего процесса приводит к отключению пользователя от системы.
Процессы могут запускать ("внутри себя") отдельные потоки или, в буквальном переводе с английского, – нити (thread). Потоки — это параллельно выполняемые части одной программы. Потоки появились как логическое продолжение понятия процесса. Во-первых, появились некоторые задачи внутри ядра, которые требовалось выполнять параллельно с остальными работающими процессами. Во-вторых, ядро современной операционной системы должно уметь работать одновременно на нескольких процессорах. Эти две проблемы решаются посредством разделения некоторых частей ядра на отдельные потоки управления. Потоки ядра не имеют своего собственного адресного пространства и работают внутри пространства ядра. Фактически, они представлены лишь стеком данных и набором регистров, что позволяет ядру очень быстро переключаться между ними. Потоки ядра порождаются с помощью функции kernel_thread(), которая делает системный вызов clone(2) в режиме ядра. Потоки ядра обычно имеют высокий приоритет и не имеют пользовательского адресного пространства, они получают прямой доступ к адресному пространству ядра. Идентификаторы этих потоков находятся в начале диапазона числовых значений идентификаторов.
Потоки могут быть реализованы не только внутри ядра, но в пользовательских программах (более подробно об этом вы можете прочитать в статье [3]). С точки зрения системы потоки отличаются от других процессов только тем, что они выполняются в виртуальном адресном пространстве родительского процесса. В Linux потоки реализованы как процессы, запускаемые со специальным флагом.