CMS-2 - Enciclopedia

CMS-2 es un lenguaje de programación de sistemas embebidos utilizado por la Marina de los Estados Unidos. Fue un intento temprano para desarrollar un lenguaje de programación a alto nivel estándar, destinado a mejorar la portabilidad y reutilización del código. CMS-2 se desarrolló principalmente para los sistemas tácticos de datos de la Marina de los Estados Unidos (NTDS).

CMS-2 fue desarrollado por la RAND Corporation a principios de la década de 1970 y se conoce como "Sistema de Monitor de Compilador". El nombre "CMS-2" en la literatura se acompaña de una letra que designa el tipo de sistema objetivo. Por ejemplo, CMS-2M apunta a procesadores de 16 bits de la Marina, como el AN/AYK-14.

Historia
CMS-2 fue desarrollado para FCPCPAC (Fleet Computer Programming Center - Pacific) en San Diego, CA. Fue implementado por Computer Sciences Corporation en 1968 con asistencia de diseño de Intermetrics. El lenguaje continuó siendo desarrollado, eventualmente soportando una serie de computadoras, incluyendo las computadoras AN/UYK-7 y AN/UYK-43, y UYK-20 y UYK-44.

Características del lenguaje
CMS-2 fue diseñado para fomentar la modularización de programas, permitiendo la compilación independiente de partes de un sistema total. El lenguaje es orientado a sentencias. El código fuente es de formato libre y puede estar organizado para facilitar la programación. Los tipos de datos incluyen punto fijo, punto flotante, booleano, carácter y estado. Se permite la referencia directa y la manipulación de cadenas de caracteres y bits. Se puede incluir código maestro simbólico, conocido como código directo.

Estructura del programa

Un programa CMS-2 está compuesto por sentencias. Las sentencias están compuestas por símbolos separados por delimitadores. Las categorías de símbolos incluyen operadores, identificadores y constantes. Los operadores son primitivos del lenguaje asignados por el compilador para operaciones o definiciones específicas en un programa. Los identificadores son nombres únicos asignados por el programador a unidades de datos, elementos de programa y etiquetas de sentencia. Las constantes son valores conocidos que pueden ser numéricos, cadenas de Hollerith, valores de estado o Booleanos.

Las sentencias CMS-2 son de formato libre y se terminan con un signo de dólar. Una etiqueta de sentencia puede colocarse al principio de una sentencia para fines de referencia.
Un programa fuente CMS-2 está compuesto por dos tipos básicos de sentencia. Las sentencias declarativas proporcionan información de control básica al compilador y definen la estructura de los datos asociados con un programa particular. Las sentencias dinámicas hacen que el compilador genere instrucciones ejecutables (código objeto).
Las sentencias declarativas que definen los datos para un programa se agrupan en unidades llamadas diseños de datos. Los diseños de datos consisten en definiciones precisas para áreas de almacenamiento de datos temporal y permanente, áreas de entrada, áreas de salida y unidades de datos especiales. Las sentencias dinámicas que actúan sobre datos o realizan cálculos se agrupan en procedimientos. Los diseños de datos y los procedimientos se agrupan para formar elementos del sistema de un programa CMS-2. El compilador combina los elementos del sistema en un sistema de tiempo de compilación. Un sistema de tiempo de compilación puede estar solo o ser parte de un programa más grande.

Sentencias declarativas de datos
Las sentencias declarativas de datos proporcionan al compilador información sobre las definiciones de elementos de datos. Definen el formato, estructura y orden de los elementos de datos en un sistema de tiempo de compilación. Las tres clases principales de datos son interruptores, variables y agregados.

= Interruptores =
Los interruptores permiten la transferencia de control del programa a una ubicación específica en un sistema de tiempo de compilación. Contienen un conjunto de identificadores o puntos de interruptor para facilitar las transferencias y ramificaciones del programa. El interruptor representa una dirección de programa de una etiqueta de sentencia o nombre de procedimiento.

