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