Эпилог

Эпилог

В этой книге подробно описаны четыре средства межпроцессного взаимодействия (IPC):

1. Передача сообщений (именованные и неименованные каналы, очереди сообщений Posix и System V).

2. Синхронизация (взаимные исключения и условные переменные, блокировки чтения-записи, блокировки файлов и записей, семафоры Posix и System V).

3. Разделяемая память (неименованная, именованная стандартов Posix и System V).

4. Вызовы процедур (двери в системе Solaris, пакет Sun RPC).

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

После прочтения 16 глав возникает естественный вопрос: какую форму IPC следует использовать для решения какой-либо конкретной задачи? К сожалению, универсального метода не существует. Огромное количество средств IPC в Unix возникло благодаря тому, что нет какого-либо единственного средства, которым можно было бы решить все задачи (или хотя бы большинство). Все, что вам остается, — это познакомиться с особенностями всех форм IPC и учитывать их при разработке вашего приложения.

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

1. Сетевое или несетевое. Мы предполагаем, что это решение уже принято и IPC используется между процессами или потоками, выполняющимися на одном узле. Если есть вероятность того, что приложение будет распределено между несколькими узлами, следует рассмотреть возможность использования сокетов вместо IPC, чтобы впоследствии легко было переделать приложение в сетевое.

2. Переносимость (вспомните табл. 1.3). Практически все системы под управлением Unix поддерживают именованные и неименованные каналы и блокировку записей стандарта Posix. К 1998 году большинство систем поддерживало средства IPC System V (очереди сообщений, семафоры и разделяемую память), тогда как лишь немногие поддерживали те же средства стандарта Posix. Должны появиться новые реализации Posix IPC, но, к сожалению, эти средства не являются обязательными в стандарте Unix 98. Многие системы поддерживают потоки Posix (включая взаимные исключения и условные переменные) или станут поддерживать их в ближайшем будущем. Некоторые системы, поддерживающие потоки Posix, не воспринимают атрибут использования между процессами для взаимных исключений и условных переменных. Блокировки чтения-записи, требуемые стандартом Unix 98, должны вскоре войти в стандарт Posix, и множество систем уже поддерживают какой-либо из видов таких блокировок. Отображение в память распространено достаточно широко, и большинство Unix-систем поддерживают неименованное отображение (с использованием либо /dev/zero, либо MAP_ANON). Средства Sun RPC должны быть доступны практически на всех системах Unix, тогда как двери пока реализованы только в Solaris.

3. Производительность. Если для вашего приложения критична скорость работы средств IPC, воспользуйтесь программами из приложения А. Лучше всего изменить эти программы для имитации среды, в которой будет работать ваше приложение, и таким образом измерить скорость работы средств IPC в этой среде.

4. Планирование в реальном времени. Если вам нужно воспользоваться этой функцией и система ее поддерживает, рассмотрите возможность использования функций Posix для передачи сообщений и синхронизации (очереди сообщений, семафоры, взаимные исключения и условные переменные). Например, когда увеличиваются значения семафора, в вызове к которому заблокировано несколько потоков, разблокируемый поток выбирается в соответствии с политиками планирования и параметрами заблокированных потоков. Для семафоров System V это не гарантируется.

Чтобы помочь вам понять некоторые особенности и ограничения средств IPC, мы вкратце перечислим основные различия между ними:

? Именованные и неименованные каналы представляют собой потоки байтов без грaниц между сообщениями. Очереди сообщений Posix и System V предусматривают наличие границ сообщений. Сравните это с протоколами Интернета: TCP — это поток байтов, a UDP — последовательность сообщений с явно определенными границами.

? Очереди сообщений Posix могут отправлять процессу сигнал или запускать новый поток в случае, если в пустую очередь помещается сообщение. Для очередей System V такая возможность не предусматривается. Ни один из типов очередей сообщений не может быть использован непосредственно с вызовами select и poll (глава 6 [24]), хотя некие решения этой проблемы были приведены при обсуждении листинга 5.12 и в разделе 6.9.

