Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

TNSDL - это аббревиатура от TeleNokia Specification and Description Language . TNSDL основан на языке ITU-T SDL -88. Он используется исключительно в Nokia Networks , в первую очередь для разработки приложений для телефонных станций .

Цель [ править ]

TNSDL - это процедурный язык программирования общего назначения . Он особенно хорошо подходит для разработки распределенных систем с высокой степенью параллелизма. [1]

Первоначально он был разработан для программирования коммутаторов с коммутацией каналов. По мере того, как мир перешел на коммутацию пакетов и интернет-связь, TNSDL также оказался отличным подходом для разработки интернет-серверов.

Дизайн [ править ]

TNSDL - очень простой и легкий в освоении язык программирования.

Основы [ править ]

TNSDL - это строго типизированный процедурный язык программирования . Его основные возможности сопоставимы с языками C и Pascal .

Мультиобработка [ править ]

В TNSDL процессы создаются командой CREATE. (Это несколько похоже на команды POSIX fork или pthread_create .) Команда CREATE создает либо процесс операционной системы, либо совместную задачу .

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

В случае совместной многозадачности программа планируется как один процесс операционной системы. Когда кооперативный поток входит в состояние ожидания асинхронного ввода, может выполняться другой поток программы.

Передача сообщений [ править ]

Особенностью TNSDL является модель актера . Процессы предназначены для проектирования как конечных автоматов, управляемых событиями . Межпроцессное взаимодействие осуществляется посредством асинхронной передачи сообщений . Команда OUTPUT отправляет сообщение, а операторы INPUT определяют ожидаемые сообщения.

Таймеры с точки зрения TNSDL - это отложенные сообщения. Как и в случае с обычными сообщениями, истечение таймера обрабатывается оператором INPUT. Команда SET запускается, а команда RESET отменяет таймер.

Конечные автоматы могут быть дополнительно использованы, например, для предотвращения приема определенных входных сообщений на каком-то этапе обработки.

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

DCL  WITHWARMING  / * Данные для прямой миграции (на платформах, поддерживающих «прогрев») * /  query_process  pid ;  / * PID отправителя query_signal * /КОНСТАНТА  TIME_TO_WAIT  =  10 ;  / * Тайм-аут ответа базы данных * /ТАЙМЕР  db_timeout_timer ;  / * Таймер ответа базы данных * /СОСТОЯНИЕ  простоя ;  / * Состояние ожидания, ожидание сигнала запроса * /  INPUT  query_signal ( DCL  input_data );  DCL  db_query  db_query_type ;  / * Локальная переменная, хранящаяся в стеке. * /  TASK  query_process  : =  SENDER ;  / * Адрес отправителя сохраняется в определенной области памяти, которая сохраняется даже при обновлении программного обеспечения. * /  TASK  db_query . поле1  : =  некоторая_процедура ( входные_данные ),  db_query . поле2  : =  входные_данные .field1 ;  ВЫВОД  db_request_signal ( db_query )  TO  db_process ;  / * Отправить запрос процессу базы данных * /  SET ( NOW  +  time_to_wait ,  db_timeout_timer );  / * Запуск таймера ответа базы данных * /  NEXTSTATE  wait_db ;  / * Ввести состояние wait_db, в котором ожидается ответ базы данных * / ENDSTATE  idle ;СОСТОЯНИЕ  wait_db ;  ВХОД  db_response_signal ( DCL  answer_data );  СБРОС ( db_timeout_timer )  COMMENT  ' Database  ответил  на  время ' ;  ВЫВОД  answer_signal ( данные_ответа . Записи )  TO  query_process ;  NEXTSTATE  простаивает ; INPUT  db_timeout_timer ;  / * Тайм-аут * /  ВЫВОД  error_signal ( error_constant )  TO  query_process ;  NEXTSTATE  простаивает ; ENDSTATE  wait_db ;

Комментарии:

  • Конечный автомат предотвращает обработку любого нового query_signal, ожидая ответа программы базы данных.
  • ОТСУТСТВИЕ означает, что когда другой компьютер берет на себя роль текущего, отмеченные данные (переменная) будут скопированы на новый компьютер. Следовательно, если смена оборудования или обновление программного обеспечения произойдет в ожидании ответа базы данных, адрес отправителя запроса не будет потерян, и ответ может быть доставлен должным образом. Однако он поддерживается не на всех платформах.

TNSDL позволяет привязать входные данные к нескольким или всем состояниям. При необходимости входной сигнал может иметь поведение, зависящее от состояния.

