D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / Общие сведения / dialer

dialer

Подсистема D3

Подсистема, позволяющая системам D3 взаимодействовать через последовательные линии: передавать записи, выполнять команды на удаленных машинах, удаленно обновлять базы данных (синхронизировать БД). Далее приведены основные положения подсистемы dialer. См. "dialer, TCL" для информации о команде TCL.

Общие сведения:

Подсистема dialer представляет собой группу процессов, запущенных в каждой системе, которые взаимодействуют друг с другом в заданное системным администратором время в пакетном режиме. Основные функции:

  • копирование записей между системами (см. "dialer-copy, TCL"),
  • передача команд на удаленное выполнение (см. "dialer-submit, TCL"),
  • синхронизация БД на нескольких машинах. Данные реплицируются в каждой системе: обновления сделанные в разных системах распространяются на все системы. Например, если атрибут 2 записи А изменяется в системе М1, а атрибут 3 той же записи А изменяется в системе М2, dialer производит оба этих обновления во всех системах.

Системы идентифицируются в сети по имени и номеру телефона для удаленного подключения.

Коммуникации защищены процессом аутентификации, который проверяет права удаленных систем на подключение, выполнение команд, выполнение обновлений БД.

Определения
"Local System" Это система, к которой пользователь изначально подключился.
"Remote System" Система, которая доступна из локальной системы. Все системы должны быть описаны в каждой системе из соображений безопасности. В больших сетях поддержка списка систем на каждой машине будет слишком трудоемким. Можно посоветовать поддерживать список только на центральной машине, и с помощью dialer копировать на все другие машины.
"Serial Device" Последовательные устройства, которые будет использовать dialer, назначаются системным администратором. Устройства могут быть выделенными для dialer, либо общего использования в разное время совместно с обычным терминальным вводом-выводом. Например, модемная линия в течение рабочего дня для удаленной работы, а вечером - для передачи данных. Каждое последовательное устройство имеет уникальное имя.

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

Важно: устройство должно поддерживать 8-битный ввод-вывод для возможности передачи системных разделителей D3 (char(253), char(254), char(255)).

"IO Daemon" Фоновый процесс D3, который осуществляет весь ввод-вывод. Для обслуживания каждого разрешенного последовательного устройства запускается один IO daemon.
"Dialer" Программа администрирования коммуникационного устройства (модема). Она поддерживает конкретный протокол взаимодействия с модемом и позволяет, например, набрать номер, сбросить вызов и т.п. Dialer обычно ассоциируется с последовательным устройством. В настоящее время поставляются только Hayes-совместимые программы dialer. Для адаптации программы к модему конкретного типа, возможно, придется внести изменения в программу.
"Update Posting" Для того, чтобы подсистемы dialer могла синхронизировать изменения, в системе должен быть механизм их отслеживания. Для этого в записи описания (D pointer) обновляемого файла в атрибут 8 (correlative) вставляется вызов CALLX процедуры dm,bp, dialer.post. Пользовательское меню dialer позволяет сделать это для всего счета. После сохранения записи подпрограмма dialer.post сравнивает старый и новый вариант и создает "строку изменений", которая описывает все изменения так: текущее значение, старое значение и где оно было изменено. Такая схема позволяет не только описать изменение, но и уменьшить объем передаваемых данных. Изменения фиксируются на уровне значения. Т.е., например, если изменено только второе значение атрибута, только это значение и передается. Если изменено подзначение, - передается все значение. Если сделано несколько изменений записи, все они объединяются в одну запись изменений, которая передается за один раз. Например, рассмотрим следующие изменения записи А:
Old       New
---       ---
A: -----> A:
001 a     001 A
002 b     002 b
    bb        bbb
    bbb   003 c
003 c

Передается следующее:

  • изменение атрибута 1 с "a" на "A"
  • изменение значения 2 атрибута 2 с "bb" на "bbb"
  • удаление значения 3 в атрибуте 2
"Conflicts" Когда система получает изменения из другой системы, они применяются к локальной записи. Как правило, принимающая сторона выполняет проверку на конфликт: полученное старое значение и локальное старое значение записи должны быть равны. Например, рассмотрим две системы М1 и М2, в которых запись "А" подверглась изменениям:
System M1
---------
A: -----> A:
001 a     001 a
002 b     002 b
    bb        BB
    bbb       bbb
003 c     003 c
System M2
---------
A: -----> A:
001 a     001 a
002 b     002 b
    bb        bb
    bbb       BBB
003 c     003 c

В этом примере нет конфликта и, в результате, запись будет содержать оба изменения. Далее рассмотрим другой случай:

