3Основы многопоточных программ 3.1Основные определения Процессы
Процесс (process) – совокупность действий процессора и необходимых ресурсов для обеспечения выполнения инструкций программы
Состав процесса
Области памяти данных и программ
Стек
Отображение виртуальной памяти на физическую память
Состояние
Типичные состояния процесса
Остановлен
Процесс не использует процессор
Терминирован
Процесс закончился, но ещё не удалён
Ожидает
Процесс ждёт событие
Готов
Готов к выполнению, но ожидает освобождения процессора
Выполняется
Процесс выполняется процессором
Межпроцессное взаимодействие
Межпроцессное взаимодействие – способ передачи информации между процессами
Виды межпроцессного взаимодействия
Разделяемая память
Семафоры
Сигналы
Почтовые ящики
События
Событие – оповещение процесса со стороны ОС о возникновении межпроцессного взаимодействия
Примеры событий
Принятие семафором требуемого значения
Поступление сигнала
Поступление сообщения в почтовый ящик
Потоки
Поток (поток управления, задача, нить, thread) – одна из параллельно (асинхронно) выполняющихся ветвей процесса
Особенности потоков
В процессе присутствует единственный главный поток
Все потоки одного процесса работают в едином адресном пространстве
Общие переменные и код
Нет необходимости использовать специальные средства взаимодействия*
Каждый поток имеет собственный стек
Каждый поток имеет собственное состояние
* В реальных условиях специальные средства межпоточного взаимодействия обычно нужны
Дополнительные определения
Ресурс – объект (устройство, память), необходимый процессу или потоку для выполнения заданных действий
Приоритет – целое число, определяющее важность каждого процесса или потока в ОС
Чем больше приоритет у процесса или потока, тем больше процессорного времени ему будет выделено
3.2Виды ресурсов Виды ресурсов по природе
Аппаратные ресурсы
Процессор
Область памяти
Периферийные устройства
Прерывания
Программные ресурсы
Программа
Данные
Файлы
Сообщения
Виды ресурсов по характеристикам
Активные
Способны изменять и создавать информацию (процессор)
Пассивные
Способны хранить информацию (память)
Локальные
Относятся к одному процессу
После завершения процесса автоматически удаляются
Разделяемые
Относятся к нескольким процессам
Удаляются только после окончания использования их последним процессом
Постоянные
Для работы требуют операций «захватить» и «освободить»
Временные
Для работы требуют операций «создать» и «удалить»
Виды разделяемых ресурсов
Некритичные
Безопасно могут быть использованы одновременно несколькими процессами и потоками
Примеры: жёсткий диск в целом, сетевая карта, видеокарта
Критичные
Безопасно могут быть использованы в один момент времени только одним процессом или потоком
Примеры: разделяемая память при её модификации
3.3Типы взаимодействия процессов Типы взаимодействия процессов
Независимые процессы
Процессы не используют разделяемые ресурсы
Сотрудничающие процессы
Процессы разделяют канал коммуникации: один пишет, другой читает
Процессы работают по очереди: один работает, второй ожидает завершения работы первого
Конкурирующие процессы
Процессы используют совместно разделяемый ресурс
Процессы используют критические секции
Процессы используют взаимные исключения (мьютексы)
Определения
Критическая секция – участок программного кода, который допускается выполнять только единственным потоком (процессом)
Взаимное исключение (мьютекс, mutual exclusion, mutex) – способ синхронизации потоков за счёт использования захвата совместно используемого ресурса, также называемого мьютексом
Если мьютекс занят, то при попытке его захвата поток переходит в состояние ожидания
Как только мьютекс освобождается, ранее ожидавший поток высвобождается, а мьютекс вновь считается захваченным
Основные проблемы синхронизации процессов и потоков
Блокировка (lockout)
Поток ожидает ресурс, который не освободится никогда
Тупик (deadlock)
Два потока заблокировали каждый по своему ресурсу и ожидают освобождения ресурса, которым владеет другой поток
Застой (starvation)
Поток монополизировал процессор
|