next up previous contents
Next: Кластеры Up: DIPC - Распределенные межпроцессные Previous: DIPC - Распределенные межпроцессные   Contents

Введение

DIPC состоит из двух частей: основная часть выполняется в пространстве пользователя как обыкновенный процесс с правами суперпользователя и применяется для управления. Она называется dipcd. Этот демон может привести к снижению производительности, но увеличивает гибкость системы: изменения установок dipcd могут вступить в силу без необходимости замены ядра. Он также упрощает разработку и предохраняет ядро от еще большего усложнения; dipcd создает большое количество дочерних процессов для выполнения различных задач во время своей активности. Другая часть DIPC находится внутри ядра и предоставляет первой части необходимую функциональность и информацию для выполнения ее заданий. Не предоставляется возможным работа dipcd на базе ядра без поддержки DIPC.

Часть DIPC, относящаяся к ядру, ``заглушена'', когда dipcd не выполняется. При отсутствии dipcd, вызовы DIPC в программе должны происходить так же, как если бы они были нормальными вызовами IPC System V. Сам dipcd использует обычные средства для получения доступа к механизмам IPC System V. Эти механизмы изменчивы - так, они предполагают отличие dipcd от других пользовательских процессов. Например, dipcd может получить доступ к сегменту разделяемой памяти с помощью smget(), даже в том случае, если он был удален (shmctl() - вследствие команды IPC_RMID), - но не окончательно из ядра. Все манипуляции dipcd со структурами IPC делаются локально, без проявления вне данной машины. Это противоречит подходам к нормальным пользовательским процессам, когда действия с распределенными структурами IPC могут затронуть другие компьютеры в сети.

DIPC затрагиваются только при передаче данных в распределенной среде. Запуск соответствующих программ на различных компьютерах - это дело пользователя/программиста DIPC. Это значит, что программы для исполнения могут нуждаться в размещении на компьютере, который предназначен для их исполнения. Программы могут быть перенесены на различные компьютеры один раз и использованы множество раз после этого. Это не вызывает перегрузок при передаче кода по сети во всех случаях, когда программа запускается. Считается, что код программы остается без изменений в течение относительно долгого периода, в то время как используемые им данные изменяются часто (может быть, от одного запуска к другому), что в большинстве случаев должно считаться плюсом.

Важно учитывать, что DIPC - это набор механизмов. Речь идет не о выборе стратегии: как распараллеливается программа, где должны запускаться процессы и т.д. - решает пользователь/программист. Известно несколько иных доступных средств для решения данного класса задач, хотя в полной мере удовлетворительного решения пока не известно.

Выделяют два вида активности DIPC:

  1. Синхронная: программист использует системные вызовы для поддержания вычислительного процесса. Примерами могут служить использование xxxget() - для получения доступа к структуре IPC, или системного вызова msgrcv() - для приема сообщения. Программа делает вызов и ожидает его завершения перед тем, как продолжить работу. Далее, в процессе рассмотрения, DIPC всегда будет прибегать к таким действиям.
  2. Асинхронная: чтение разделяемой памяти и запись в нее может привести к возникновению асинхронного действия. Программист не может предугадать, где и когда может возникнуть подобная ситуация. Одним из примеров является чтение разделяемой памяти, когда затрагиваемые страницы на запрашиваемой машине подвергаются свопингу (IPC) или не подвергаются (DIPC).



2004-06-22