You are on page 1of 48

SISTEMAS INFORMTICOS DE

TIEMPO REAL

Lenguajes para aplicaciones de tiempo real

Manuel Agustn Ortiz Lpez


Area de Arquitectura y Tecnologa de Computadores
Departamento de Electrotecnia y Electrnica
Universidad de Crdoba

Lenguajes para aplicaciones de tiempo real


Indice:
1. Introduccin
2. Caractersticas deseables en los lenguajes de tiempo real
2.1. Seguridad
2.2. Legibilidad
2.3. Flexibilidad
2.4. Portabilidad
2.5. Simplicidad
2.6. Modularidad
2.7. Eficacia

3. Tipificacin de datos
4. Estructuras de control
5. Descomposicin en mdulos
6. Tratamiento de los errores en ejecucin
6.1. Dominio del manejador de excepciones
6.2. Propagacin de la excepcin
6.3. El modelo de reanudacin frente al de terminacin
6.4. Tratamiento de excepciones en Ada

7. Entorno de ejecucin de la aplicacin

Sistemas Informticos de Tiempo Real


A.T.C. - Universidad de Crdoba

Pgina 1

Lenguajes para aplicaciones de tiempo real

1. Introduccin.
Los lenguajes de programacin son la herramienta con la que
describimos la tarea que el computador debe realizar.
En el caso de los sistemas empotrados es una cuestin muy
importante ya que la eleccin del lenguaje tendr repercusiones
en la seguridad, exactitud y coste del sistema final.
El propsito de este tema es exponer algunas de las
caractersticas de los lenguajes de programacin a la hora de la
eleccin del lenguaje.
Los primeros programas de tiempo real estaban escritos en
ensamblador debido

a que era necesario utilizar la CPU

eficazmente, tratar interrupciones y acceder a los dispositivos.


El lenguaje ensamblador se utiliza en pequeos sistemas y en
grandes sistemas que tienen importantes requisitos de
velocidad de cmputo.
La insatisfaccin con los lenguajes ensambladores y con el
lenguaje FORTRAN que era el nico existente entonces anim
el desarrollo de otros lenguajes. CORAL 66, RTL/2 y C. Estos
lenguajes presentan la limitacin de que son lenguajes
diseados para ejecucin secuencial y por tanto debe ser el
sistema operativo el que soporte la concurrencia.
En este tema la mayora de los ejemplos que se utilizarn
estarn escritos en C y ADA. ADA es el lenguaje oficial del
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 2

Lenguajes para aplicaciones de tiempo real

departamento de defensa de los Estados Unidos para la


computacin en tiempo real, y por tanto se ha convertido en un
lenguaje estndar de facto. La ltima versin es ADA95.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 3

Lenguajes para aplicaciones de tiempo real

2. Caractersticas deseables en los lenguajes de


tiempo real.[Bennett,94][Krishna,97]
La mayora de las caractersticas deseables en los lenguajes de
tiempo real son similares a las de un lenguaje de propsito
general:
Seguridad
Legibilidad
Flexibilidad
Potabilidad
Simplicidad
Modularidad
Eficacia

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 4

Lenguajes para aplicaciones de tiempo real

2.1. Seguridad
La seguridad en un lenguaje se mide en trminos de cuan
efectivo es el compilador y el sistema en ejecucin para
detectar errores de programacin automticamente En la
mayora de los sistemas el software es ms complejo que el
hardware y por tanto la probabilidad de fallo es ms alta.
Las caractersticas de un lenguaje que facilite la deteccin de
fallos son:
Utilizacin de datos tipificados. Obligando al programador a
especificar todas las propiedades de las variables utilizadas e el
programa y de esta forma el compilador puede comprobar si estas
propiedades estn siendo violadas. Detectar los fallos en tiempo de
compilacin es ms fcil y econmico que detectar los fallos en
tiempo de ejecucin.
Obligacin de declarar variables
La utilizacin de una sintaxis que no sea ambigua

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 5

Lenguajes para aplicaciones de tiempo real

2.2. Legibilidad
La legibilidad es una medida de la facilidad para entender el
programa sin la ayuda de otra documentacin, obtenindose as
ventajas como:
Reduccin de la documentacin.
Facilidad de deteccin de errores.
Facilidad de mantenimiento.

La legibilidad se obtiene tradicionalmente con la utilizacin de


comentarios a lo largo del programa y eligiendo nombres de
variables legibles. Un buen lenguaje tendr muy pocas
restricciones en el nmero de caracteres de las variables, otros
lenguajes como ADA permiten utilizar el subrayado y el punto
para mejorar la legibilidad.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 6

Lenguajes para aplicaciones de tiempo real

2.3. Flexibilidad
Un buen lenguaje debe dar todas las facilidades necesarias para
expresar todas las operaciones requeridas por la aplicacin sin
la necesidad de recurrir a cdigo ensamblador. Debe dar
especialmente facilidad para controlar los dispositivos la
planificacin de procesos y recursos. Se debe poder expresar
fcilmente cuando se debe ejecutar una tarea particular y como
obtener el control de los recursos

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 7

Lenguajes para aplicaciones de tiempo real

