Потоки (нити, облегченный процесс)
Понятие потока
Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд. В многопользовательских системах, при каждом обращении к одному и тому же сервису, приходится создавать новый процесс для обслуживания клиента. Это менее выгодно, чем создать квазипараллельный поток внутри этого процесса с одним адресным пространством.
Сравнение многопоточной системы с однопоточной
Модель потока
С каждым потоком связывается:
o Счетчик выполнения команд
o Регистры для текущих переменных
o Стек
o Состояние
Потоки делят между собой элементы своего процесса:
o Адресное пространство
o Глобальные переменные
o Открытые файлы
o Таймеры
o Семафоры
o Статистическую информацию.
В остальном модель идентична модели процессов.
В POSIX и Windows есть поддержка потоков на уровне ядра.
Преимущества использования потоков
1. Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.
2. Быстрота создания потока, по сравнению с процессом, примерно в 100 раз.
3. Повышение производительности самой программы, т.к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, форматировать текст и записывать на диск резервную копию.
4.2.4Реализация потоков в пространстве пользователя, ядра и смешанное
|
|
А - потоки в пространстве пользователя
B - потоки в пространстве ядра
В случае А ядро о потоках ничего не знает. Каждому процессу необходима таблица потоков, аналогичная таблице процессов.
Преимущества случая А:
o Такую многопоточность можно реализовать на ядре не поддерживающим многопоточность
o Более быстрое переключение, создание и завершение потоков
o Процесс может иметь собственный алгоритм планирования.
Недостатки случая А:
o Отсутствие прерывания по таймеру внутри одного процесса
o При использовании блокирующего (процесс переводится в режим ожидания, например: чтение с клавиатуры, а данные не поступают) системного запроса все остальные потоки блокируются.
o Сложность реализации
Взаимодействие между процессами
Ситуации, когда приходится процессам взаимодействовать:
o Передача информации от одного процесса другому
o Контроль над деятельностью процессов (например: когда они борются за один ресурс)
o Согласование действий процессов (например: когда один процесс поставляет данные, а другой их выводит на печать. Если согласованности не будет, то второй процесс может начать печать раньше, чем поступят данные).
|
|
Два вторых случая относятся и к потокам. В первом случае у потоков нет проблем, т.к. они используют общее адресное пространство.
Передача информации от одного процесса другому
Передача может осуществляться несколькими способами:
o Разделяемая память
o Каналы (трубы), это псевдофайл, в который один процесс пишет, а другой читает.
o Сокеты - поддерживаемый ядром механизм, скрывающий особенности среды и позволяющий единообразно взаимодействовать процессам, как на одном компьютере, так и в сети.
o Почтовые ящики (только в Windows), однонаправленные, возможность широковещательной рассылки.
o Вызов удаленной процедуры, процесс А может вызвать процедуру в процессе В, и получить обратно данные.
Схема для канала
Схема для сокетов
Состояние состязания
Состояние состязания - ситуация когда несколько процессов считывают или записывают данные (в память или файл) одновременно.
Рассмотрим пример, когда два процесса пытаются распечатать файл. Для этого им нужно поместить имя файла в спулер печати, в свободный сегмент.
in - переменная указывающая на следующий свободный сегмент
out - переменная указывающая на следующее имя файла для печати
Пример состязания
|
|
Распишем события по пунктам.
1. Процесс А считывает переменную in (равную 7), и сохраняет ее в своей переменной next_free_slot.
2. Происходит прерывание по таймеру, и процессор переключается на процесс В.
3. Процесс В считывает переменную in (равную 7), и сохраняет ее в своей переменной next_free_slot.
4. Процесс В сохраняет имя файла в сегменте 7.
5. Процесс В увеличивает переменную next_free_slot на единицу (next_free_slot+1), и заменяет значение in на 8.
6. Управление переходит процессу А, и продолжает с того места на котором остановился.
7. Процесс А сохраняет имя файла в сегменте 7, затирая имя файла процесса В.
8. Процесс А увеличивает переменную next_free_slot на единицу (next_free_slot+1), и заменяет значение in на 8.
Как видно из этой ситуации, файл процесса В не будет напечатан.
Критические области
Критическая область - часть программы, в которой есть обращение к совместно используемым данным.
Условия избегания состязания и эффективной работы процессов:
1. Два процесса не должны одновременно находиться в критических областях.
2. Процесс, находящийся вне критической области, не может блокировать другие процессы.
3. Невозможна ситуация, когда процесс вечно ждет (зависает) попадания в критическую область.
|
|
Взаимное исключение с использованием критических областей
Дата добавления: 2018-08-06; просмотров: 337; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!