Тема 10. Классические проблемы межпроцессного взаимодействия — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Тема 10. Классические проблемы межпроцессного взаимодействия

2017-11-16 811
Тема 10. Классические проблемы межпроцессного взаимодействия 0.00 из 5.00 0 оценок
Заказать работу

Проблема производителя и потребителя

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

Условия синхронизации:

- производитель должен ждать, если буфер полон;

- потребитель должен ждать, если буфер пуст;

- операции с буфером – критические секции, т.е. работать с буфером может только один процесс.

Ниже приведено решение проблемы производителя и потребителя с использованием семафоров.

#define N 100 /* количество сегментов в буфере */

typedef int semaphore;

semaphore mutex = 1; /* контроль доступа в КС */

semaphore empty = N; /* число пустых сегментов буфера */

semaphore full = 0; /* число полных сегментов буфера */

 

void producer(void)

{

int item;

while (TRUE) {

item = produce_item();/*создать данные, помещаемые в буфер */

wait(&empty); /* уменьшить счетчик пустых сегментов буфера */

wait(&mutex); /* вход в критическую область */

insert_item(item); /* поместить в буфер новый элемент */

signal(&mutex); /* выход из критической области */

signal(full); /*увеличить счетчик полных сегментов буфера*/

}

}

 

void consumer(void);

{

int item;

while (TRUE) {

wait(&full); /* уменьшить число полных сегментов буфера */

wait(&mutex); /* вход в критическую область */

item = remove_item(); /* удалить элемент из буфера */

signal(&mutex); /* выход из критичекой области */

signal(&empty); /*увеличить счетчик пустых сегментов буфера*/

consume_item(item); /* обработка элемента */

}

}

Здесь семафор mutex используется для реализации взаимного исключения, то есть для исключения одновременного обращения к буферу двух процессов. Остальные семафоры использованы для синхронизации. Семафоры full и empty необходимы, чтобы гарантировать, что производитель прекращает работу, когда буфер полон, а потребитель прекращает работу, когда буфер пуст.

Можно обобщить задачу на случай m производителей и n потребителей.

Задача о читателях и писателях

Это одна из задач синхронизации, описывающих доступ процессов к разделяемой базе данных. Процессы подразделяются на две категории: читатели никогда не модифицируют базу данных; писатели читают и модифицируют базу данных.

Правила синхронизации следующие:

- читатели могут работать параллельно, если никто из писателей не модифицирует базу данных;

- модифицировать базу может только один писатель и когда никто не читает из базы данных;

- переменные состояния может просматривать и менять только один процесс;

Ниже приведена схема решения данной задачи.

Читатель Писатель
Ждать, пока закончит работу писатель (если кто-то пишет) Ждать, пока закончат работу все читатели (если кто-то читает)
Читать из базы данных Модифицировать базу данных
При необходимости разбудить ожидающего писателя При необходимости разбудить ожидающих читателей

 

Задача об обедающих философах

Моделирует использование общих ресурсов несколькими процессами. Суть задачи такова. Пять философов сидят за круглым столом. На столе пять тарелок с макаронами и пять вилок по одной между тарелками. Предполагается, что есть надо двумя вилками сразу. Поведение каждого из философов таково: думает – хочет есть (пытается взять две вилки) – ест.

Ограничения:

- философ должен ждать, пока не освободятся две вилки рядом с ним;

- модификация переменных состояния должно выполняться в критической секции.

Задача о спящем парикмахере

Моделирует обслуживание потока запросов по очереди. Клиенты приходят в парикмахерскую и встают в очередь. Парикмахер приглашает и обслуживает клиентов по одному.

Ограничения:

- клиент должен ждать, если есть очередь или парикмахер занят обслуживанием;

- парикмахер спит, если нет клиентов;

- первый клиент будит парикмахера.

Задача о железнодорожном перегоне

Моделирует обмен по полудуплексному каналу связи. Поезда движутся по одноколейному участку дороги в двух направлениях. Необходимо организовать движение таким образом, чтобы избежать столкновения.

Ограничения:

- поезд, подходящий к одноколейному участку дороги должен остановиться, если по нему движется поезд во встречном направлении;

- модификация переменных состояния должно выполняться в критической секции.

Вопросы для самоконтроля

1. Приведите решение задачи производителей и потребителей при помощи семафоров.

2. Какие условия обычно связаны с задачей читателей и писателей?

3. Как решается задача читателей и писателей при помощи семафоров?


Поделиться с друзьями:

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.