Информатика и технология программирования


Синхронизация процессов


С взаимодействием процессов тесно связано понятие синхронизации. Синхронизация необходима для корректного разделения общих ресурсов, обмена данными между процессами и т.п.. Сразу же заметим, что для синхронизации процессов должен быть создан набор непрерываемых (целостных) примитивов (элементарных действий), выполнение которых одним процессом не должно прерываться аналогичными действиями других процессов. Такие фрагменты программного кода называются еще " критическими секциями" . В нашей программе мы уже сталкивались с простейшим способом ограничения таких переключений - установка в 1 переменной RUN любым процессом приводит к запрещению его переключения диспетчером, поэтому любой процесс ограждает свою критическую секцию операциями RUN++ ... RUN

Механизмы синхронизации могут быть разными. Широко используются " почтовые ящики" - сообщений с неделимыми операциями " послать" , " проверить" и " получить" сообщение. Другим механизмом, который в силу своей простоты является наиболее универсальным и поэтому используется для проектирования других систем синхронизации, является семафор.

Семафор имеет некоторое начальное значение и две операции P и V. Операция P уменьшает на 1 значение семафора, если он не равен 0. Иначе процесс ожидает (с блокировкой или без нее), пока значение семафора не станет отличным от 0. V - операция увеличивает на 1 значение семафора. Операции проверки и изменения значения переменной являются неделимыми. В нашей модели эти операции (с циклическим ожиданием) выглядят следующим образом (Заметим, что явное переключение процессов - в данном случае вещь чисто техническая и не принципиальная, предназначенная для более быстрой реакции нужных процессов по произошедшим событиям).


void P(int *sem)
{while(1)
{ RUN++; // " Критическая секция"


if (*sem!=0) // Уменьшить ненулевой семафор и выйти


{ (*sem)--; RUN--; return; }
else // Повторить (с переключение процессов)


{ RUN--; NOCLOCK++;
geninterrupt(TIMVEC);



Начало  Назад  Вперед



Книжный магазин