Способы передачи данных и типы связей между процессами
Под обменом данными между параллельными процессами понимается пересылка данных от одного потока к другому с условием, что эти потоки выполняются в контекстах разных процессов.
Поток, который посылает данные другому потоку, условно называется отправителем, а который получает данные – получателем или адресатом.
Если потоки выполняются в одном процессе, то задача обмена между ними упрощается. Для этого можно использовать глобальные структуры данных, и известные средства синхронизации потоков.
Если потоки выполняются в разных процессах, то они не могут обращаться к общим структурам данных, и для обмена между ними используются специальные средства ОС. В этом случае, создается специальный канал передачи данных, обобщенная структура которого имеет следующий вид:
· T1, T2 – потоки;
· B1, B2 – буферы;
· K1, K2 – потоки ядра ОС;
· M – общая память.
Канал передачи включает входной и выходной буферы, потоки ядра ОС, и общую память, доступ к которой имеют оба потока ядра.
Пересылка из пользовательского потока T1 в поток T2 осуществляется следующим образом:
1. Поток T1 записывает передаваемые данные в буфер B1, используя для этого специальную функцию ядра ОС;
2. Поток K1 читает данные из буфера B1 и записывает их в общую память M;
3. Поток K2 считывает данные из общей памяти, и записывает в буфер B2;
4. Пользовательский поток T2 считывает данные из буфера B2.
В любом случае, обмен данными организуется через цепочку взаимодействующих потоков, которые обмениваются между собой данными через общую только для них память.
При обмене данными между параллельными процессами различается два способа передачи данных:
1. Передача данных потоком;
2. Передача данных сообщениями.
В первом случае, данные передаются в виде непрерывной последовательности байтов, которая называется потоком байтов. В этом случае, память M, доступная потокам ядра ОС, может и отсутствовать, а пересылка данных выполняется одним потоком ядра непосредственно из B1 в B2.
Если данные пересылаются группами байтов, то такая группа называется сообщением, а сам способ пересылки называется передачей данных сообщениями.
Непосредственно перед передачей данных между процессами, между ними должна быть установлена связь. Связь может устанавливаться либо на физическом, либо на логическом уровнях.
С точки зрения направления передачи данных, различаются два вида связей:
1. Полудуплексная. Здесь данные могут передаваться только в одном направлении;
2. Дуплексная связь. Данные могут передаваться в обоих направлениях.
Если рассматривается только полудуплексная связь, то могут быть определены возможные структуры (топологии) связей:
Под топологией понимается конфигурация связей между процессами-отправителями и адресатами.
1. 1è1
2. 1èN
3. Nè1
4. NèM
При разработке систем с обменом данными между процессами, вначале выбирается топология связей, и соответствующие направления передачи данных по этим связям. Затем в программах выбранные связи между процессами реализуются с помощью специальных функций ОС. Эти функции, а также функции для обмена данными между процессами входят в подсистему передачи данных, которая является частью ядра системы.