2.4. Portabilidad
La portabilidad es deseable en todas las aplicaciones porque
permite ejecutar el mismo cdigo en distintas mquinas.
Normalmente es posible utilizar un programa en cdigo fuente
escrito para una mquina en otra. Sin embargo existen todava
problemas cuando las mquinas tienen distinto tamao de
palabra y sobre todo en cuanto a la precisin en que se
representan los nmeros.
Para evitar estos problemas se deben evitar ambigedades para
que no se interpreten de distinta forma por el compilador de
una mquina que de otra. Y por otro lado se crean comits que
orientan a los escritores de compiladores sobre que deben
hacer

cuando

se

detecten

ambigedades

en

las

especificaciones. Por ejemplo para ADA existe un comit para


tratar estas cuestiones.
En los sistemas de tiempo real la portabilidad es muy difcil de
conseguir ya que a menudo se interacciona con el hardware y
el sistema operativo. Los programas son dependientes de la
mquina.
Mientras que en los lenguajes se interacciona solo con los
dispositivos clsicos de un computador (pantalla, teclado,
disco, etc.) los sistemas de tiempo real deben hacerlo con una
mayor variedad. En la prctica la solucin es aceptar la falta de
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 8

Lenguajes para aplicaciones de tiempo real

portabilidad de estos sistemas y limitar esa falta de portabilidad


a unos mdulos concretos.
La portabilidad se mejora tambin escribiendo aplicaciones
para mquinas virtuales ms que para un sistema operativo,
aunque esto obliga a tener un soporte software para la creacin
de estas mquinas virtuales en todas aquellas mquinas a las
que se quiere portar.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 9

Lenguajes para aplicaciones de tiempo real

2.5. Simplicidad
La simplicidad contribuye a la seguridad, portabilidad, reduce
el costo y reduce la probabilidad de errores por una mala
interpretacin de las caractersticas del lenguaje.
Por otro lado si el lenguaje es complejo todas las caractersticas
se tienen que soportar en todas las implementaciones y
entonces suceder que se tendr un lenguaje con pocas
facilidades, duro y austero; o bien en el caso que se quieran
cubrir todas las necesidades que demanden los usuarios
entonces se tendr un lenguaje con mucha variedad y se tendr
que construir un compilador complejo que difcilmente
conducir a cdigos objetos eficientes.
Ada ha intentado evitar ambos problemas definiendo un
conjunto bsico de caractersticas y varios anexos. Cada
compilador de Ada 9X debe soportar las caractersticas bsicas
pero los anexos son opcionales. Si algn anexo se soporta debe
soportarse completamente. De esta forma se conocen todas las
posibilidades de un compilador conociendo los anexos que
soporta.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 10

Lenguajes para aplicaciones de tiempo real

2.6. Modularidad
La modularidad es esencial, ya que hoy da los programas son
extensos y habitualmente se desarrollan por equipos, por lo que
los programas deben poder descomponerse en mdulos.
Los mdulos deben especificarse mediante la definicin clara
de sus entradas y salidas as como de la funcin que realizan.
Para una buena modularidad es importante que el lenguaje
soporte informacin oculta, es decir que lo que suceda en el
interior de un mdulo sea invisible externamente (por ejemplo
las variables).
Debe

ser

posible

compilar

depurar

los

mdulos

separadamente, ya que habitualmente se dedica ms tiempo a


la depuracin y al chequeo que a la escritura inicial del cdigo.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 11

Lenguajes para aplicaciones de tiempo real

2.7. Eficacia
En los sistemas de tiempo real se debe tener un rendimiento
garantizado y adems se deben cumplir las restricciones de
tiempo.
Se debe poner nfasis en la codificacin en trminos de tamao
de cdigo y velocidad de operacin. En los primeros tiempos
slo se poda conseguir ambos requisitos utilizando lenguajes
ensambladores. Actualmente con la cada del precio del
hardware y el aumento en la velocidad han hecho que la
eficacia del lenguaje no solo se mida atendiendo a lo compacto
del cdigo y la velocidad.
La eficiencia de una aplicacin no slo depender del lenguaje
sino que adems depender del compilador y de las libreras de
run-time.
En lo que s influir directamente la eficacia del lenguaje ser
en que se cumplan los requisitos de tiempo. El lenguaje debe
permitir el anlisis para la planificacin, es decir, en un
programa de tiempo real se debe poder analizar que se
cumplirn todos los "deadline" de las tareas.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 12

Lenguajes para aplicaciones de tiempo real

Muchas de las caractersticas de los lenguajes actuales no


permiten el anlisis de tiempos. Por ejemplo en los lenguajes
en los que se permiten cadenas de tamao variable, se tendr
un tiempo para situarlos (allocate) y retirarlos (deallocate) de
memoria tambin variable. El tiempo que se tarda en ejecutar
los lazos WHILE no se predecir fcilmente ya que se
ejecutar mientras se cumpla la condicin lgica que lo
mantiene.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 13

Lenguajes para aplicaciones de tiempo real

3. Tipificacin de datos.[Krishna,97]
Cuando

un

programador

define

una

variable

como

perteneciente a un tipo de datos lo que define son las


