Шаг 84 - Откуда взялась теория синхронизации

Кто придумал семафоры, критические секции и исключения ? Придумал их голландский профессор математик Эдсжер Дейкстра (Edsger Wybe Dijkstra) в начале 70 годов (1965-1973).

84.jpg (21955 b)

Рассматривая ситуации с многопользовательским доступом он ввел понятие критический интервал (critical section) . Под критическим интервалом он определил всякую последовательность шагов обработки, в которой последовательный процесс не должен прерываться ни каким другим процессом. Он сопоставил каждому, общему для некоторых процессов, набору данных некоторую запирающую переменную (mutex). Начальное значение которой равно 1. Если к началу критического интервала она больше или равна 1, то интервал должен выполняться, иначе ждать. Вот такой он алгоритм составил (синтаксис С, в оригинале PASCAL).

Mutex=1;

В начале критического интервала.

mutex=mutex-1;
if (mutex<0) 
{
	// жди;
} else {
	//выполняй;
};

В конце критического интервала.

mutex=mutex+1;
if (mutex<=0) 
{
	//возьми из очереди очередной процесс и выполняй его
} else {
	// все, никого нет
};

Во время критического интервала значение mutex равно нулю или отрицательному числу. Абсолютное значение его равно длине очереди. Чтобы лучше понять эти идеи нужно смотреть не со стороны программы, а со стороны операционной системы. Этот алгоритм именно для нее. Только когда два потока обратятся к критической секции в очереди станет 1 (mod(-1)). И когда значение станет 1 тогда ни один поток не находится в критической секции. Для синхронизации со стороны программы было введено понятие семафор, который просто разрешал или запрещал обращаться потоку. Вот эту синхронизацию и назвали синхронизацией запираний или взаимным исключением (mutual exclusion - mutex). Вследствие ошибок при программировании синхронных событий могут возникать системные заторы (system-deadlock) или мертвые хватки (deadly embrace).

Естественно это очень краткое изложение. К сожалению книг Дейкстра у меня нет :-(.

P.S.: Термины и изложения из учебника информатики Мюнхенского технологического университета 1973 год.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 2.05.2001