System M1
---------
A: -----> A:
001 a     001 a
002 b     002 b
    bb        BB
    bbb       bbb
003 c     003 c
System M2
---------
A: -----> A:
001 a     001 a
002 b     002 b
    bb        BBB
    bbb       bbb
003 c         003 c

В данном случае возникает конфликт, поскольку система не может определить "BB" или "BBB" является правильным вторым значением третьего атрибута. Изменения запоминаются как конфликт в обеих системах и не применяются к БД в обоих случаях. Системные администратор может далее отдельно разобраться с этим случаем и выполнить операцию копирования корректных изменений на обе системы. Меню подсистемы dialer имеет пункт для просмотра конфликтов, времени их возникновения (согласно временным зонам) и объекта конфликта.

"System Map" "Системная карта" определяет, какие системы необходимо синхронизировать. Карта оперирует счетами, но можно создать список избранных файлов, которые будут синхронизированы. Изменения могут быть скопированы более чем на одну систему. System Map создается из меню подсистемы dialer. Из соображений производительности, системная карта копируется в поименованную область памяти (common). Поэтому, для немедленного вступления в силу изменений системной карты, пользователь должен выйти из системы (log off) и снова войти.

Важно: подпрограмма dialer.post должна знать, в каком счете расположен обновляемый файл. Файл должен располагаться в счете, где запущено приложение, либо счет должен иметь прямую q-ссылку на файл. Полное имя файла (например, "dm,bp,"), q-указатель на q-указатель не принимаются.

"Billboard" "Доска объявлений" - общедоступный системный файл, который содержит запись на каждое исходящее и не отправленное изменение. Этот файл проверяется каждый раз при регистрации изменения на предмет группировки различных изменений записи. В больших системах может понадобиться переопределить размер этого файла.
"Spool" В spool-файл помещаются конкретные данные для отправки. На записи spool-файла ссылаются другие элементы подсистемы dialer.
"Queue" В каждой удаленной системе создается специальный файл-очередь. Эта очередь содержит связанную цепь присланных данной системе запросов. Тело запроса в этом файле не сохраняется. В случае операции копирования записи целиком, тело записи либо остается в исходном файле, либо копируется в spool-файл. В случае копирования изменения записи, в spool-файл заносится строка изменений.
Совместное использование последовательных устройств

Многие системы не могут себе позволить выделить специально для dialer последовательный порт и модем. Скорее всего, модемный порт будет использован в течение дня для удаленных подключений и администрирования. Как правило, подсистема dialer программируется на использование последовательного порта в заданном временном интервале, например, с 0:00 до 2:00 ночи каждый день для общения с удаленными системами. Таким образом, обеспечивается нормальная работа порта в течение дня. В этом случае при настройке портов требуется соблюдение следующих условий:

  • перед номером выделенного устройства ставится "S",
  • номер совместно используемого устройства - есть номер процесса D3, с которым связано данное устройство.

Например, "S119" обозначает выделенный последовательный порт. Индекс "200" присваивается совместно используемому последовательному устройству. Подсистема dialer перед установлением соединения, занимает устройство, ассоциированное с процессом D3 под номером 200 (обычно устройство с индексом 200), выполняя команду unlink-pibdev для освобождения устройства. Если в данный момент на этом устройстве работал пользователь - он отключается от системы (log off) перед тем как линия будет занята и модем сброшен.

Программы Dialer

dialer-программы - это FlashBASIC подпрограммы, реализующие конкретные протоколы связи с модемом. Эти программы должны создаваться и компилироваться в файле dm,bp,dialers. Их не нужно каталогизировать ни в каком счете. Модуль hayes реализует Hayes AT протокол. Этот модуль может послужить примером для разработки пользовательских dialer-программ. Подпрограмма должна реализовывать следующие команды:

  • DIAL$IDENTIFY - возвращает строку-идентификатор (тип и номер версии). Только для информации. Должна показывать, по крайней мере, имя и версию dialer-программы, может также опрашивать модем и возвращать тип и номер модели
  • DIAL$RESET - перезагрузка модема. Команда приводит модем в исходное состояние для исполнения команд и приема входящих вызовов. Будучи выполнена во время сеанса связи, может привести к зависанию сессии.
  • DIAL$CALL - набор номера. Аргументом является номер телефона, включая все необходимые для модема и телефонной сети специальные символы (префикс, пауза и т.п.). Возвращаемый код должен быть положительным и показывает скорость связи в бодах. Если скорость не определена, dialer должен возвратить 0 в подтверждение успешного набора номера.
  • DIAL$HANGUP - сбрасывает модем. Эта команда выполняется для завершения сеанса связи.
  • DIAL$DEFAULT - загрузка заводских установок.