ТНСДЛ
TNSDL означает язык спецификаций и описаний TeleNokia . 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 отправителя запроса_сигнала */ 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 . поле1 := некоторая_процедура ( входные_данные ), db_query . поле2 := входные_данные . поле1 ; ВЫХОД db_request_signal ( db_query ) TO db_process ; /* Отправляем запрос процессу базы данных */ SET ( NOW + time_to_wait , db_timeout_timer ); /* Запускаем таймер ответа базы данных */ NEXTSTATE wait_db ; /* Вход в состояние wait_db, в котором ожидается ответ базы данных */ ENDSTATE IDEA ; СОСТОЯНИЕ wait_db ; INPUT db_response_signal ( DCL ответ_данные ); RESET ( db_timeout_timer ) COMMENT ' данных ответила вовремя ' ; База ВЫХОД ответ_сигнала ( ответ_данные . записи ) В запрос_процесса ; NEXTSTATE простой ; ВВОД db_timeout_timer ; /* Таймаут */ OUTPUT error_signal ( error_constant ) TO query_process ; NEXTSTATE простой ; ENDSTATE wait_db ;
Комментарии:
- Конечный автомат предотвращает обработку любого нового query_signal во время ожидания ответа программы базы данных.
- СТЕПЕНИЕ означает, что когда другой компьютер возьмет на себя роль текущего, отмеченные данные (переменная) будут скопированы на новый компьютер. Таким образом, если изменение оборудования или обновление программного обеспечения произойдет во время ожидания ответа базы данных, адрес отправителя запроса не будет потерян, и ответ может быть доставлен правильно. Однако он поддерживается не на всех платформах.
TNSDL позволяет привязывать входные данные к нескольким или всем состояниям. При необходимости входной сигнал может иметь поведение, зависящее от состояния.
STATE IDLE COMMENT ' ожидания Состояние ' ; ВВОД are_you_busy ; ОТПРАВИТЕЛЮ № ВЫВОД ; СЛЕДУЮЩЕЕ СОСТОЯНИЕ - ; /* Никакого изменения состояния */ /* ... другие обработчики ввода */ ENDSTATE Idle ; STATE * ( idle ) COMMENT ' Любое состояние , кроме простоя ' ; ВВОД are_you_busy ; ОТПРАВИТЕЛЮ да ВЫВОД ; СЛЕДУЮЩЕЕ СОСТОЯНИЕ - ; /* Никакого изменения состояния */ ENDSTATE * ( idle ); STATE * COMMENT ' Любое состояние ' ; ВВОД are_you_alive ; ОТПРАВИТЕЛЮ да ВЫВОД ; СЛЕДУЮЩЕЕ СОСТОЯНИЕ - ; /* Никакого изменения состояния */ ENDSTATE * ;
Отличия от СДЛ-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 похож на INPUT TNSDL, а оператор выбора 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, Труды . Спрингер. ISBN 3540665870 .
- ^ Юринки, Теро (1997). «Динамический анализ программ SDL с сетями предикатов/переходов». Хельсинкский технологический университет, Лаборатория цифровых систем: 22.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Хусберг, Ниссе; Мальмквист, Маркус; Юринки, Теро (1996). «Эмма: инструмент для анализа программ SDL». CiteSeerX 10.1.1.30.3240 .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь )