Таблица 2 – Элементы процесса, общие для потоков, и индивидуальные элементы потоков
Преимущества использования нескольких потоков перед несколькими процессами:
• возможность совместного использования параллельными объектами адресного пространства и всех содержащихся в нём данных;
• создание и уничтожение потоков происходит в примерно в 100 раз быстрее, чем для процессов;
• увеличивается производительность.
Есть два основных способа реализации пакета потоков: в пространстве пользователя и в ядре (Рисунок 12). В первом случае ядро ничего не знает о потоках и управляет обычными однопоточными процессами. Преимущество этого способа состоит в том, что его можно реализовать даже в операционных системах, не поддерживающих потоки. Раньше именно так все операционные системы и строились. Другое преимущество – это более высокая производительность по отношению ко второму способу и возможность использовать процессом собственный алгоритм планирования.
Рисунок 12 – Пакет потоков в пространстве пользователя (а); пакет потоков, управляемый ядром (б)
Однако, у первого способа есть серьёзные недостатки по отношению со вторым, например проблема добровольной отдачи процессора одним из потоков, или блокирование одного потока, что приводит к блокированию всего процесса. Поэтому на настоящий момент в большинстве известных ОС потоки реализуются в ядре или используется смешанное использование обоих способов.
2.3 Межпроцессное взаимодействие
Процессам часто бывает необходимо взаимодействовать между собой. Поэтому необходимо правильно организованное взаимодействие между процессами, по возможности не использующее прерываний. Проблема межпроцессного взаимодействия разбивается на 3 пункта [14]:
• передача информации от одного процесса другому;
• контроль над деятельностью процессов (к примеру, гарантии, что два процесса не пересекутся в критических ситуациях);
• согласование действий процессов (к примеру, если один процесс ожидает действий второго процесса, чтобы в свою очередь произвести некие действия).
Эти же пункты, не считая первого, относятся и к потокам.
Важным понятие в проблеме межпроцессного взаимодействия является состояние состязания – ситуация, в которой два или более процесса считывают и записывают данные одновременно и конченый результат зависит от того, какой из них был первым. Для предотвращения такого состояния и любой другой ситуации, связанной с совместным использованием памяти, файлов и чего-либо ещё, используется взаимное исключение – запрет одновременной записи и чтения разделенных данных более чем одним процессом.
Часть программы, в которой есть обращение к совместно используемым данным, называется критической областью или секцией. Несмотря на то, что это требование исключает состязание, его недостаточно для правильной совместной работы параллельных процессов и эффективного использования общих данных. Для этого необходимо выполнение 4 условий:
• два процесса не должны одновременно находиться в критических областях;
• в программе не должно быть предположений о скорости и количестве процессоров;
• процесс, находящийся вне критической области, не может блокировать другие процессы;
• невозможна ситуация, в которой процесс вечно ждет попадания в критическую область.
Рисунок 13 – Взаимное исключение с использованием критических областей
В абстрактном виде требуемое поведение процессов представлено на рисунке 13. Процесс А попадает в критическую область в момент времени T 1 . Чуть позже, в момент времени T 2 , процесс Б пытается попасть в критическую область, но ему это не удается, поскольку в критической области уже находится процесс А , а два процесса не должны одновременно находиться в критических областях. Поэтому процесс Б временно приостанавливается, до наступления момента времени T 3 , когда процесс А выходит из критической области. В момент времени T 4 процесс Б также покидает критическую область, и происходит возвращение в исходное состояние, когда ни одного процесса в критической области не было.
Читать дальше
Конец ознакомительного отрывка
Купить книгу