
- •Глава 3
- •Раздел 3 Управление процессами и потоками
- •3.1. Базовые понятия процессов и потоков
- •3.1.2. Модели процессов и потоков
- •3.1.3. Составные элементы процессов и потоков
- •3.2. Многопотоковость и ее реализация
- •3.2.1. Понятие параллелизма
- •3.2.2. Виды параллелизма
- •3.2.3. Преимущества и недостатки многопотоковости
- •3.2.4. Способы реализации модели потоков
- •3.2.5 Состояния процессов и потоков
- •3.3 Описание процессов и потоков
- •3.3.1. Управляющие блоки процессов и потоков
- •3.3.2. Образы процесса и потока
- •3.4. Переключение контекста и обработка прерываний
- •3.4.1. Организация переключения контекста
- •3.4.2. Обработка прерываний
- •3.5 Создание и завершение процессов и потоков
- •3.5.1 Создание процессов
- •3.5.2. Иерархия процессов
- •3.5.3. Управление адресным пространством во время создания процессов
- •3.5.4. Особенности завершения процессов
- •3.5.5. Синхронное и асинхронное выполнение процессов
- •3.5.6. Создание и завершение потоков
- •3.6 Управление потоками в Linux
- •3.6.1. Базовая поддержка многотопотоковости
- •3.6.2. Особенности новой реализации много поточности в ядре Linux
- •3.6.3. Потоки ядра Linux
- •3.7 Управление процессами в Windows хр
- •3.7.1. Составные элементы процесса
- •3.7.2. Структуры данных процесса
- •3.7.3. Создание процессов
- •3.7.4. Завершение процессов
- •3.7.5. Процессы и ресурсы. Таблица объектов процесса
- •3.8 Управление потоками в Windows хр
- •3.8.1. Составные элементы потока
- •3.8.2. Структуры данных потока
- •3.8.3. Создание потоков
3.5 Создание и завершение процессов и потоков
Средства создания и завершение процессов дают возможность динамично изменять в операционной системе набор применений, которые выполняются. Средства создания и завершение потоков является основой для создания многотопотоковых программ.
3.5.1 Создание процессов
Базовые принципы создания процессов
Процессы могут создаваться ядром системы во время ее инициализации. Например, в UNIX-совместимых системах таким процессом может быть процесс инициализации системы init, в Windows ХР - процессы подсистем среды (Win32 или POSIX). Такое создание процессов, однако, является исключением, а не правилом.
Чаще всего процессы создаются во время выполнения других процессов. В этом случае процесс, который создает другой процесс, называют предком, а созданный им процесс - потомком.
Новые процессы могут быть созданы во время работы приложения соответственно его логике (компилятор может создавать процессы для каждого этапа компиляции, веб-сервер - для обработки прибывших запросов) или непосредственно по запросу пользователя (например, из командного интерпретатора, графической оболочки или файлового менеджера).
Интерактивные и фоновые процессы
Различают два типа процессов с точки зрения их взаимодействия с пользователем.
-
Интерактивные процессы взаимодействуют с пользователями непосредственно, принимая от них данные, введенные с помощью клавиатуры, мыши и т.п.. Примером интерактивного процесса может быть процесс текстового редактора или интегрированной среды разработки.
-
Фоновые процессы с пользователем не взаимодействуют непосредственно. Обычно они запускаются во время старта системы и ждут запросы от других приложений. Некоторые из них (системные процессы) поддерживают функционирование системы (реализуют фоновое печатание, сетевые средства и т.п.), другие выполняют специализированные задачи (реализуют веб-сервери, серверы баз данных и т.п.). Фоновые процессы также называют службами (services, в системах линии Windows ХР) или демонами (daemons, в UNIX).
3.5.2. Иерархия процессов
После того как процесс-предок создал процесс-потомок, нужно обеспечить их взаимосвязь. Есть разные варианты решения этой задачи.
Можно организовать на равные ОС однозначную связь «предок-потомок» так, чтобы для каждого процесса всегда можно было определить его предка. Например, если процессы определены уникальными идентификаторами, то для реализации этого подхода в управляющем блоке процесса-потомка должен всегда сохраняться идентификатор процесса-предка или ссылка на его управляющий блок.
Таким образом формируется иерархия (дерево) процессов, поскольку потомки могут в свою очередь создавать новых потомков и т.д. В таких системах существует специальный исходный процесс (в UNIX-системах его называют init), с которого начинается построение дерева процессов (его запускает ядро системы). Если предок завершит выполнение процесса перед своим потомком, функции предка берет на себя исходный процесс.
С другой стороны, связь «предок-потомок» можно не реализовывать на равные ОС. При этом все процессы оказываются равноправными. Если связь «предок-потомок» для конкретной пары процессов нужен, за его поддержку отвечают сами процессы (процесс-предок, например, может сам сохранить свой идентификатор в структуре данных потомка в случае его создания).
Взаимосвязь между процессами не ограничивается лишь отношениями «предок-потомок». Например, в некоторых ОС есть понятия сессии (session). Такая сессия объединяет все процессы, созданные пользователем за время интерактивного сеанса его работы с системой.