Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ОС.docx
Скачиваний:
44
Добавлен:
22.09.2019
Размер:
3.18 Mб
Скачать

20. Передача данных как метод синхронизации. (Лекция 5)

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

1) Разделяемых ресурсов нет, нужные данные передаются между потоками

2) Специальный механизм передачи обеспечивает синхронизацию (блокировку потоков)

Вводятся два примитива: Send(получатель, сообщение) и Receive(отправитель, &сообщение)

Типы передачи

Потоковая (pipe, канал) – система передает входящий поток байт, никак его не интерпретируя. Сообщения (message) – система передает специальные структуры данных (пример – сокеты для сеансового уровня к TCP/IP).

Адресация

Прямая (direct) – отправка данных производится непосредственно получателю (пример – неименованные каналы). Косвенная (indirect) – отправка выполняется в промежуточную структуру данных, почтовый ящик (mailbox), порт (port) или именованный (named) канал.

Число получателей и отправителей

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

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

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

Может возникнуть ситуация, когда прерывание произошло на второй команде первой задачи, и вторая задача взяла эту переменную со старым значением (например, двум людям продали один билет). Поэтому таким программам необходимо синхронизироваться, и блоки, в которых происходит изменение переменных, называют критическими участками. А в критическом участке должен быть только один процесс. Задача «производитель-потребитель» - одна из задач синхронизации. Процесс, вырабатывающий сообщение, называется производителем, а воспринимающий сообщения – потребителем.

2 1. Применение сообщений в задаче о производителях и потребителях. (Лекция 5)

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

– выполнять требования задачи взаимного исключения по отношению к критическому ресурсу

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

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