
- •Лекция 5. Процессы и потоки (нити). Взаимодействие процессов.
- •5.1 Процессы
- •5.1.1 Понятие процесса
- •5.1.2 Модель процесса
- •5.1.3 Создание процесса
- •5.1.4 Завершение процесса
- •5.1.5 Иерархия процессов
- •5.1.6 Состояние процессов
- •5.2 Потоки (нити, облегченный процесс)
- •5.2.1 Понятие потока
- •5.2.2 Модель потока
- •5.2.3 Преимущества использования потоков
- •5.2.4 Реализация потоков в пространстве пользователя, ядра и смешанное
- •5.2.5 Особенности реализации Windows
- •5.3. Взаимодействие между процессами
- •5.3.1. Передача информации от одного процесса другому
- •5.3.2 Состояние состязания
- •5.3.3 Критические области
- •5.3.4 Взаимное исключение с активным ожиданием
- •5.3.5 Примитивы взаимодействия процессов
- •5.3.6 Семафоры
5.2.3 Преимущества использования потоков
Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.
Быстрота создания потока, по сравнению с процессом, примерно в 100 раз.
Повышение производительности самой программы, т.к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, форматировать текст и записывать на диск резервную копию.
5.2.4 Реализация потоков в пространстве пользователя, ядра и смешанное
А- потоки в пространстве пользователя
B- потоки в пространстве ядра
В случае А ядро о потоках ничего не знает. Каждому процессу необходиматаблица потоков, аналогичная таблице процессов.
Преимущества случая А:
Такую многопоточность можно реализовать на ядре не поддерживающем многопоточность
Более быстрое переключение, создание и завершение потоков
Процесс может иметь собственный алгоритм планирования.
Недостатки случая А:
Отсутствие прерывания по таймеру внутри одного процесса
При использовании блокирующего (процесс переводится в режим ожидания, например: чтение с клавиатуры, а данные не поступают) системного запроса все остальные потоки блокируются.
Сложность реализации
Мультиплексирование потоков пользователя в потоках ядра
Поток ядра может содержать несколько потоков пользователя.
5.2.5 Особенности реализации Windows
Используется четыре понятия:
Задание - набор процессов с общими квотами и лимитами
Процесс - контейнер ресурсов (память ...), содержит как минимум один поток.
Поток - именно исполняемая часть, планируемая ядром.
Волокно - облегченный поток, управляемый полностью в пространстве пользователя. Один поток может содержать несколько волокон.
Потоки работают в режиме пользователя, но при системных вызовах переключаются в режим ядра. Из-за переключения в режим ядра и обратно, очень замедляется работа системы. Поэтому было введено понятие волокна. У каждого потока может быть несколько волокон.
5.3. Взаимодействие между процессами
Ситуации, когда приходится процессам взаимодействовать:
Передача информации от одного процесса другому
Контроль над деятельностью процессов (например: когда они борются за один ресурс)
Согласование действий процессов (Например: когда один процесс поставляет данные, а другой их выводит на печать. Если согласованности не будет, то второй процесс может начать печать раньше, чем поступят данные).
Два вторых случая относятся и к потокам. В первом случае у потоков нет проблем, т.к. они используют общее адресное пространство.
5.3.1. Передача информации от одного процесса другому
Передача может осуществляться несколькими способами:
Разделяемая память
Каналы (трубы), это псевдофайл, в который один процесс пишет, а другой читает.
Сокеты- поддерживаемый ядром механизм, скрывающий особенности среды и позволяющий единообразно взаимодействовать процессам, как на одном компьютере, так и в сети.
Почтовые ящики (только в Windows), однонаправленные, возможность широковещательной рассылки.
Вызов удаленной процедуры, процесс А может вызвать процедуру в процессеВ, и получить обратно данные.
Схема для канала
Схема для сокетов