Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Потоки (нити, облегченный процесс)



Понятие потока

Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд. В многопользовательских системах, при каждом обращении к одному и тому же сервису, приходится создавать новый процесс для обслуживания клиента. Это менее выгодно, чем создать квазипараллельный поток внутри этого процесса с одним адресным пространством.

Сравнение многопоточной системы с однопоточной

Модель потока

С каждым потоком связывается:

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. Невозможна ситуация, когда процесс вечно ждет (зависает) попадания в критическую область.

Пример:

Взаимное исключение с использованием критических областей


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-28; Просмотров: 722; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.014 с.)
Главная | Случайная страница | Обратная связь