
- •Глава 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.7.4. Завершение процессов
В случае завершения процесса соответствующий объект-процесс становится кандидатом на изъятие из системы. При этом диспетчер объектов вызывает метод delete для объектов-процессов, который закрывает все дескрипторы в таблице объектов этого процесса.
3.7.5. Процессы и ресурсы. Таблица объектов процесса
Каждый процесс, как было показано в разделе 2, может пользоваться ресурсами через дескрипторы соответствующих объектов. Открытые дескрипторы объектов есть индексами в таблице объектов (object table), что сохраняется в управляющем блоке процесса. Эта таблица содержит указатели на все объекты, дескрипторы которых открыты процессом. Процесс может получить дескриптор объекта несколькими способами:
-
создав новый объект;
-
открыв дескриптор имеющегося объекта;
-
унаследовав дескриптор от другого процесса;
-
получив дубликат дескриптора из другого процесса.
Каждый элемент таблицы объектов содержит права доступа соответствующего дескриптора и его режим наследования, который определяет, получат ли процессы, созданные рассматриваемым процессом, копию дескриптора соответствующего объекта. Режим наследования задают во время создания объекта.
Объект может одновременно быть использован несколькими процессами, при этом каждый из них получает уникальный дескриптор, который отвечает этому объекту.
3.8 Управление потоками в Windows хр
Для того чтобы выполнять код, в рамках процесса обязательно необходимо создать поток. В системе Windows ХР реализованна модель потоков «в чистом виде». Процессы и потоки являются разными сущностями в системе, которые находятся в четко определенной взаимосвязи один из одним; для работы с ними используют разные системные вызовы. В Windows ХР никогда не использовали модель процессов, подобный традиционной модели UNIX.
Многопотоковость Windows ХР базируется на схеме 1:1. Каждому потока пользователя отвечает сущность в ядре, при этом ядро отвечает за планирование потоков. Процессы не планируются.
3.8.1. Составные элементы потока
Поток в Windows ХР состоит из таких элементов:
-
содержимого набора регистров, который определяет состояние процессора;
-
двух стеков - один используют для работы в режиме пользователя, другой - в режиме ядра; эти стеки размещены в адресном пространстве процесса, который создал этот поток;
-
локальной памяти потока (TLS);
-
уникального идентификатора потока (thread id, tid), который выбирают из того самого пространства имен, что и идентификаторы процессов.
Совокупность состояния процессора, стеков и локальной памяти потока представляет контекст потока. Каждый поток имеет собственный контекст. Все другие ресурсы процесса (его адресное пространство, открытые файлы и т.п.) совместно используются потоками.
Различают два вида потоков: потоки пользователя и потоки ядра, которые в Windows ХР называют системными рабочими потоками – system worker threads. Первые из них создают в режиме пользователя и только за необходимости перемикають в режим ядра. Другие создают в ядре во время его инициализации и выполняют в режиме ядра на протяжении всего времени их существования.