24518

Назначение и использование семафоров

Доклад

Информатика, кибернетика и программирование

Пусть буферный пул состоит из N буферов каждый из которых может содержать одну запись рис. Для решения задачи введем три семафора: e – число пустых буферов; f – число заполненных буферов; b – блокирующая переменная – двоичный семафор используемый для обеспечения взаимного исключения при работе с разделяемыми данными в критической секции. Использование семафоров для синхронизации потоков Здесь операции Р и V имеют следующее содержание: Ре – если есть свободные буферы то уменьшить их количество на 1 если нет то перейти в состояние...

Русский

2013-08-09

46.4 KB

8 чел.

Вопрос 23. Назначение и использование семафоров.

§4.4.4Семафоры.

Семафор является средством управления доступом к разделяемому ресурсу со стороны выполняющихся параллельно потоков. Семафор – это специальная блокирующая переменная, которая может принимать только целые неотрицательные значения: 0; 1; 2; 3 и т. д. В частном случае, когда семафор может принимать только значения 0 и 1, он превращается в блокирующую переменную, называемую двоичным семафором.

Над семафором можно проводить только две операции, традиционно обозначаемые буквами V и Р:

V- операция (освобождение ресурса) – увеличение значения семафора на 1;

Р- операция (занятие ресурса) – уменьшение значения семафора на 1.

Пусть переменная S представляет собой семафор. Тогда операции V(S) и P(S) определяются следующим образом:

V(S) : переменная S увеличивается на 1 единым действием, если это возможно. Выборка, наращивание и запоминание S не могут быть прерваны. К переменной S нет доступа другим потокам во время выполнения этой операции.

P(S) : переменная S уменьшается на 1 единым действием, если это возможно. Если S=0 и ее невозможно уменьшить, оставаясь в области целых неотрицательных значений, поток, вызывающий операцию P, ждет, пока это уменьшение станет возможным. Успешная проверка и уменьшение S также является неделимой операцией.

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

Рассмотрим использование семафоров на примере взаимодействия потоков, выполняющихся в многозадачном режиме. Одни потоки записывают данные в буферный пул, а другие считывают их из буферного пула. (Буферный пул – набор регистров, в которые записывается информация для временного хранения. Регистры освобождаются и занимаются потоками.)

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

Для решения задачи введем три семафора:

e – число пустых буферов;

f – число заполненных буферов;

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

V-освобождение

ресурса

Р-занятие ресурса

Рис. 4.11. Использование семафоров для синхронизации потоков

Здесь операции Р и V имеют следующее содержание:

Р(е) – если есть свободные буферы, то уменьшить их количество на 1, если нет, то перейти в состояние «ожидание»;

P(b) – если критическая секция доступна, то установить признак «занято» (b=0), если нет, то перейти в состояние «ожидание»;

V(b) – освободить критическую секцию (установить b=1);

V(f) – нарастить число занятых буферов.

Следует учитывать, что уменьшение количества свободных и увеличение числа занятых буферов – разные операции.

Поток-писатель, прежде всего, проверяет, имеются ли в пуле пустые буферы, используя семафор P(e). Если свободных буферов нет (е=0), то поток переводится в состояние ожидания. Если свободные буферы есть (е>0), то поток-писатель уменьшает их число и входит в критическую секцию (если это возможно, т.е. если b=1) для записи данных в буфер. После выхода из критической секции поток-писатель наращивает число занятых буферов V(f).

Поток-читатель действует аналогично, с той разницей, что он начинает работу с проверки наличия заполненных буферов – P(f), а после чтения данных наращивает количество свободных буферов – V(e).


 

А также другие работы, которые могут Вас заинтересовать

48335. КОНСТИТУЦИОННОЕ ПРАВО РОССИЙСКОЙ ФЕДЕРАЦИИ 342.5 KB
  Системы конституционного права. Соотношение Конституции России и конституционного права. Место конституционного права в системе Российского права. Соотношение конституционного права РФ и международного права
48336. Конституційний період Громадянської війни США 37 KB
  На Півночі проживали 22 млн. На Півночі в промисловості було зайнято 18 млн. Плантатори розраховували на своє тимчасове військову перевагу і явну військову непідготовленість Півночі. На першому етапі війни жителі півночі зазнали ряд серйозних поразок.
48337. Конституція США. Біль про права 35 KB
  Конститу́ція США Верховний закон Сполучених Штатів Америки. Дійсна сьогодні Конституція США була прийнята 17 вересня 1787 року під час Конституційної Конвенції в Філадельфії і ратифікована в усіх 13 тодішніх американських штатах. Конституція США є найстарішою федеральною конституцією.
48338. Конструкции стен из крупных блоков 32.5 KB
  Со стенами из крупных блоков за основу принимают номенклатуру элементов предусмотренных территориальными каталогами. Архтор для своих проектов использует унифицированный набор блоков разрабатывая для них новые доборные элементы. Поясные ряды кладки состоят из поясных перемычечных и угловых блоков.