propiedades que debe cumplir. Si se define una variable V
como booleana puede tomar el valor 0 o 1, entonces si
hiciramos la asignacin V:=7 sera ilegal.
Los datos tipificados se utilizan con dos propsitos:
Protegerse contra los errores de programacin.
Especificar la precisin numrica del dato.

Un ejemplo de lenguaje que no es seguro para protegerse de


errores de programacin en lo que se refiere a tipos de datos, es
FORTRAN:
do 100 i = 1, 50
j=j+i
100 continue
Lo que el programador quera

Do 100 i = 1.50
j=j+i
100 continue
Lo que el programador escribi

Se deseaba construir un lazo do, y por error se escribi un punto en


lugar de una coma.
El compilador de FORTRAN ley la sentencia do como legal, que
lleva a un error en el procesamiento, ya que en lugar de asignar a i
valores desde 1 a 50 asign a la variable do100i el valor 1.50. Ya que
FORTRAN no reconoce los espacios

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 14

Lenguajes para aplicaciones de tiempo real

En FORTRAN cuando no se declara explcitamente el tipo de


variable lo toma del nombre. Si comienza por la letra a-h y o-z se
considera como una variable de punto flotante. Si comienza con
la letra k, l, m , n se trata como entero.
FORTRAN realiza tambin tipos de conversin implcitos. Por
ejemplo s a es una variable real e i es una variable de tipo entero.
La sentencia a=i hace que el valor de i se deposite en a como una
cantidad real. La sentencia i=a hace que la parte entera de a se
deposite en i.

Se necesitan slidas reglas para evitar estos errores. En un


lenguaje fuertemente tipificado se tiene:
Cada variable debe declararse explcitamente como perteneciente a
un tipo de dato.
Cada tipo tiene asociado un conjunto de valores y un conjunto de
operaciones sobre ellos.
Las conversiones de tipo utilizando sentencias de asignacin no
deben permitirse.
Son posibles las conversiones explcitas.

En el ejemplo anterior s FORTRAN hubiese sido un lenguaje


fuertemente tipificado el error del ejemplo anterior habra sido
detectado por el compilador ya que no habra considerado
do100i como una variable. La sentencia de asignacin i=a
sera ilegal y se tendra que haber convertido explcitamente
i=integer(a).

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 15

Lenguajes para aplicaciones de tiempo real

Tipos derivados
Los lenguajes actuales permiten que el programador construya
sus propios tipos de datos para aumentar la seguridad. Por
ejemplo en Ada se puede tener:
type PRESION is new float;
type TEMPERATURA is new float;
p1, p2, p3 : PRESION;
t1, t2 : TEMPERATURA;

El programador ha construido dos tipos de datos PRESION y


TEMPERATURA.
En estas condiciones un intento de mezclar variables de tipo
temperatura y presion sin una conversin explcita sera ilegal.
Los tipos presion y temperatura se le llaman tipos derivados, y
heredan las caractersticas y operaciones del padre.

Subtipos
Es til poder definir el rango de las variables. Por ejemplo si se
estn representando la altura de un avin

y tenemos una

variable que lo representa no tiene por qu ser mayor de


100.000
type ALTURA is new float range 0..100000;

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 16

Lenguajes para aplicaciones de tiempo real

Otras veces es til tener diferentes variables del mismo tipo


con diferente rango
type HORA is new float range 0..23;
type MINUTOS is new float range 0..59;
type MNUTOS_DIA is new float range 0..1440;

El concepto de subtipo es distinto de los tipos derivados, ya


que dos subtipos se pueden mezclaren sentencias de asignacin
sin una conversin explcita
MINUTOS_DIA:=MINUTOS + 60*HORA;

Un subtipo solo se define para especificar un rango de


posibles valores.
Tipos numerados
Adems de los tipos estndar hay lenguajes que permiten tipos
numerados
type DIA is (lunes, martes, miercoles, jueves, viernes, sabado, domingo);

Cuestiones relativas a las precisiones de los datos numricos


