Рис. 43.2.
Средства передачи данных можно разделить на еще более мелкие подкатегории.
•
•
Средства передачи данных имеют несколько основных отличий от разделяемой памяти.
• У механизма передачи данных может быть несколько получателей, однако операции чтения являются «разрушающими» — то есть однажды прочитанные данные уже недоступны для другого процесса.
Чтобы сделать операции чтения из сокета неразрушающими, можно воспользоваться флагом MSG_PEEK (см. раздел 57.3). UDP-сокеты (датаграммы интернет-домена) позволяют адресовать одно и то же сообщение разным получателям (см. раздел 57.12).
• Синхронизация процессов получателя и отправителя выполняется автоматически. Если получатель попытается извлечь данные, которые отсутствуют в соответствующем механизме, операция чтения по умолчанию будет заблокирована до тех пор, пока данные не будут записаны туда каким-нибудь процессом.
Большинство современных UNIX-систем предоставляет три вида: разделяемая память System V, разделяемая память POSIX и отображение в память. Различия между ними будут рассмотрены в следующих главах, когда будет описан каждый из этих механизмов (в частности, см. раздел 50.5).
Ниже отмечены основные особенности разделяемой памяти.
• Разделяемая память обеспечивает быстрое взаимодействие, но эта скорость нивелируется необходимостью выполнения синхронизации. Например, процесс не должен обращаться к структуре данных в разделяемой памяти, когда та обновляется другим процессом. Традиционным средством синхронизации данных в разделяемой памяти являются семафоры.
• Данные, размещенные в разделяемой памяти, видны всем процессам, которые используют эту память (в отличие от механизма разрушающего чтения, описанного выше, в разделе о передаче данных).
Средства синхронизации, представленные на рис. 43.1, позволяют процессам координировать свои действия. С помощью синхронизации процессы могут избежать таких проблем, как одновременное обновление сегмента разделяемой памяти или части одного и того же файла. Без этого одновременное обновление могло бы привести к получению некорректных результатов.
UNIX-системы предоставляют следующие механизмы синхронизации.
•