TNSDL son las siglas de TeleNokia Specification and Description Language . TNSDL se basa en el lenguaje ITU-T SDL -88. Se utiliza exclusivamente en Nokia Networks , principalmente para desarrollar aplicaciones para centrales telefónicas .
Propósito
TNSDL es un lenguaje de programación procedimental de propósito general . Es especialmente adecuado para desarrollar sistemas distribuidos altamente concurrentes. [1]
Originalmente fue diseñado para programar intercambios de circuitos conmutados. A medida que el mundo se desplazó hacia las telecomunicaciones conmutadas por paquetes y basadas en Internet, TNSDL resultó ser una excelente opción para el desarrollo de servidores de Internet también.
Diseño
TNSDL es un lenguaje de programación muy simple y fácil de aprender.
Lo esencial
TNSDL es un lenguaje de programación procedimental fuertemente tipado . Sus capacidades básicas son comparables a los lenguajes C y Pascal .
Multiprocesamiento
En TNSDL, los procesos se crean mediante el comando CREATE. (Es algo similar a los comandos POSIX fork o pthread_create ). El comando CREATE crea un proceso del sistema operativo o una tarea cooperativa .
El modelo de proceso se puede seleccionar mediante configuración. El código fuente en sí no refleja qué método de programación se utiliza. Aún así, para evitar ciertas condiciones de carrera , es posible que los desarrolladores deban estar preparados para la ejecución paralela. TNSDL admite explícitamente que las secciones críticas se marquen en el código.
En caso de multitarea cooperativa, un programa se programa como un proceso de sistema operativo. Cuando un subproceso cooperativo entra en el estado de espera de una entrada asincrónica, se puede ejecutar otro subproceso del programa.
Paso de mensajes
La característica de TNSDL es el modelo de actor . Los procesos deben diseñarse como máquinas de estados finitos controladas por eventos . La comunicación entre procesos se realiza mediante el paso de mensajes asíncronos . El comando OUTPUT envía un mensaje, mientras que las declaraciones INPUT definen los mensajes esperados.
Los temporizadores, desde la perspectiva de TNSDL, son mensajes retrasados. Al igual que los mensajes ordinarios, la expiración del temporizador se maneja mediante la instrucción INPUT. Se inicia el comando SET y el comando RESET cancela un temporizador.
Las máquinas de estado se pueden usar opcionalmente, por ejemplo, para evitar aceptar ciertos mensajes de entrada en alguna etapa del procesamiento.
La siguiente pieza de código muestra un servidor, que recibe una señal de consulta (mensaje), contacta con un proceso de base de datos para obtener los datos necesarios y finalmente envía una señal de respuesta.
DCL WITHWARMING / * Datos que se migrarán en vivo (en plataformas que admitan "warming") * / query_process pid ; / * PID del remitente de query_signal * /CONSTANTE tiempo_hasta_esperar = 10 ; / * Tiempo de espera de la respuesta de la base de datos * /TIMER db_timeout_timer ; / * Temporizador de respuesta de la base de datos * /ESTADO inactivo ; / * Estado inactivo, espera la señal de consulta * / INPUT query_signal ( DCL input_data ); DCL db_query db_query_type ; / * Variable local, almacenada en pila. * / TASK query_process : = REMITENTE ; / * Dirección del remitente guardada en un área de memoria específica, que se conserva incluso en la actualización del software. * / TASK db_query . field1 : = some_procedure ( input_data ), db_query . campo2 : = input_data . campo1 ; SALIDA db_request_signal ( db_query ) TO db_process ; / * Enviar solicitud al proceso de la base de datos * / SET ( NOW + time_to_wait , db_timeout_timer ); / * Iniciar el temporizador de respuesta de la base de datos * / NEXTSTATE wait_db ; / * Ingrese el estado wait_db donde se espera la respuesta de la base de datos * / ENDSTATE inactivo ;ESTADO wait_db ; ENTRADA db_response_signal ( DCL answer_data ); RESET ( db_timeout_timer ) COMENTARIO ' Base de datos respondida a tiempo ' ; SALIDA answer_signal ( answer_data . Registros ) TO query_process ; NEXTSTATE inactivo ; INPUT db_timeout_timer ; / * Tiempo de espera * / SALIDA error_signal ( error_constant ) TO query_process ; NEXTSTATE inactivo ; ENDSTATE wait_db ;
Comentarios:
- La máquina de estado evita que se procese cualquier nueva query_signal mientras se espera que responda el programa de la base de datos.
- WITHWARMING significa que cuando otra computadora asume el rol de la actual, los datos marcados (variable) se copiarán a la nueva computadora. Por lo tanto, si se produce un cambio de hardware o una actualización de software mientras espera que la base de datos responda, la dirección del remitente de la consulta no se perderá y la respuesta se podrá entregar correctamente. Sin embargo, no es compatible con todas las plataformas.
TNSDL permite vincular las entradas a varios o todos los estados. Una señal de entrada puede tener un comportamiento específico de estado, si es necesario.
ESTADO inactivo COMENTARIO ' Estado inactivo ' ; INPUT are_you_busy ; SALIDA no AL REMITENTE ; NEXTSTATE - ; / * Sin cambio de estado * / / * ... otros manejadores de entrada * / ENDSTATE inactivo ; ESTADO * ( inactivo ) COMENTARIO ' Cualquier estado , excepto inactivo ' ; INPUT are_you_busy ; SALIDA sí AL REMITENTE ; NEXTSTATE - ; / * Sin cambio de estado * / ENDSTATE * ( inactivo );ESTADO * COMENTARIO ' Cualquier estado ' ; INPUT are_you_alive ; SALIDA sí AL REMITENTE ; NEXTSTATE - ; / * Sin cambio de estado * / ENDSTATE * ;
Diferencias con SDL-88
Nokia ha realizado varias modificaciones al lenguaje, [2] principalmente incluyendo simplificaciones y adiciones, tales como:
- Características como canales y rutas de señales han sido reemplazadas por otros mecanismos.
- Los conceptos de módulos y servicios se agregaron en TNSDL (el concepto de servicio de SDL-88 es similar a la característica de subautomatón de TNSDL).
- Se ha cambiado el nombre de algunos elementos (por ejemplo, las entradas prioritarias se denominan entradas internas en TNSDL).
- En TNSDL, se ha omitido la característica MACRO y se ha agregado una construcción WHILE para permitir bucles de forma estructurada sin utilizar JOIN.
Compilando
TNSDL no se compila directamente en código de máquina. En cambio, los programas TNSDL se traducen al código fuente del lenguaje C. La responsabilidad de TNSDL es permitir el manejo de mensajes, las definiciones de la máquina de estado, la sincronización de la ejecución paralela, el "calentamiento de datos", etc. codificados de manera fácil y segura. La tarea de generación de código específico del procesador y optimización de bajo nivel se delega al compilador de C utilizado.
Después de traducir TNSDL a C, se puede utilizar cualquier compilador de C, enlazador, medición de cobertura y herramienta de creación de perfiles que cumpla con los estándares. Para hacer posible la depuración a nivel de fuente, TNSDL coloca referencias de números de línea al código C generado.
El código TNSDL puede llamar a rutinas implementadas en otros lenguajes, si hay objetos o bibliotecas presentes para ellos. Incluso se pueden usar macros en lenguaje C , si hay archivos de encabezado C. Las declaraciones externas deben estar disponibles para el traductor TNSDL.
El traductor TNSDL es una herramienta patentada. También se ha desarrollado un analizador de código fuente (accesibilidad) específicamente para TNSDL. [3]
Usar
TNSDL se usa comúnmente en las plataformas DX 200 , IPA 2800 y Linux para aplicaciones de alto rendimiento y alta disponibilidad.
TNSDL es un lenguaje de programación desarrollado y utilizado activamente por miles de desarrolladores (en 2010). [ cita requerida ]
TNSDL se utiliza principalmente en Nokia Networks para desarrollar software para SGSN , BSC , centros de conmutación móvil , servidores de aplicaciones tanto en configuraciones tradicionales como en funciones de red virtual (VNF) de soluciones NFV .
Lenguajes de programación similares
A pesar de la diferencia en la sintaxis, probablemente uno de los parientes más cercanos de TNSDL es el lenguaje Go . Ambos lenguajes tienen procesos livianos en su enfoque. Los canales de Go son similares a las ENTRADAS TNSDL y la declaración de selección de Go sobre canales permite un diseño de programas muy similar. Sin embargo, existen diferencias. TNSDL utiliza el paso de mensajes asíncronos entre actores , mientras que los canales en Go pueden ser síncronos o asíncronos (almacenados en búfer). TNSDL permite el paso de mensajes entre procesos que se ejecutan en el mismo o en nodos de computadora separados. En ese aspecto, TNSDL es un pariente de Erlang .
Aunque en TNSDL se pueden definir operadores para tipos y proteger atributos de estructura para que sean accesibles a través de esos operadores únicamente, TNSDL no es un lenguaje orientado a objetos. En ese aspecto que pertenece a la familia de la no programación orientada a objetos de programación de procedimiento idiomas, como el lenguaje C .
Historia
Década de 1980: Al principio, ITU-T SDL tenía una sintaxis gráfica. La sintaxis textual se introdujo más tarde. Nokia desarrolló una herramienta gráfica y un generador de código correspondientes .
1990: UIT-T SDL cambió hacia la representación basada en texto. Basado en la especificación SDL-88, nació TNSDL. TNSDL es una variante simplificada y muy personalizada de SDL-88.
Referencias
- ^ Jeannette M. Wing; Jim Woodcook; Jim Davies, eds. (1999). FM'99 - Métodos formales: Congreso mundial sobre métodos formales, 1999, Actas . Saltador. ISBN 3540665870.
- ^ Jyrinki, Tero (1997). "Análisis dinámico de programas SDL con redes de predicado / transición". Universidad Tecnológica de Helsinki, Laboratorio de Sistemas Digitales: 22. Cite journal requiere
|journal=
( ayuda ) - ^ Husberg, Nisse; Malmqvist, Markus; Jyrinki, Tero (1996). "Emma: una herramienta para el análisis de programas SDL". CiteSeerX 10.1.1.30.3240 . Cite journal requiere
|journal=
( ayuda )