El lenguaje C especifica diferentes tipos de datos reales float
(simple precisin) double (doble precisin) long double (doble
precisin extendida. Sin embargo la preecisin (nmero de bits
con los que se representa un dato) vara de unas
implementaciones a otras. En algunas implementaciones
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 17

Lenguajes para aplicaciones de tiempo real

double y long double tienen la misma precisin mientras que


en otras long double tiene una precisin mayor. Esto significa
que para saber si las operaciones se realizan con la precisin
deseada por el programador se deber conocer la mquina
sobre la que se ejecutar el programa.
Para evitar estos problemas se le puede pedir al programador
que especifique la precisin
type precision1 is digits 8 range -1e20..1e20;
type precision2 is digits 12 range -1e20..1e20;

En este ejemplo precision1 y precision2 tendr al menos 8 y 12


dgitos decimales de precisin. Este lmite mnimo se respetar en
cualquier mquina.

En el caso de que se utilicen subtipos si se mezclan variables


con distinta precisin deben utilizarse conversiones explcitas
p11,p12: precision1;
p21,p22: precision2;
begin
p11:=p11+p12+precision1(p21)+ precision1(p22)
end;

Otro tipo importante es el tipo punto fijo donde el programador


especifica la precisin seguido opcionalmente por un rango
type A1 is delta 0.001 range 0.000..0.999;

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 18

Lenguajes para aplicaciones de tiempo real

Matrices (Array)
La nocin de tipos se puede aplicar tambin a los arrays
type enterosimple is integer range 0..20;
type a1 is array(1..30) of enterosimple;

Define un array de 30 elementos del tipo enterosimple. Cada


elemento debe estar en el rango de 0 a 20.

Es posible definir arrays con un ndice que se especificar


posteriormente
type X is array (integer range<>) of integer;
A:X(1..MAX);

Registros
Un registro es un tipo de dato que permite agrupar diferentes
tipos de datos
type STRING is array(<>) of character;
type nombre_tipo is STRING(40);
type promedio_notas_tipo is float range 0.0..10.0;
type estudiante is
record
nombre: nombre_tipo;
promedio_notas: promedio_notas_tipo;
end record;

Para acceder a los campos del registro individualmente se


utiliza el punto. Por ejemplo estudiante.nombre referencia slo
al campo nombre.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 19

Lenguajes para aplicaciones de tiempo real

En las versiones anteriores de Ada a Ada9X si se defina


estudiantenuevo como un tipo derivado de estudiante no se
poda aadir un nuevo componente, como por ejemplo DNI A
partir de estas versiones se define un nuevo tipo de dato
(tagged) al que se le puede aadir componentes adicionales
type estudiantenuevo is new estudiante with
record
DNI: integer;
end record;

Atributos asociados a los tipos de datos


Los tipos de datos tienen atributos asociados con ellos. Por
ejemplo, en una maquina concreta el tipo integer puede ser que
solo pueda representar un rango -32768,....,32767, y en otras el
rango sea mucho mayor. Para que el programador conozca
estos atributos algunos lenguajes permiten acceder a ellos. Por
ejemplo en Ada
X'First: Si X es un escalar (por ejemplo entero), este atributo indica
el lmite inferior del rango de X. Si X es un array indica el limite
inferior del indice.
X'Last. Igual a X'First pero para el limite superior.
X'Delta. Cuando X es un subtipo de punto fijo, indica la Delta
(diferencia entre un nmero y otro) que especifica la precisin de X.
X'Small. Si X es un subtipo real, devuelve el nmero mas pequeo,
exceptuando el cero de este subtipo.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 20

Lenguajes para aplicaciones de tiempo real

Punteros
Los punteros son el mecanismo utilizado por la mayora de los
lenguajes para permitir el direccionamiento indirecto. Es decir
para localizar una posicin de memoria se lee previamente otra
posicin de memoria que contiene la direccin de la primera.
Este mecanismo permite:
Referencia indirecta a variables. Por ejemplo permite crear listas
enlazadas.
Para ceder el flujo del control del programa a la direccin que indica
el puntero.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 21

Lenguajes para aplicaciones de tiempo real

4. Estructuras de control
Las estructuras de control permiten controlar el flujo del
programa. Todos los lenguajes tienen estructuras de decisin
como if-then-else, for, while, etc.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 22

Lenguajes para aplicaciones de tiempo real

Veamos como son estas estructuras en ADA


Estructura if-then-else
if y<0 then
x:=4;
elseif d=0 then
x:=6;
else
q:=5;
end if

Estructura del lazo for-do


for i in 0..10 loop
d(i):=i*j;
end loop;

Estructura de un lazo while


while x < p loop
x:=x+i;
end loop;

Mientras que en un lazo for-do es fcil estimar el tiempo que tardar


en ejecutarse, en los lazos while no se conoce, se tendr que cumplir
la condicin lgica y ser necesario hacer una estimacin.
Para salir de los lazos Ada ofrece el comando exit
loop
get(a);
if sum <0 then
exit;
end if;
end loop;

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 23

Lenguajes para aplicaciones de tiempo real

Estructura de la sentencia case


case x is
when 1 => y:=x;
when 2 => y:=0;
end case

case i is
when -5 =>y:=x;
when others => y:=0;
end case

La clusula others se ejecuta cuando no se ha cumplido ninguna


condicin anterior.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 24

Lenguajes para aplicaciones de tiempo real

5. Descomposicin en mdulos
Como ya se coment al comienzo del capitulo, una de las
caractersticas deseables en un lenguaje es la modularidad. Las
ayudas a la modularidad en los lenguajes suelen ser la
descomposicin en: bloques, procedimientos, funciones y
paquetes (packages). Veamos las diferencias entre ellos:
Bloques
Los bloques tienen dos partes: unas especificaciones que
definen las variables que se van a utilizar en el bloque, y el
cuerpo que contienen las sentencias que se deben ejecutar.
El propsito de los bloques es poder tener informacin oculta,
es decir las variables declaradas dentro del bloque no pueden
ser accesibles desde el exterior. Al salir del bloque la zona de
memoria que ocupaban esas variables se libera. Por otro lado
las variables se pueden redefinir dentro del bloque y no afecta
al exterior. Supongamos el siguiente pseudocdigo:

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 25

Lenguajes para aplicaciones de tiempo real

var i,x: integer;


begin
x:=0;
for i in 0..100 loop
block
var i:=integer;
begin
for i in 1..5 loop
x:=x+i;
end loop;
end;
end loop;
.......
.......

Las variables i y x se definen fuera del bloque mientras que la


variable i se redefine dentro. El valor de i varia de 1 a 5 cada vez que
el bloque se ejecuta, sin embargo al salir del bloque i vuelve a tomar
el valor que tena antes de entrar en el bloque.

Procedimientos y funciones
El inconveniente que presentan los bloques es que el cdigo se
debe repetir cada vez que se quiera utilizar el bloque. Los
procedimientos y funciones, sin embargo, solo se escriben una
vez y se referencian cada vez que se necesiten. Otra ventaja de
la utilizacin de procedimientos y funciones es que el cdigo
se puede descomponer jerrquicamente.
Paquetes (packages)
Los paquetes suponen un paso ms en lo que se refiere a
modularidad.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 26

Lenguajes para aplicaciones de tiempo real

Los paquetes consisten de una especificacin del paquete y un


cuerpo:
La especificacin del paquete es el interfaz al mundo exterior. Se
define este interfaz en lo que se llama declaracin del paquete. La
declaracin consta de la especificacin de los tipos de variables y
opcionalmente un conjunto de funciones que operan sobre estas
variables.
El cuerpo del paquete es opcional y consiste de sentencias
ejecutables asociadas con las funciones. Todo lo que hay dentro del
cuerpo est oculto al resto del cdigo exterior al paquete

La utilizacin de paquetes tiene muchas ventajas:


Los

paquetes

pueden

escribirse,

depurarse

compilarse

independientemente.
Los paquetes se pueden incluir en libreras para que puedan utilizarse
por cualquier programador.
Los paquetes mejoran la seguridad. Puesto que el cdigo interno del
paquete no puede ser accesible la exterior, los errores exteriores no
pueden afectar al paquete.
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 27

Lenguajes para aplicaciones de tiempo real

Los paquetes hacen que el mantenimiento del software sea ms


eficiente. Mientras no se modifique el interfaz del paquete, el cdigo
interior se puede modificar como se desee sin afectar a otros mdulo.

Un ejemplo de un paquete en Ada que realizan las operaciones


en lgebra compleja, muestra a continuacin. Obsrvese que el
interfaz y el cuerpo se especifican por separado:
Interfaz
package COMPLEX_ALGEBRA is
type COMPLEX is
record
REAL_PART, IMAGINARY_PART: float;
end record;
function ADD (A, B: COMPLEX) return COMPLEX;
function SUBTRACT(A, B: COMPLEX) return COMPLEX;
function MULTIPLY(A,B: COMPLEX) return COMPLEX;
function DIVIDE(A,B: COMPLEX) return COMPLEX;
end COMPLEX_ALGEBRA;

Cuerpo
package body COMPLEX_ALGEBRA is
with ROOTS; use ROOTS;
with TRIGONOMETRY; use TRIGONOMETRY ;
function ADD (A, B: COMPLEX) return COMPLEX is
begin
return ( (A.REAL_PART+B . REAL.PART) ,
(A.IMAGINARY_PART+B.IMAGINARY_PART) ) ;
end ADD ;
function SUBTRACT(A, B: COMPLEX) return COMPLEX is
begin
return ( (A.REAL_PART-B.REAL_PART) ,
(A.IMAGINARY_PART-B.IMAGINARY_PART) ) ;
end SUBTRACT;
function MULTIPLY( A, B: COMPLEX) return COMPLEX is
begin
return ( (A.REAL_PART*B.REAL_PARTA.IMAGINARY_PART* B.IMAGINARY_PART) ,
(A. IMAGINARY_PART *B. REAL_PART +
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 28

Lenguajes para aplicaciones de tiempo real


A.REAL_PART *B. IMAGINARY_PART) );
end MULTIPLY;
function DIVIDE(A,B: COMPLEX) return COMPLEX is
MAGNITUDE_A, MAGNITUDE_B, MAGNITUDE_DIV,
ANGLE_A, ANGLE_B, ANGLE_DIV: float;
begin
MAGNITUDE_A := MAGNITUDE(A) ;
MAGNITUDE_BB := MAGNITUDE(B) ;
ANGLE_A := ANGLE(A) ;
ANGLE_B : = ANGLE (B) ;
MAGNITUDE_DIV := MAGNITUDE_A / MAGNITUDE_B;
ANGLE_DIV := ANGLE_A ANGLE_B ;
return ( (MAGNITUDE_DIV*COS (ANGLE_DIV) ),
(MAGNITUDE_DIV*SIN(ANGLE_DIV) ) ;
end DIVIDE ;
function MAGNITUDE (A: COMPLEX) return float is
begin
return( SQUARE_ROOT (A.REAL_PART**2 +
A.IMAGINARY_PART**2 ) );
end MAGNITUDE;
function ANGLE(A:COMPLEX) return float is
begin
return ( ARCTAN (A.IMAGINARY_PART/A . REAL_PART) );
end
end COMPLEX_ALGEBRA;

Este paquete puede ser incluido en una librera de Ada, de forma que
cualquiera puede utilizar el tipo COMPLEX y las funciones
asociadas ADD, SUBTRACT, y MULTIPLY:
with COMPLEX_ALGEBRA ;
procedure ABCD is
use COMPLEX_ALGEBRA;
A : COMPLEX:= (1,2);
B : COMPLEX:= (3,4);
C: COMPLEX;
begin
A:= ADD(A,B) ;
C:= MULTIPLY(A,B) ;
end;

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 29

Lenguajes para aplicaciones de tiempo real

6. Tratamiento de los errores de ejecucin.


[Krishna,97][Burns,97]

En programacin existen dos clase de errores:


Errores de compilacin. Son detectados por el compilador.
Errores de ejecucin. No los puede detectar el compilador y se
producen durante la ejecucin de la aplicacin (divisin por cero,
errores en la representacin de punto flotante).

Cuando en un programa cualquiera se produce un error durante


la ejecucin normalmente se enva un mensaje de ello y aborta.
Mientras que esta actuacin es ms o menos correcta en una
aplicacin de propsito general, en una aplicacin de tiempo
real sera inaceptable.
Los lenguajes de tiempo real deben posibilitar la respuesta a
errores de ejecucin de una manera cmoda o al menos poder
conmutar temporalmente a un modo de operacin degradado
que asegure el control del proceso.
Los mecanismos para el tratamiento de excepciones deberan
ser:
Simples
Deberan tener una ejecucin rpida, sin prdida de tiempo
innecesario ( sin "overhead").
El programador debera tener la libertad de especificar las acciones
para dar respuesta a los distintos errores de ejecucin.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 30

Lenguajes para aplicaciones de tiempo real

6.1. Dominio del manejador de excepciones.[Burns,97]


Dentro de un programa puede haber varios manejadores para
una excepcin particular. Cada manejador de excepciones
tendr que tener entonces un dominio que especifique el trozo
del programa durante el cual si ocurriese una excepcin se
debera activar. En los lenguajes estructurados en bloques
como Ada el dominio es el bloque que se est ejecutando.
Por ejemplo supongamos que se est utilizando Ada y tenemos
un sensor de temperatura con un rango de 0 a 100 C, y
tenemos un bloque donde se define el sensor y se opera con l.
Si algn valor sale fuera de ese rango el sistema producir un
error de ejecucin producindose una excepcin denominada
Constraint_Error.
declare
subtype Temperatura is Integer range 0 .. 100;
begin
--lee la temperatura del sensor y calcula su valor
exception
-- manejador
end;

En otros lenguajes como C++ el dominio de un manejador


debe ser indicado explcitamente, y en este caso se dice que el
bloque est protegido. Esto se realiza en C++ utilizando un
bloque "try-block". Adems en C++ no todos los bloques
pueden tener un manejador de excepciones.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 31

Lenguajes para aplicaciones de tiempo real

try
{
// sentencias en las que pueden producirse excepciones
}
catch (nombre_excepcin){
// manejador
}

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 32

Lenguajes para aplicaciones de tiempo real

6.2. Propagacin de la excepcin.[Burns,97]


Cercano al concepto del dominio de la excepcin est el
concepto de la propagacin. Si llega una excepcin a un bloque
o procedimiento, pudiera ser que no tengamos un manejador
asociado, entonces habra que optar por alguna solucin.
La primera solucin es que el compilador informe al
programador de la ausencia del manejador. Sin embargo esto
no es siempre posible, ya que el compilador tendra que
chequear si el contexto desde donde se llama incluye el
manejador apropiado, y obligara al compilador a realizar
complejos anlisis del flujo del programa. Esto es adems
especialmente dificultoso cuando un procedimiento llama a
otros procedimientos en los que a su vez pueden producirse
excepciones.
Los lenguajes que generan errores en tiempo de compilacin
por

la

ausencia

de

manejadores,

requieren

que

el

procedimiento especifique qu excepciones puede recibir para


que el compilador pueda chequear el contexto llamador y
comprobar si ste posee el manejador adecuado. Por ejemplo
C++ permite que una funcin defina que excepciones puede
recibir.
La segunda solucin cuando no se tiene un manejador local es
buscar los manejadores que estn activos en la cadena de los

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 33

Lenguajes para aplicaciones de tiempo real

procedimientos llamadores. Esta solucin es lo que se llama


propagar la excepcin.
Un problema potencial con la propagacin de la excepcin
ocurre cuando el lenguaje requiere que las excepciones sean
declaradas en un dominio dado. Entonces el lenguaje debera
permitir, que bajo determinadas circunstancias, se pueda
propagar la excepcin fuera de ese mbito. Para solucionar esta
situacin la mayora de los lenguajes ofrecen un manejador
para todo ("catch-all"). Este manejador tambin evita que el
programador tenga que enumerar todas las excepciones.
Si a pesar de todo no se tiene manejador en un programa
secuencial cuando se produce una excepcin el programa
aborta. Si el programa tiene varios procesos y no tiene un
manejador asociado entonces el proceso aborta, sin embargo
no se tiene claro si se debe abortar tambin el proceso padre.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 34

Lenguajes para aplicaciones de tiempo real

6.3. El modelo de reanudacin frente al de


terminacin. [Burns,97]
Una decisin crucial cuando se manejan excepciones es que se
debe hacer con procedimiento en el que se ha producido la
excepcin una vez que el manejador la ha tratado. Tendremos
tres posibilidades:
Si el manejador ha sido capaz de solucionar el problema que ha
causado la excepcin, entonces el procedimiento podra finalizar
como si nada hubiera sucedido. Esta manera de actuar corresponde a
lo que se llama modelo de reanudacin o notificacin.
Tambin es posible que no se devuelva el control al procedimiento
que produjo la excepcin, entonces estaramos en un modelo de
terminacin o de escape.
Podramos por ltimo un modelo donde el propio manejador decida
lo que debe hacer (continuar o terminar), entonces estaramos en un
modelo que se denomina hbrido.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 35

Lenguajes para aplicaciones de tiempo real

Modelo de reanudacin
Para estudiar este modelo supongamos tres procedimientos Q,
P y R. El procedimiento P llama a Q y
Q llama a R

En el procedimiento R se produce una excepcin cuyo manejador


est en Q ( Hr ). Mientras se ejecuta el manejador Hr se produce otra
excepcin cuyo manejador es Hq que est en el procedimiento P.
Una vez ejecutado Hq contina Hr y una vez que se ha ejecutado el
procedimiento R contina.

El modelo de reanudacin se puede entender fcilmente viendo


al manejador como un procedimiento que es llamado cuando se
produce la excepcin.
Este modelo presenta el problema de que en muchos de los
casos es difcil reparar los errores producidos. Por ejemplo si
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 36

Lenguajes para aplicaciones de tiempo real

se produce una excepcin como consecuencia de un


desbordamiento aritmtico en medio de una secuencia de
operaciones complejas, pudiera ser que se estn utilizando
varios registros que contengan evaluaciones parciales.
Entonces como consecuencia de la llamada al manejador, se
podran sobreescribir estos registros.
Modelo de terminacin
En el modelo de terminacin cuando se produce una excepcin
y se ejecuta el manejador el control no retorna al punto donde
se produjo la excepcin, sino que el bloque que contiene el
manejador finaliza y el control se pasa al bloque o
procedimiento llamador.
Cuando el manejador est dentro de un bloque, una vez
ejecutado, el control se pasa a la primera sentencia del bloque
siguiente.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 37

Lenguajes para aplicaciones de tiempo real

Si se trata de procedimientos en lugar de bloques el flujo de


control puede cambiar drsticamente, como se puede ver en el
ejemplo siguiente:

El procedimiento P llama a Q y Q llama a R. En este caso la


excepcin se produce mientras se ejecuta R y tiene que ser manejada
por Q. Una vez ejecutado el cdigo de la excepcin, el control pasa
al procedimiento Q. Distinto al caso de un modelo de reanudacin en
el que el control hubiera pasado de nuevo a R:

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 38

Lenguajes para aplicaciones de tiempo real

Cuando se llama a un proceso, ste puede acabar por una o


varias condiciones. Si finaliza sin problemas tal como se
espera, se dice que ha finalizado con una condicin normal. Si
por el contrario finaliza por otras condiciones debido a
excepciones se dice que el procedimiento ha finalizado por una
condicin excepcional.
Modelo hbrido
En este modelo el manejador decide si el error es recuperable.
Si es as utiliza un modelo de reanudacin y en caso contrario
utiliza un modelo de terminacin.
Tratamiento de excepciones y sistema operativo.
En la mayora de los casos el programa desarrollado se ejecuta
sobre un sistema operativo como POSIX, Windows o Dos.
Estos sistemas detectan ciertas condiciones de error, por
ejemplo violacin de memoria o instrucciones ilegales.
Entonces tpicamente la ejecucin de estos programas finaliza.
Sin embargo existen muchos sistemas que permiten al
programador solucionar el error.
El modelo de recuperacin soportado por POSIX por ejemplo
permite al programador tratar estas excepciones asociando un
manejador al que llamar el sistema cuando se produzca el
error. Una vez que el manejador ha acabado el proceso
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 39

Lenguajes para aplicaciones de tiempo real

contina en el punto del programa donde se produjo la


excepcin. POSIX soporta por tanto el modelo de reanudacin.
Si el lenguaje utiliza un modelo de terminacin entonces es la
responsabilidad de este lenguaje capturar el error y acometer
las manipulaciones necesarias para que el programador pueda
utilizar este modelo.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 40

Lenguajes para aplicaciones de tiempo real

6.4. Tratamiento de excepciones en Ada


[krishna,97] [Burns,97]

En el tratamiento de excepciones el lenguaje Ada tiene las


siguientes caractersticas:
Soporta declaraciones explcitas para las excepciones.
Utiliza un modelo de terminacin y propagacin de la excepcin
hasta que localiza un manejador. Ejemplos:

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 41

Lenguajes para aplicaciones de tiempo real

En Ada existen cinco condiciones de excepcin predefinidas y


el usuario puede definir otras ms. Las condiciones
predefinidas son:
CONSTRAINT_ERROR : Se produce cuando una variable sale
fuera de su rango.
NUMERIC_ERROR : Se produce para indicar que no se puede
mantener el nivel de precisin requerido (normalmente por intento de
una divisin por cero).
STORAGE_ERROR : Se produce cuando el programa intenta salir
fuera de su zona de memoria.
PROGRAM_ERROR : Se produce cada vez que ocurre una
excepcin que no corresponde con ninguna excepcin predefinida ni
defina por el usuario. Es la excepcin por defecto.
TASKING_ERROR : Se produce junto con otros errores que tienen
lugar como consecuencia de la incorrecta utilizacin de los
mecanismos de tareas.

Ejemplos:
declare
type gpa is delta 0.01 range 0.00..4.00;
begin
gpa := calc_gpa (student) ;
exception when CONSTRAINT_ERROR => put ( "gpa is in error: it is
out of range" ) ;
end;

El bloque se ejecuta normalmente excepto cuando se produce un


error. Si gpa sale fuera del rango de 0 a 4, se transfiere el control al
manejador que imprime el mensaje.
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 42

Lenguajes para aplicaciones de tiempo real

declare
x,y, z : float;
begin
get(x); get(y) ;
z : = x/y;
exception
when NUMERIC_ERROR =>
put ("Numeric Error : Possibly an attempt to divide by zero") ;
return O ;
end

Si y toma el valor 0 entonces se produce la excepcin y el control se


transfiere al manejador de la excepcin que imprime un mensaje y
devuelve el valor 0. En cualquier lenguaje de propsito general se
hubiera notificado al usuario la divisin por cero y el programa
hubiera abortado. Otra diferencia es que el programador no tiene que
chequear continuamente la ocurrencia del NUMERIC_ERROR el
sistema lo hace automticamente.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 43

Lenguajes para aplicaciones de tiempo real

En Ada el programador tiene dos maneras declarar


excepciones:
Como si se tratase de una constante. El tipo de la constante debe
definirse por la palabra clave exception
declare
TEMPERATURE: float;
TOO_HOT, TOO_COLD: exception;
begin
loop
READ_TEMPERATURE ( TEMPERATURE) ;
if TEMPERATURE < 400
raise TOO_COLD;
elseif TEMPERATURE > 450
raise TOO_HOT;
end if ;
end loop;
exception
when TOO_COLD =>
put("Warning: Too cold") ;
when TOO_HOT =>
put ( "Warning : Too hot" ) ;
end;

Utilizando un package predefinido en Ada: Ada.exception

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 44

Lenguajes para aplicaciones de tiempo real

7. Entorno de ejecucin de la aplicacin.


[Krishna97][Bennett,94]

El mecanismo que permite que una aplicacin escrita en un


lenguaje se ejecute

es el principal responsable en lo que

respecta a la eficacia en la implementacin del lenguaje y la


seguridad durante la ejecucin. Aunque habitualmente la
eficacia y seguridad entran en conflicto.
Este mecanismo de soporte de ejecucin est compuesto por un
conjunto de herramientas, y es en definitiva el que permite que
una aplicacin escrita en un lenguaje pueda ser ejecutada. Estas
herramientas son:
Compilador
Lincador
Depurador
Kernel.

Compilador
Traduce el cdigo fuente a lenguaje mquina.
Un buen compilador debera tener excelentes posibilidades de
diagnstico para aumentar la eficacia durante el proceso de
depuracin.
El compilador debera tambin generar un listado de las
instrucciones mquina en las que ha traducido el programa
para poder hacer por ejemplo, estimaciones de tiempo.
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 45

Lenguajes para aplicaciones de tiempo real

En aplicaciones de tiempo real un buen compilador debera


poder dar informaciones estadsticas acerca de la ejecucin de
la aplicacin, por ejemplo: con qu frecuencia se utilizan los
bloques, procedimientos o funciones y cuanto tardan en
ejecutarse, etc.
Los compiladores utilizan optimizaciones para reducir el
tiempo de ejecucin, se debera poder dar directrices sobre
como debe optimizar. En Ada se utilizan por ejemplo pragmas.
Lincador
Antes de que el cdigo mquina traducido por el compilador se
ejecute debe ser lincado con las libreras u otras rutinas que se
utilicen en el programa. Esta tarea la realiza el lincador.
El lincador determina cual es la parte principal del programa a
la que se ceder el control y reserva memoria para las
instrucciones y datos.
Depurador
Un buen depurador es fundamental cuando se estn
desarrollando aplicaciones complejas. Los depuradores suelen
dar facilidades como:
Acabar el programa y devolver el control al programador. Mostrar
variables y permitir cambiar su valor durante la ejecucin.
Permitir la parada en el lugar del cdigo que se desee.
Poder ejecutar el cdigo paso a paso.
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba

Pgina 46

Lenguajes para aplicaciones de tiempo real

Kernel
El kernel es el responsable de los recursos del sistema. Incluye
rutinas para situar y planificar tareas, manejo de memoria,
algoritmos para la comunicacin entre procesadores, manejo de
los fallos en los procesadores y se encarga de las operaciones
de entrada salida.

Sistemas Informticos de Tiempo Real


A.T.C. Universidad de Crdoba

Pgina 47

You might also like