stringtranslate.com

ТНСДЛ

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 */     CONSTANT time_to_wait = 10 ; /* Время ожидания ответа базы данных */    TIMER db_timeout_timer ; /* Таймер ответа базы данных */  STATE idle ; /* Состояние ожидания, ожидание сигнала запроса */ INPUT query_signal ( DCL input_data ); DCL db_query db_query_type ; /* Локальная переменная, сохраненная в стеке. */ TASK query_process := SENDER ; /* Адрес отправителя сохранен в определенной области памяти, которая сохраняется даже при обновлении программного обеспечения.*/ TASK db_query . field1 := some_procedure ( input_data ), db_query . field2 := input_data . field1 ; OUTPUT db_request_signal ( db_query ) TO db_process ; /* Отправляем запрос в процесс базы данных */ SET ( NOW + time_to_wait , db_timeout_timer ); /* Запускаем таймер ответа базы данных */ NEXTSTATE wait_db ; /* Вход в состояние wait_db, в котором ожидается ответ базы данных */ ENDSTATE idle ;                                   STATE wait_db ; INPUT db_response_signal ( DCL answer_data ); RESET ( db_timeout_timer ) COMMENT ' База данных ответила вовремя ' ; OUTPUT answer_signal ( answer_data . records ) TO query_process ; NEXTSTATE idle ;                 INPUT db_timeout_timer ; /* Тайм-аут */ OUTPUT error_signal ( error_constant ) TO query_process ; NEXTSTATE idle ; ENDSTATE wait_db ;         

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

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

СОСТОЯНИЕ бездействие КОММЕНТАРИЙ ' Состояние бездействия ' ; ВХОД are_you_busy ; ВЫХОД no TO SENDER ; NEXTSTATE - ; /* Состояние не изменилось */ /* ... другие обработчики ввода */ ENDSTATE бездействие ;               СОСТОЯНИЕ * ( idle ) КОММЕНТАРИЙ ' Любое состояние , кроме состояния ожидания ' ; ВХОД are_you_busy ; ВЫХОД yes ОТПРАВИТЕЛЮ ; СЛЕДУЮЩЕЕ СОСТОЯНИЕ - ; / * Состояние не изменилось */ КОНЕЧНОЕ СОСТОЯНИЕ * ( idle );                СОСТОЯНИЕ * КОММЕНТАРИЙ ' Любое состояние ' ; ВХОД are_you_alive ; ВЫХОД да ОТПРАВИТЕЛЮ ; СЛЕДУЮЩЕЕ СОСТОЯНИЕ - ; / * Состояние не изменилось */ КОНЕЧНОЕ СОСТОЯНИЕ * ;              

Отличия от SDL-88

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

Компиляция

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 похож на INPUT TNSDL, а оператор select в 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. ^ Юринки, Теро (1997). «Динамический анализ программ SDL с сетями предикатов/переходов». Хельсинкский технологический университет, Лаборатория цифровых систем: 22. {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  3. ^ Хусберг, Ниссе; Мальмквист, Маркус; Юринки, Теро (1996). «Эмма: инструмент для анализа программ SDL». CiteSeerX 10.1.1.30.3240 .  {{cite journal}}: Цитировать журнал требует |journal=( помощь )