? Данные в именованных и неименованных каналах передаются в порядке очереди (FIFO). Очереди сообщений Posix и System V предусматривают возможность присваивания сообщениям различного приоритета. При чтении из очереди Posix всегда возвращается сообщение с наивысшим приоритетом. Для очередей System V можно указать любой конкретный тип сообщения.

? При помещении сообщения в очередь Posix или System V или в именованный или неименованный канал ровно один экземпляр доставляется ровно одному считывающему потоку. Возможность передачи нескольким адресатам отсутствует (в отличие от сокетов и XTI при использовании протокола UDP — главы 18 и 19 [24]).

? Взаимные исключения, условные переменные и блокировки чтения-записи имен не имеют. Они могут легко использоваться потоками одного процесса. Совместное использование их различными процессами возможно только в случае, если эти объекты располагаются в общей для этих процессов области памяти. Семафоры Posix бывают двух типов: именованные и размещаемые в памяти. Именованные семафоры могут использоваться только различными процессами (они идентифицируются именами Posix IPC), а размещаемые в памяти должны для этого находиться в разделяемой памяти. Семафоры System V также являются именованными (с помощью типа key_t), они также могут без проблем использоваться несколькими процессами совместно.

? Блокировки записей fcntl автоматически снимаются ядром при завершении процесса, если он сам об этом не позаботится. Для семафоров System V эта возможность является дополнительной. Для взаимных исключений, условных переменных, блокировок чтения-записи и семафоров Posix эта возможность не предусматривается.

? Каждая блокировка fcntl действует на некоторый диапазон байтов (называемый записью) в файле, указываемом с помощью дескриптора. Блокировки чтения-записи не связываются ни с какими записями.

? Разделяемая память Posix и System V обладает живучестью ядра. Она существует до тех пор, пока не будет удалена явно, даже если в какой-то момент не используется ни одним процессом.

? Размер объекта разделяемой памяти Posix может быть увеличен в процессе работы. Размер сегмента разделяемой памяти System V фиксируется при его создании.

? Oгрaничeния ядра на три типа System V IPC часто требуют настройки вручную, поскольку устанавливаемые для них по умолчанию значения часто не соответствуют требованиям реальных приложений (раздел 3.8). Oгрaничeния на средства Posix IPC обычно не требуют настройки.

? Информация об объектах System V IPC (текущий размер, идентификатор владельца, время последнего изменения и т. п.) возвращается вызовом одной из функций XXXctl с командой IPC_STAT и пpoгрaммoй ipcs. Для получения информации об объектах Posix стандартных способов не предусматривается. Если реализация использует файлы в качестве основы для этих объектов, можно получить эту информацию с помощью функции stat или программы ls, если нам известен способ преобразования имени Posix IPC в полное имя файла. Если же в данной реализации файлы не используются, способа получить такую информацию может и не существовать.

? Из всех средств синхронизации — взаимных исключений, условных переменных, блокировок чтения-записи, блокировок записи, семафоров — только две функции можно вызывать из обработчика сигналов (табл. 5.1): sem_post и fcntl.

? Из всех средств передачи сообщений — каналов, очередей сообщений Posix и System V — только две функции могут быть вызваны из обработчика сигналов: read и write (используются с именованными и неименованными каналами).

? Из всех средств передачи сообщений только двери предоставляют серверу точную информацию о клиенте (раздел 15.5). В разделе 5.4 мы упомянули два других способа передачи сообщений, которые также предоставляют информацию о клиенте: доменные сокеты в BSD/OS (раздел 14.8 [24]) и каналы в SVR4, если по ним передается дескриптор файла (раздел 15.3.1 [21]).

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Эпилог Год спустя

Из книги Все под контролем: Кто и как следит за тобой автора Гарфинкель Симеон

