Задача «поставщик-потребитель»

Процесс поставщик создает информацию и помещает ее в общую область (буфер). Процесс потребитель извлекает информацию из буфера и осуществляет ее дальнейшую обработку.

1)Работа с простым, разделенным буфером.

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

Поставщик: создание информации(П11);

Работа с буфером (П12);

Потребитель: работа с буфером(П21);

Обработка информации (П22);

Поставщик: П11; P(S); П12; V(S); goto L1;

Потребитель: P(S); П21; V(S); П22; goto L2;

Состояние буфера: Пустой = 1;

Полный =0;

L1: поставщик: П11; Р(пустой); П12; V(полный); goto L1;

L2: Р(полный); П12; V(пустой); П22; goto L2;

Это была задача с разделенным семафором.

2)Работа с составным буфером.(буферный пул)

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

Поставщик: L1: П11; P(e); P(S); П12; V(f); V(S); goto L1;

Потребитель: L2: P(f); P(S); П21; V(e); V(S); П22; goto L2;

е- количество свободных ячеек

f – количество занятых ячеек

3)Работа с кольцевым буфером.

Пусть есть 2 процесс: поставщик и потребитель. В текущий момент времени буфер содержит очередь помещенных, но еще не прочитанных сообщений. Введем 2 переменных, 1-для чтения(индекс 1 ячейки, кот. нужно прочитать – 1ЧТ), и одну для заполнения(1ая свободная ячейка после очереди – 1ЗП). Необходимо запрограммировать работку процесса так, что бы информация заносилась и очищалась в определенном порядке, при этом доступ к буферу был открыт как по чтению, так и по записи.

Поставщик: P (пустой)

Buf(1ЗП)=сообщение

1ЗП= (1ЗП+1)%N

V (полный)

Потребитель: Р (полный)

ДАТА = Buf(1ЧТ)

1ЧТ=(1ЧТ+1)%N

V (пустой)

Пустой = число свободных ячеек;

Полный = число занятых ячеек;

Р(пустой) – пока это не = 0 будем писать, когда станет 0, процесс прекратиться.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: