Помощь в учёбе, очень быстро...
Работаем вместе до победы

Особенности взаимодействия процессов (нитей)

РефератПомощь в написанииУзнать стоимостьмоей работы

В первом случае может возникнуть ситуация, называемая «состояние гонки» (race condition), при котором результат выполнения программы зависит от того, какой поток первым выполнит отрезок кода, расположенный в общей памяти. Во всех многопоточных и многопроцессорных ОС существует понятие критической секции, возникающей в следующих случаях. Процесс р1 выполняет оператор I = 1+), а процесс р2… Читать ещё >

Особенности взаимодействия процессов (нитей) (реферат, курсовая, диплом, контрольная)

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

  • 1) посредством разделения памяти (оперативной или внешней);
  • 2) передачи сообщений.

В первом случае может возникнуть ситуация, называемая «состояние гонки» (race condition), при котором результат выполнения программы зависит от того, какой поток первым выполнит отрезок кода, расположенный в общей памяти. Во всех многопоточных и многопроцессорных ОС существует понятие критической секции, возникающей в следующих случаях. Процесс р1 выполняет оператор I = 1+), а процесс р2 — оператор I = = 1-К. Машинные коды представлены в табл. 6.1.

Таблица 6.1

Пример машинных кодов критической секции.

Процесс р1.

Процесс р2.

Коас! К1, I.

Ьоас1 Ш, I.

Ьоас) Я2, I.

боас) К.2, ]

Ааа Ш, И2.

6иЬ Ш, Я2.

Биле И1,1.

БШте К1,1.

Здесь результат зависит от порядка выполнения этих команд. Для исключения возникновения критических секций необходимо выполнять следующие требования:

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

На основании этих требований при организации взаимодействия через общую память процессам необходимо синхронизировать свое выполнение. Существует два вида синхронизации: взаимное исключение критических интервалов и координация процессов.

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

Во втором случае — координация процессов — используются две системные функции гюаИ (х) и ро.чЦх), где .V — идентификатор некоторого события. При необходимости использования некоторого занятого ресурса вызывается функция гюаЫ{ С) с параметром нужного ресурса и переходит в состояние ожидания. При освобождении ресурса С процесс посылает системы вызов /?ох?(С) и система переводит первый процесс в состояние готовности.

Обобщающее средство синхронизации процессов предложил Э. В. Дейкстра в 1965 г.1, который ввел два новых параметра, обозначаемые Р и V и называемые семафорами.

Показать весь текст
Заполнить форму текущей работой