Эпилог Год спустя Через год после того как эта книга увидела свет, приватность стала одним из ключевых вопросов, волнующих жителей Соединенных Штатов. Правительственные деятели и бизнесмены теперь осознают, что боязнь клиентов потерять контроль над своей персональной


Эпилог

Из книги Об интеллекте [другая версия перевода книги] автора Хокинс Джефф

Эпилог Астроном Карл Саган любил говорить, что понимание чего-либо не уменьшает его интересность и загадочность. Множество людей боятся, что научное понимание повлечет за собой компромисс с удивительностью, как если бы знание высасывало бы вкус и цвет жизни. Но Саган был


Чертов Ублюдок Оператор — Эпилог

Из книги Чёртов Ублюдок Оператор [BOFH] автора Travaglia Simon

Чертов Ублюдок Оператор — Эпилог Я вернулся из Англии и получил назначение на должность программиста–аналитика… В этом качестве я должен работать по восемь часов, и я решил посмотреть, на что похожи смены с 9 до 5.Мне это не понравилось.Я решил зайти в старую добрую


Эпилог

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Эпилог В этой книге подробно описаны четыре средства межпроцессного взаимодействия (IPC):1. Передача сообщений (именованные и неименованные каналы, очереди сообщений Posix и System V).2. Синхронизация (взаимные исключения и условные переменные, блокировки чтения-записи,


Эпилог

Из книги Тайм-менеджмент для системных администраторов автора Лимончелли Томас

Эпилог Поздравляю! Вы прошли весь путь до конца. Что теперь?Во-первых, я рекомендую вам перечитать эту книгу. Повторенье — мать ученья. Если вы перечитаете (или хотя бы просмотрите) книгу, пока она еще свежа в вашей памяти, положительный эффект усилится.Во-вторых, мы лучше


Эпилог

Из книги Принцип Касперского [Телохранитель Интернета] автора Дорофеев Владислав Юрьевич


Глава 33 Эпилог

Из книги Руководство по переходу на Ubuntu 10.04 LTS «Lucid Lynx» автора Неворотин Вадим

Глава 33 Эпилог Надеюсь, вы смогли разобраться в Ubuntu и освоить эту прекрасную операционную систему. Скорее всего у вас остались ещё вопросы, возможно даже очень много вопросов. Я не ставил целью описать всё до последнего винтика, это просто нереально, да и смысла не имеет.


Эпилог

Из книги Фундаментальные алгоритмы и структуры данных в Delphi автора Бакнелл Джулиан М.

Эпилог Если быть кратким, написание этой книги явилось интересным опытом (а также работой, попортившей немало кровушки).В течение долгих лет я считал, что Delphi, Visual Basic, а теперь и Kylix, порождали, порождают и будут порождать программистов, которые не имеют ни малейшего


Эпилог. Рецепт мечты

Из книги Яндекс Воложа [История создания компании мечты] автора Дорофеев Владислав Юрьевич

Эпилог. Рецепт мечты Можно попробовать поэлементно разложить слагаемые успеха «Яндекса» и главного героя повествования Аркадия Воложа. Вот что получается. В вольной последовательности. Кому как понравится.1. Оригинальность, а зачастую первенство всех разработок. В


Эпилог Домой

Из книги Сеть. Как устроен и как работает Интернет автора Блам Эндрю

На картах его нет – настоящие места никогда не отмечаются на картах. Герман Мелвилл И каким-то образом я догадался, что воображаемая реальность позади экранов компьютеров превратится в единую вселенную. Уильям Гибсон Вступление Вперед! В один очень холодный зимний


Эпилог

Из книги Новый ум короля [О компьютерах, мышлении и законах физики] автора Пенроуз Роджер


Глава 10 Эпилог

Из книги UNIX — универсальная среда программирования автора Пайк Роб

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


Эпилог: Рык в ночи

Из книги The Intel [Как Роберт Нойс, Гордон Мур и Энди Гроув создали самую влиятельную компанию в мире] автора Мэлоун Майкл