Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Потоки (нити, облегченный процесс)
Понятие потока Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд. В многопользовательских системах, при каждом обращении к одному и тому же сервису, приходится создавать новый процесс для обслуживания клиента. Это менее выгодно, чем создать квазипараллельный поток внутри этого процесса с одним адресным пространством. Сравнение многопоточной системы с однопоточной Модель потока С каждым потоком связывается: 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; Просмотров: 776; Нарушение авторского права страницы