Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Тема 4.1. Механизмы взаимодействия процессов



Основной особенностью дискретных систем (в частности операционных систем) является то, что в их среде параллельно развивается несколько (последовательных) вычислительных процессов.

С точки зрения внешнего наблюдателя эти последовательные вычислительные процессы выполняются одновременно, в этом случае используется термин “параллельно”. При этом под параллельными понимаются не только процессы, одновременно развивающиеся на различных процессорах, каналах и устройствах ввода/вывода, но и те последовательные процессы, которые разделяют центральный процессор и хотя бы частично перекрываются во времени.

Определение 4.1. Параллельными называются такие последовательные вычислительные процессы, которые одновременно находятся в каком-либо активном состоянии.

Два параллельных процесса могут быть независимыми либо взаимодействующими.

Определение 4.2. Независимыми являются процессы, множества переменных которых не пересекаются.

Под переменными в этом случае понимают файлы данных, а также области в оперативной памяти, сопоставленные определенным в программе и промежуточным переменным. Независимые процессы не влияют на результаты работы друг друга, так как не могут изменить значения переменных другого независимого процесса. Они могут только явиться причиной задержек исполнения других процессов, так как вынуждены разделять ресурсы системы.

Определение 4.3. Взаимодействующими являются процессы, совместно использующие некоторые (общие) переменные, при этом выполнение одного процесса может повлиять на выполнение другого.

При выполнении вычислительные процессы разделяют ресурсы системы. Многие ресурсы вычислительной системы могут совместно использоваться несколькими процессами, но в каждый момент времени к разделяемому ресурсу может иметь доступ только один процесс.

Определение 4.4. Ресурсы, которые не допускают одновременного использования несколькими процессами, называются критическими.

Если один процесс пользуется в данный момент критическим ресурсом, то все остальные процессы, которым нужен этот ресурс, должны получить отказ и ждать, пока он не освободится. Если в системе не предусмотрена защита от одновременного доступа процессов к критическим ресурсам, в ней могут возникать ошибки, которые трудно обнаружить и исправить. Основной причиной возникновения этих ошибок является то, что вычислительные процессы развиваются с различными скоростями. Поэтому влияние, которое оказывают друг на друга взаимодействующие процессы, не всегда предсказуемо и воспроизводимо.

Взаимодействующие процессы могут быть либо конкурирующими, либо сотрудничающими.

Определение 4.5. Конкурирующие процессы действуют относительно независимо, но имеют доступ к общим переменным.

Определение 4.6. Процессы, выполняющие общую совместную работу таким образом, что результаты вычислений одного процесса в явном виде передаются другому, называются сотрудничающими.

Рассмотрим проблемы, возникающие при взаимодействии параллельно работающих процессов.

Пример 4.1. Рассмотрим работу конкурирующих процессов Р1 и Р2 с общей переменной Х. Пусть оба процесса асинхронно, независимо один от другого, изменяют (например, увеличивают) значение переменной Х, считывая ее значение в локальную область памяти RI (I=1,2), при этом каждый процесс выполняет некоторые последовательности операций во времени (табл.4.1). Здесь можно рассмотреть не все операторы каждого из процессов, а только те, в которых осуществляется работа с общей переменной Х. Каждому из операторов присваивается некоторый условный номер.

№ оператора Процесс Р1   № оператора Процесс Р2
  R1:=X R1:=R1+1 X:=R1     R2:=X R2:=R2+1 X:=R2

Таблица 4.1. Представление процессов в примере 4.1

Поскольку процессы могут иметь различные скорости исполнения, то может иметь место любая последовательность выполнения операций во времени. Если сначала будут выполнены все операции процесса Р1, а уже потом — все операции процесса Р2 (или, наоборот, сначала операции 4-6, а затем — операции 1-3), то в итоге переменная Х получит значение, равное Х+2 (рис. 4.1).

Однако, если в промежуток времени между выполнением операций 1 и 3 будет выполнена хотя бы одна из операций 4-6 (рис. 4.2), то значение переменной Х после выполнения всех операций будет не (Х+2), а (Х+1).

Р1: (1) R1:=X; (2) R1:=R1+1; (3)X:=R1;

Р2: (4)R2:=Х; (5) R2:=R2+1; (6) X:=R2;

Рис. 4.1. Первый вариант развития событий при выполнении процессов


Р1: (1) R1:=X; (2) R1:=R1+1; (3) X:=R1;

Р2: (4) R2:=X; (5) R2:=R2+1; (6) X:=R2;

Рис. 4.2. Второй вариант развития событий при выполнении процессов

В результате имеет место очень серьезная ошибка и, к при этом, неисправимая, так как ее нельзя проконтролировать. Например, если бы процессы Р1 и Р2 осуществляли продажу билетов и переменная Х фиксировала количество уже проданных, то в результате некорректного взаимодействия было бы продано несколько билетов на одно и то же место.

Конец примера.

Пример 4.2. Взаимодействие сотрудничающих процессов удобно всего рассматривать в схеме “производитель-потребитель” или, как часто говорят — “поставщик-потребитель”.

Допустим, что “поставщик” — это процесс, который определяет порции информации (сообщения) другому процессу, имя которого “потребитель”. Например, процесс пользователя, порождающий строки для вывода, может выступать как “поставщик”, а процесс, который выводит эти строки на печать, — как “потребитель”.

В этом случае между процессами “поставщик” и “потребитель” будем иметь очередь заполненных буферов, содержащих сообщения. Когда “поставщик” хочет послать очередное сообщение, он добавляет в конец этой очереди еще один буфер. “Потребитель”, чтобы получить сообщение, забирает из очереди буфер, который стоит в ее начале. Такое решение, хотя и кажется тривиальным, требует, чтобы “поставщик” и “потребитель” синхронизировали свои действия. Например, они должны следить за количеством свободных и заполненных буферов. “Поставщик ” может передавать сообщения только до тех пор, пока имеются свободные буферы. Аналогично, “потребитель” может получать сообщения только если очередь не пуста.

Ясно, что для учета заполненных и свободных буферов нужны разделяемые переменные, поэтому для сотрудничающих процессов, как и для конкурирующих, тоже возникает необходимость во взаимном исключении.

Конец примера.

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





Дата публикования: 2014-11-04; Прочитано: 1076 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...