СОСТОЯНИЕ  простоя  КОММЕНТАРИЙ  « Состояние ожидания  » ; INPUT are_you_busy ; ВЫВОД ДЛЯ ОТПРАВИТЕЛЯ ; NEXTSTATE - ; / * Без изменения состояния * / / * ... другие обработчики ввода * / ENDSTATE idle ;           СОСТОЯНИЕ  * ( простаивает )  КОММЕНТАРИЙ  ' Любое  состояние ,  кроме  простоя ' ;  INPUT  are_you_busy ;  ВЫХОДНЫЕ  да  К  ОТПРАВИТЕЛЮ ;  NEXTSTATE  - ;  / * Без изменения состояния * / ENDSTATE  * ( простоя );СОСТОЯНИЕ  *  КОММЕНТАРИЙ  ' Любое  состояние ' ;  INPUT  are_you_alive ;  ВЫХОДНЫЕ  да  К  ОТПРАВИТЕЛЮ ;  NEXTSTATE  - ;  / * Без изменения состояния * / ENDSTATE  * ;

Отличия от SDL-88 [ править ]

Nokia внесла несколько изменений в язык [2], в основном включая упрощения и дополнения, такие как:

  • Такие функции, как каналы и маршруты сигналов, были заменены другими механизмами.
  • В TNSDL были добавлены концепции модулей и сервисов (сервисная концепция SDL-88 аналогична субавтоматической функции TNSDL).
  • Некоторые элементы были переименованы (например, приоритетные входы называются в TNSDL внутренними входами).
  • В TNSDL функция MACRO была опущена, и была добавлена ​​конструкция WHILE, позволяющая структурировать циклы без использования JOIN.

Компиляция [ править ]

TNSDL не компилируется напрямую в машинный код. Вместо этого программы TNSDL переводятся в исходный код языка C. В обязанности TNSDL входит обеспечение простого и безопасного кодирования обработки сообщений, определений конечных автоматов, синхронизации параллельного выполнения, «подогрева данных» и т. Д. Задача генерации кода для конкретного процессора и низкоуровневой оптимизации делегируется используемому компилятору C.

После перевода TNSDL в C можно использовать любой совместимый со стандартом компилятор C, компоновщик, инструмент измерения покрытия и профилирования. Чтобы сделать возможной отладку на уровне исходного кода, TNSDL помещает ссылки на номера строк в сгенерированный код C.

Код TNSDL может вызывать подпрограммы, реализованные на других языках, если для них присутствуют объекты или библиотеки. Можно использовать даже макросы языка C , если присутствуют файлы заголовков C. Внешние объявления должны быть доступны для переводчика TNSDL.

Переводчик TNSDL - это проприетарный инструмент. Также специально для TNSDL был разработан анализатор исходного кода (достижимости). [3]

Используйте [ редактировать ]

TNSDL обычно используется на платформах DX 200 , IPA 2800 и Linux для высокопроизводительных приложений с высокой доступностью.

TNSDL - это активно используемый и развивающийся язык программирования, которым пользуются тысячи разработчиков (в 2010 году). [ необходима цитата ]

TNSDL в основном используется в Nokia Networks для разработки программного обеспечения для SGSN , BSC , центров коммутации мобильной связи , серверов приложений как в традиционных конфигурациях, так и в качестве функций виртуальной сети (VNF) решений NFV .

Похожие языки программирования [ править ]

Несмотря на различие в синтаксисе, вероятно, одним из ближайших родственников TNSDL является язык Go . В центре внимания обоих языков - легковесные процессы . Канал Go похож на TNSDL INPUT, а оператор выбора Go для каналов допускает очень похожий дизайн программы. Однако есть отличия. TNSDL использует асинхронную передачу сообщений между участниками , в то время как каналы в Go могут быть синхронными или асинхронными (буферизованными). TNSDL позволяет передавать сообщения между процессами, запущенными на одном или разных компьютерных узлах. В этом аспекте TNSDL является родственником Erlang .

Несмотря на то, что в TNSDL можно определять операторы для типов и защищать атрибуты структуры, чтобы они были доступны только через эти операторы, TNSDL не является объектно-ориентированным языком. В этом аспекте он принадлежит к семейству , не объектно - ориентированного программирования процедурного программирования языков, таких как C язык .

История [ править ]

1980-е: Вначале ITU-T SDL имел графический синтаксис. Текстовый синтаксис был введен позже. Соответствующий графический инструмент и генератор кода были разработаны внутри Nokia .

1990: ITU-T SDL перешел на текстовое представление. На основе спецификации SDL-88 родился TNSDL. TNSDL - это упрощенный и сильно модифицированный вариант SDL-88.

Ссылки [ править ]

  1. ^ Жаннетт М. Винг; Джим Вудкук; Джим Дэвис, ред. (1999). FM'99 - Формальные методы: Всемирный конгресс по формальным методам, 1999, Труды . Springer. ISBN 3540665870.
  2. ^ Jyrinki, Теро (1997). «Динамический анализ программ SDL с использованием сетей предикатов / переходов». Хельсинкский технологический университет, лаборатория цифровых систем: 22. Cite journal requires |journal= (help)
  3. ^ Хусберг, Ниссе; Мальмквист, Маркус; Юринки, Теро (1996). «Эмма: инструмент для анализа программ SDL». CiteSeerX 10.1.1.30.3240 .  Cite journal requires |journal= (help)