Sei sulla pagina 1di 4

EXAMEN SISTEMAS INFORMTICOS DE TIEMPO REAL

20 JUNIO DE 2005
Pregunta 1 (1p).
Enumerar y describir cuatro caractersticas deseables para un lenguaje de tiempo real.
Concurrencia
Modelo de datos orientado a objetos
Acceso a bajo nivel (interrupciones, etc.)
Manejadores de dispositivos
Tratamiento de excepciones
Adems de transportables, eficientes, .....
Pregunta 2 (2p).
En un sistema de control es necesario implementar un tipo de dato para almacenar la
informacin de una seal muestreada. En concreto es necesario guardar la frecuencia de
muestreo (en Hz), el instante inicial de la captura (en milisegundos), la duracin de las
seales (en nmero de muestras) y las muestras. Es necesario proporcionar sobre dicho
tipo las operaciones de suma y diferencia de seales de la misma dimensin, as
subprogramas para obtener de una seal el valor medio, mximo, mnimo y dado un
valor la seal resultante por filtro paso bajo de dicho valor. Implementar un paquete en
Ada que implemente dicho tipo as como los subprogramas descritos.
generic
Longitud : Integer;
package Seales is
type Vector is limited private;
Bounds_Error : exception;
function "+" (
K
: Float;
Right : Vector )
return Vector;
function "-" (
K
: Float;
Right : Vector )
return Vector;
function Media (
Seal1 : Vector )
return Float;
function Maximo (
Seal1 : Vector )
return Float;
function Minimo (
Seal1 : Vector )
return Float;
function Recortar (
Seal1 : Vector;
Recorte : Integer )
return Vector;

private
type Muestras is array (Integer range <>) of Integer;
type Vector is
record
Seal
: Muestras (1 .. Longitud);
Frecuencia : Integer;
Inicio
: Integer;
Nummuestras : Integer;
end record;
end Seales;

Pregunta 3 (2p).
Dado el siguiente conjunto de tarea:
TAREA
Cmputo
Periodo
A
2
8
B
1
10
C
X
12
1. Determinar el valor de mximo valor de X que hace el sistema planificable
segn el anlisis de utilizacin y el mnimo que lo hace no planificable segn el
mismo criterio. (1p). Nota U(3)=0.78
2. Para el segundo caso del ejercicio anterior, realizar el anlisis de tiempo de
finalizacin y verificar si es o no planificable (1p).
1.
2.

Mximo X=5, Mnimo X=6

Pregunta 4 (3 p).
Dada la definicin del tipo pila siguiente conocida:
package Pila is
MAX_CAPACIDAD:integer:=100;
type Tipo_Pila is private;
procedure Push(Pila: in out Tipo_Pila; Elem: integer);
procedure Pop(Pila: in out Tipo_Pila);
function Esta_Vacia(Pila : Tipo_Pila) return Boolean;
function Esta_Llena(Pila : Tipo_Pila) return Boolean;
procedure Vaciar(Pila: in out Tipo_Pila);
function La_cima(Pila: Tipo_Pila ) return integer;
private -- Pila_Generica
subtype Tipo_Indice_Pila is Integer range 0..MAX_CAPACIDAD;
type Tipo_Valores_Pila is array(Tipo_Indice_Pila) of integer;

type Tipo_Pila is record


Cima:
Tipo_Indice_Pila := 0;
Valores: Tipo_Valores_Pila;
end record;
end Pila;

1. Definir un tipo pila_prot con la misma funcionalidad de la pila anterior pero con
las modificaciones necesarias ofrecer el acceso en modo exclusivo a las
instancias definidas del tipo (1.5p).
2. Implementar el tipo (1.5p)
package Pila is
Max_Capacidad : Integer := 100;
subtype Tipo_Indice_Pila is Integer range 0..Max_Capacidad;
type Tipo_Valores_Pila is array (Tipo_Indice_Pila) of Integer;
protected type Pila_Prot is
entry Push (
Elem : Integer );
entry Pop (
Elem :
out Integer );
function Esta_Vacia return Boolean;
function Esta_Llena return Boolean;
procedure Vaciar;
function La_cima return Integer;
private -- Pila_Generica
Cima:
Tipo_Indice_Pila := 0;
Valores: Tipo_Valores_Pila;
end Pila_Prot;
end Pila;

Pregunta 5 (2 p).
Dada una implementacin de tarea de control de nivel completa para la prctica 5 como
la que tenemos a continuacin.
task body Control_Nivel is
Rnivel
: Regulador;
Nivel,
Pvs
: Float;
Periodo
: Time_Span;
Siguiente : Time;
Estat
: Estado;
begin
delay 1.0;
Inicio: loop
Servidor.Leer_Estado(Estat);
while Estat = Parado loop
1. delay 0.5;
2. Servidor.Leer_Estado(Estat);
end loop;
exit when Estat = Terminado;
3. delay 0.5;
Put_Line("Control de Nivel arrancado");
Servidor.Leer_Reg_Nivel(Rnivel);

Siguiente:=Clock;
Control: loop
4. Servidor.Leer_Nivel(Nivel);
Calcular(Rnivel, Nivel, Pvs);
Servidor.Escribir_Valvula_Salida(Pvs);
5. Periodo := Milliseconds(Tiempo_Muestreo(Rnivel));
Siguiente := Siguiente + Periodo;
delay until Siguiente;
Servidor.Leer_Estado(Estat);
exit when Estat /= Ejecucion;
end loop Control;
end loop Inicio;
end Control_Nivel;

1. Explicar que como se comportara la tarea en el caso de que las lneas en negrita
fuesen eliminadas. (Realizarlo independientemente para cada una de las lneas
en negrita) (1p).
1.- No hay espera, luego tarea que monopoliza la CPU
2.- No sale del bucle ya que no lee el cambio del estado
3.- Nada significativo
4.- Se trabaja siempre con el mismo valor del sensor, por tanto el control
va a ser fijo siempre al no percibir las variaciones en el nivel.
5.- Si no se asigna el valor de periodo la suspensin puede no ser correcta
en tiempo . Si es anterior saturar la CPU, si es posterior puede exceder
el tiempo del regulador.
2. Modificar el cdigo para que la tarea controle el deadline establecido en 100
milisegundos. En caso de perdida del mismo la accin de control ser dejar la
vlvula medio abierta (1p).
Control: loop
Servidor.Leer_Nivel(Nivel);
Pvs:=0.5;
select
delay until Clock+Milliseconds(100);
then
abort
Calcular(Rnivel, Nivel, Pvs);
end select;
Servidor.Escribir_Valvula_Salida(Pvs);
Periodo := Milliseconds(Tiempo_Muestreo(Rnivel));
Siguiente := Siguiente + Periodo;
delay until Siguiente;
Servidor.Leer_Estado(Estat);
exit when Estat /= Ejecucion;
end loop Control;

Potrebbero piacerti anche