
- •Глава 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.3.2. Образы процесса и потока
Совокупность информации, которая отображает процесс в памяти, называют образом процесса (ргосеss іmage), а всю информацию о потоке - образом потока (thread imadge).
К образу процесса принадлежат:
-
управляющий блок процесса;
-
программный код пользователя;
-
данные пользователя (глобальные данные программы, общие для всех потоков);
-
информация образов потоков процесса.
Программный код пользователя, данные пользователя и информация о потоках загружаются в адресное пространство процесса.
Образ процесса обычно не является беспрерывным участком памяти, его части могут выгружаться на диск.
К образу потока принадлежат:
-
управляющий блок потока;
-
стек ядра (стек потока, который используется во время выполнения кода потока в режиме ядра);
-
стек пользователя (стек потока, доступный в управляющем режиме).
Схема расположения в памяти образов процесса и его потоков изображена на рис. 3.3. Все потоки конкретного процесса могут пользоваться общей информацией его образа.
3.4. Переключение контекста и обработка прерываний
3.4.1. Организация переключения контекста
Важнейшей задачей операционной системы во время управления процессами и потоками является организация переключения контекста - передачи управления от одного потока к другому с сохранением состояния процессора.
Общих принципов переключения контекста придерживаются в большинстве систем, но их реализация обусловлена конкретной архитектурой. Обычно нужно выполнить такие операции:
-
сохранить состояние процессора потока в некотором участке памяти (области хранения состоянгия процессора потока);
-
определить, какой поток следует выполнять следующим;
-
загрузить состояние процессора этого потока из его области хранения;
-
продолжить выполнение кода нового потока.
Переключение контекста обычно осуществляется с привлечением средств апаратной поддержки. Могут быть использованы специальные регистры и участки памяти, которые дают возможность сохранять информацию о текущей задаче (когда рассматривают аппаратное обеспечение, аналогом понятия «поток» есть понятия «задача»), а также специальные инструкции процессора для работы с этими регистрами и участками памяти.
Рассмотрим аппаратную поддержку переключения задач в архитектуре ІА-32. Для сохранности состояния процессора каждой задачи (содержимого связанных с ней регистров процессора) используют специальный участок памяти - сегмент состояния задачи ТSS. Адресу этой области можно получить из регистра задачи ТR (это системный адресный регистр).
Для переключения задач достаточно загрузить новые данные в регистр ТR. В результате значения регистров процессора текущей задачи автоматически сохранятся в ее сегменте состояния, после чего в регистры процессора будет загружено состояние процессора новой (или прежде прерванной) задачи и начнется выполнение ее инструкций.
3.4.2. Обработка прерываний
В процессе выполнения поток может быть прерван не только для переключения контекста на другой поток, но и в связи с программным или аппаратным прерываниям (переключение контекста тоже связано с прерываниями, собственно, с прерыванием от таймера). С каждым прерыванием поступает дополнительная информация (например, его номер). На основании этой информации система определяет, где будет размещен адрес процедуры обработчика прерывания (список таких адресов сохраняют в специальном участке памяти и называют вектором прерываний).
Приведем пример последовательности действий во время обработки прерывания:
-
сохранение состояния процессора потока;
-
установление стека обработчика прерывания;
-
начало выполнения обработчика прерывания (кода операционной системы);
-
для этого из вектора прерывания загружается новое значение счетчика команд;
-
восстановление состояния процессора потока после окончания выполнения обработчика и продолжение выполнения потока.
Передача управления обработчику прерывания, как и переключение контекста, может состояться практически в любой момент. Основное отличие заключается в том, что адрес, на который передается управление, задают на основе номера прерывания и сохраняют в векторе прерываний, а также в потому, что код обработчика не продлевается из места, где было прервано выполнение, а начинает выполняться каждый раз сызнова.