= Variables =
Una variable es un solo fragmento de datos. Puede consistir en un bit, múltiples bits o palabras. Se puede asignar un valor en la definición de la variable. Las variables pueden contener un valor constante o variable. Los tipos de datos incluyen enteros, punto fijo, punto flotante, cadenas de caracteres Hollerith, estado o Booleanos.

= Agrupaciones =
Las tablas contienen conjuntos ordenados de información estructurada de manera idéntica. La unidad de datos común en una tabla es un elemento. Los elementos pueden subdividirse en campos, la subdivisión más pequeña de una tabla. Los tipos de datos permitidos en los campos incluyen entero, punto fijo, punto flotante, cadena de caracteres Hollerith, estado o Booleano. Un array es una extensión del concepto de tabla. La unidad estructural básica de un array es un elemento. Los elementos del array contienen campos según lo definido por el programador.

Sentencias dinámicas
Las sentencias dinámicas especifican operaciones de procesamiento y resultan en la generación de código ejecutable por el compilador. Una sentencia dinámica consta de un operador seguido de una lista de operandos y operadores adicionales. Un operando puede ser un nombre único, una constante, una referencia a un elemento de datos o una expresión.

= Operadores de sentencia =
Se resume a continuación los principales operadores CMS-2.

= Operadores especiales =
Los operadores especiales facilitan las referencias a estructuras de datos y operaciones en ellas.

Declaraciones de estructura del programa
Las sentencias dinámicas que describen las operaciones de procesamiento de un programa se agrupan en bloques de sentencias llamados procedimientos.

Sentencias de entrada/salida a alto nivel
Las sentencias de entrada/salida proporcionan comunicación con dispositivos de hardware mientras se ejecuta en un entorno no en tiempo real bajo un sistema de monitor.

Sistema de Monitor de Compilador 2 (CMS-2)
El Sistema de Monitor de Compilador 2 (CMS-2) era un sistema que se ejecutaba en el UNIVAC CP-642B (AN/USQ-20). El software del sistema incluía el monitor, el compilador, el bibliotecario, el Cargador CP-642, la utilidad de cinta y el flujo de carta.

= Monitor MS-2 =
Un sistema operativo de procesamiento por lotes que controla la ejecución de componentes CMS-2 y trabajos de usuarios en el ordenador CP-642. Proporciona servicios de entrada/salida, biblioteca de software y herramientas de depuración. También se proporciona contabilidad de trabajos.

= Compilador CMS-2 =
Un compilador para los lenguajes CS-1 y CMS-2 que genera código objeto para los ordenadores CP-642, L-304, AN/UYK-7, 1830A y 1218/1219. Durante la década de 1970 hubo diferentes versiones del compilador CMS-2, dependiendo del ordenador utilizado para compilar el código. Algunos códigos fuente tuvieron que ser rewritten para trabajar alrededor de algunas funciones. Y las diferentes versiones de CMS-2 tenían problemas con las herramientas de depuración.

= Compilador XCMS-2 =
Un compilador extendido CMS-2 que añade características de lenguaje para el ordenador AN/UYK-7. Solo genera código objeto AN/UYK-7.

= Bibliotecario CMS-2 =
Un sistema de gestión de archivos que proporciona almacenamiento y acceso al código fuente y objeto.

= Cargadores de código objeto CP-642 =
Dos cargadores de código objeto para cargar código objeto absoluto o reubicable.

= Utilidad de cinta =
Un conjunto de utilidades para gestionar datos en cinta magnética.

= Flujo de carta CMS-2 =
El software flujo de carta procesa las sentencias flujo de carta en el código fuente CMS-2 y genera un flujo de carta a una impresora de alta velocidad.

Ver también
Ada
AN/AYK-14
AN/UYK-7
AN/UYK-20
AN/UYK-43
AN/UYK-44
AN/USQ-17
AN/USQ-20
JOVIAL
Sistema de Datos Tácticos de la Marina


Referencias


Enlaces externos
Manual de Referencia del Programador CMS-2Y para los ordenadores AN UYK-7 y AN UYK-43 (octubre de 1986)
|La Factibilidad de Emular el Computador AN/UYK-7 en el Elemento de Procesamiento de Señales AADC
Entrada del Diccionario de Lenguajes de Programación para CMS-2