Читаем Linux API. Исчерпывающее руководство полностью

Рис. 43.2. Обмен данными между двумя процессами с помощью канала

Передача данных

Средства передачи данных можно разделить на еще более мелкие подкатегории.

• Байтовый поток. Данные, которые передаются с помощью каналов, очередей FIFO и датаграммных сокетов, представляют собой сплошной поток байтов. Каждая операция чтения может получить из IPC-механизма произвольное количество байтов, вне зависимости от размера блока, записанного передающим процессом. Это традиционная для UNIX модель «файл как последовательность байтов».

Сообщение. Данные, передающиеся с помощью очередей сообщений (System V и POSIX) и датаграммных соектов, принимают вид отдельных сообщений. Каждая операция чтения возвращает отдельное сообщение, полученное в том виде, в котором оно было записано отправителем. Мы не можем забрать из IPC-механизма только часть сообщения, как и получить сразу несколько сообщений за одну операцию чтения.

• Псевдотерминалы. Это средство взаимодействия, предназначенное для использования в особых ситуациях. Подробности описаны в главе 60.

Средства передачи данных имеют несколько основных отличий от разделяемой памяти.

• У механизма передачи данных может быть несколько получателей, однако операции чтения являются «разрушающими» — то есть однажды прочитанные данные уже недоступны для другого процесса.

Чтобы сделать операции чтения из сокета неразрушающими, можно воспользоваться флагом MSG_PEEK (см. раздел 57.3). UDP-сокеты (датаграммы интернет-домена) позволяют адресовать одно и то же сообщение разным получателям (см. раздел 57.12).

• Синхронизация процессов получателя и отправителя выполняется автоматически. Если получатель попытается извлечь данные, которые отсутствуют в соответствующем механизме, операция чтения по умолчанию будет заблокирована до тех пор, пока данные не будут записаны туда каким-нибудь процессом.

Разделяемая память

Большинство современных UNIX-систем предоставляет три вида: разделяемая память System V, разделяемая память POSIX и отображение в память. Различия между ними будут рассмотрены в следующих главах, когда будет описан каждый из этих механизмов (в частности, см. раздел 50.5).

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

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

• Данные, размещенные в разделяемой памяти, видны всем процессам, которые используют эту память (в отличие от механизма разрушающего чтения, описанного выше, в разделе о передаче данных).

43.3. Средства синхронизации

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

UNIX-системы предоставляют следующие механизмы синхронизации.

• Семафоры. Семафор — целое число, хранящееся в пространстве ядра, которое ни при каких обстоятельствах не может быть меньше нуля. Процесс может увеличивать и уменьшать его значение. Ядро блокирует попытку сделать семафор отрицательным до тех пор, пока тот не вырастет до нужного уровня. (Процесс также может запросить неблокирующую операцию; в этом случае вместо блокировки ядро сразу же вернет сообщение об ошибке, указывающее на то, что операция не может быть выполнена в данный момент.) Назначение семафора определяется самим приложением. Процесс декрементирует семафор (скажем, с 1 до 0), чтобы зарезервировать эксклюзивный доступ к какому-нибудь общему ресурсу, и затем, завершив работу, инкрементирует его обратно, делая ресурс доступным для других процессов. Часто применяется двоичный семафор, который может быть равен только 0 или 1. Но если приложение работает с несколькими экземплярами разделяемого ресурса, то ему следует использовать семафор, чье максимальное значение равно количеству этих экземпляров. Linux поддерживает семафоры из System V и стандарта POSIX, которые, в сущности, имеют похожие функции.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных