El lenguaje de especificación y descripción de TeleNokia ( TNSDL ) se basa en el lenguaje de especificación y descripción (SDL)-88 de la UIT-T . Se utiliza exclusivamente en Nokia Networks , principalmente para desarrollar aplicaciones para centrales telefónicas .
Objetivo
TNSDL es un lenguaje de programación procedimental de propósito general . Es especialmente adecuado para el desarrollo de sistemas distribuidos y altamente concurrentes. [ 1 ]
Diseñado originalmente para programar centrales telefónicas conmutadas por circuitos, a medida que el mundo evolucionó hacia las telecomunicaciones basadas en conmutación de paquetes e Internet, TNSDL resultó ser una excelente opción también para el desarrollo de servidores de Internet.
Diseño
TNSDL es un lenguaje de programación muy sencillo y fácil de aprender.
Lo esencial
TNSDL es un lenguaje de programación procedimental fuertemente tipado . Sus capacidades básicas son comparables a las de 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 no refleja qué método de planificación se utiliza. Sin embargo, para evitar ciertas condiciones de carrera , puede ser necesario planificar la ejecución en paralelo de un programa. TNSDL admite explícitamente la marcación de secciones críticas en el código.
En el caso de la multitarea cooperativa , un programa se planifica como un único proceso del sistema operativo. Cuando un hilo cooperativo entra en estado de espera de entrada asíncrona, otro hilo del programa puede ejecutarse.
paso de mensajes
La característica principal de TNSDL es el modelo de actores . Los procesos se diseñan como máquinas de estados finitos orientadas a eventos . La comunicación entre procesos se realiza mediante el paso de mensajes asíncrono . El comando OUTPUT envía un mensaje, mientras que las instrucciones INPUT definen los mensajes esperados.
Desde la perspectiva de TNSDL, los temporizadores son mensajes con retardo. Al igual que con los mensajes ordinarios, la expiración del temporizador se gestiona mediante la instrucción INPUT. El comando SET inicia un temporizador y el comando RESET lo cancela.
Las máquinas de estados pueden utilizarse opcionalmente, por ejemplo, para impedir la aceptación de ciertos mensajes de entrada en alguna etapa del procesamiento.
El fragmento de código que se muestra a continuación ilustra cómo un servidor recibe una señal de consulta (mensaje), se comunica 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 admiten "calentamiento") */ query_process pid ; /* PID del remitente de query_signal */CONSTANTE tiempo_de_espera = 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 de señal de consulta */ ENTRADA query_signal ( DCL input_data ); DCL db_query db_query_type ; /* Variable local, almacenada en la pila. */ TAREA query_process := SENDER ; /* Dirección del remitente guardada en un área de memoria específica, que se conserva incluso en una actualización de software. */ TAREA db_query . field1 := some_procedure ( input_data ), db_query . field2 := input_data . field1 ; SALIDA db_request_signal ( db_query ) A db_process ; /* Enviar solicitud al proceso de base de datos */ ESTABLECER ( AHORA + tiempo_de_espera , db_timeout_timer ); /* Iniciar temporizador de respuesta de la base de datos */ SIGUIENTE ESTADO wait_db ; /* Entrar en el estado wait_db donde se espera la respuesta de la base de datos */ FIN ESTADO inactivo ;ESTADO wait_db ; ENTRADA db_response_signal ( DCL answer_data ); REINICIAR ( db_timeout_timer ) COMENTARIO ' La base de datos respondió a tiempo ' ; SALIDA answer_signal ( answer_data . records ) A query_process ; SIGUIENTE ESTADO idle ;INPUT db_timeout_timer ; /* Tiempo de espera */ OUTPUT error_signal ( error_constant ) TO query_process ; NEXTSTATE idle ; ENDSTATE wait_db ;Comentarios:
- La máquina de estados impide que se procese cualquier nueva señal de consulta mientras espera la respuesta del programa de la base de datos.
- La función WITHWARMING significa que cuando otro ordenador toma el relevo del actual, los datos marcados (variables) se copian al nuevo ordenador. Por lo tanto, si se produce un cambio de hardware o una actualización de software mientras se espera la respuesta de la base de datos, la dirección del remitente de la consulta no se perderá y la respuesta se entregará correctamente. Sin embargo, no es compatible con todas las plataformas.
TNSDL permite vincular las entradas a varios o a todos los estados. Si es necesario, una señal de entrada puede tener un comportamiento específico para cada estado.
ESTADO inactivo COMENTARIO ' Estado inactivo ' ; ENTRADA are_you_busy ; SALIDA no AL REMITENTE ; SIGUIENTE ESTADO - ; /* Sin cambio de estado */ /* ... otros manejadores de entrada */ FIN ESTADO inactivo ;ESTADO * ( inactivo ) COMENTARIO ' Cualquier estado , excepto inactivo ' ; ENTRADA are_you_busy ; SALIDA yes AL REMITENTE ; SIGUIENTE ESTADO - ; /* Sin cambio de estado */ ESTADO FINAL * ( inactivo );ESTADO * COMENTARIO ' Cualquier estado ' ; ENTRADA are_you_alive ; SALIDA yes AL REMITENTE ; SIGUIENTE ESTADO - ; /* Sin cambio de estado */ FIN DE ESTADO * ;Diferencias con respecto a SDL-88
Nokia ha realizado varias modificaciones al lenguaje, [ 2 ] que incluyen principalmente simplificaciones y adiciones, tales como:
- Funcionalidades como los canales y las rutas de señal han sido sustituidas por otros mecanismos.
- En TNSDL se añadieron los conceptos de módulos y servicios (el concepto de servicio de SDL-88 es similar a la función de subautómatas de TNSDL).
- Algunos elementos han sido renombrados (por ejemplo, en TNSDL, las entradas de prioridad se llaman entradas internas).
- En TNSDL se ha omitido la función MACRO y se ha añadido una estructura WHILE para permitir bucles de forma estructurada sin utilizar JOINs.
Compilación
TNSDL no se compila directamente a código máquina . En su lugar, los programas TNSDL se traducen a código fuente en lenguaje C como representación intermedia . La función de TNSDL es permitir la gestión de mensajes, la definición de máquinas de estado, la sincronización de la ejecución paralela, el precalentamiento de datos, etc., de forma sencilla y segura. La generación de código específico del procesador y la optimización de bajo nivel se delegan al compilador de C utilizado.
Tras traducir TNSDL a C, se puede utilizar cualquier compilador, enlazador, herramienta de medición de cobertura y de análisis de rendimiento de C que cumpla con los estándares. Para permitir la depuración a nivel de código fuente, TNSDL incluye referencias a los números de línea del código C generado.
El código TNSDL puede llamar a rutinas implementadas en otros lenguajes, si existen objetos o bibliotecas para ellas. Incluso se pueden usar macros del lenguaje C , si existen archivos de cabecera de C. Las declaraciones externas deben estar disponibles para el traductor TNSDL.
El traductor TNSDL es una herramienta propietaria. También se ha desarrollado un analizador de código fuente (accesibilidad) específicamente para TNSDL. [ 3 ]
Usar
TNSDL se utiliza habitualmente en las plataformas DX 200 , IPA 2800 y Linux para aplicaciones de alto rendimiento y alta disponibilidad.
TNSDL es un lenguaje de programación en constante uso y desarrollo, utilizado por miles de desarrolladores (en 2010).
TNSDL se utiliza principalmente en Nokia Networks para desarrollar software para SGSN , BSC , centros de conmutación móvil y 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 sea el lenguaje Go . Ambos lenguajes se centran en procesos ligeros . Los canales de Go son similares a las entradas de TNSDL y la instrucción select de Go en los canales permite un diseño de programa muy similar. Sin embargo, existen diferencias. TNSDL utiliza el paso de mensajes asíncrono entre actores , mientras que los canales en Go pueden ser síncronos o asíncronos (con búfer). TNSDL permite el paso de mensajes entre procesos que se ejecutan en el mismo nodo o en nodos separados. En ese aspecto, TNSDL es pariente de Erlang .
Aunque en TNSDL se pueden definir operadores para tipos y proteger los atributos de las estructuras para que solo sean accesibles mediante esos operadores, TNSDL no es un lenguaje orientado a objetos . En ese sentido, pertenece a la familia de lenguajes de programación procedimentales no orientados a objetos , 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: La UIT-T SDL se orientó hacia la representación basada en texto. A partir de la especificación SDL-88, nació TNSDL. TNSDL es una variante simplificada y altamente 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 . Springer. 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}}: Para citar una revista se requiere|journal=( ayuda ) - ^ Husberg, Nisse; Malmqvist, Markus; Jyrinki, Tero (1996). "Emma: una herramienta para el análisis de programas SDL". Universidad Estatal de Pensilvania . CiteSeerX 10.1.1.30.3240 .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda )
- lenguajes de especificación formal
- Lenguajes de programación procedimental
- Lenguajes de programación creados en la década de 1980