You are on page 1of 2

EXAMEN SISTEMAS INFORMATICOS DE TIEMPO REAL.

8 Enero 2003
Pregunta 1 (1.5 p):
Implementar un subprograma en Ada que determine si dos rectas en el espacio de dos dimensiones se
cortan (y el punto de corte) o no. Las rectas vendrn determinadas por los trminos de una ecuacin del
tipo ax+by+c=0 o donde cada uno de los trminos son campos de un tipo registro que se tendr que
definir. En caso de que las rectas se corten, el subprograma deber devolver el punto de corte en
coordenadas (x,y) en una variable. En caso de que no se corten decidir cual ser el mecanismo de
informacin al subprograma invocador para que entienda que las rectas son paralelas.
Pregunta 2 (1.5 p):
Definir e implementar un paquete en Ada para que proporcione un tipo de matriz cuadrada de nmeros
reales donde el tamao de la misma ser un parmetro genrico del paquete. Deber ofrecer las
operaciones de producto de matrices (operador *), suma de matrices (operador +), determinante ( deter) y
visualizar matriz.
Pregunta 3 (2.0 p):
Un almacn tiene capacidad para 550 productos de clases A,B y C. Todos ellos se almacenan juntos pero
se sirven por parte de los operarios (varios de ellos atendiendo peticiones de clientes al mismo tiempo) de
forma independiente bajo las siguientes restricciones:
Inicialmente hay 100 unidades de cada uno
Ningn producto puede sobrepasar un stock de 200 unidades
El almacn no puede albergar mas de 550 productos
Cuando el stock de alguno de ellos baja por debajo de las 50 unidades se debe hacer una
reposicin de 100 unidades. El operario que lo solicita queda a la espera de que llegue el pedido
para poder continuar su trabajo.
Puede suceder que hasta que llega el pedido de reposicin el producto se agote, por lo cual no se
pueden atender los pedidos
Todos los pedidos son de 100 unidades, sea cual sea el producto.
Implementar una estructura de datos que permita gestionar el almacn e implementar tambin las tareas
operarios de almacn y los clientes del almacn. Dicha estructura deber proveer de subprogramas para:
Servir un pedido de cualquier tipo de mercanca (consumir tems). Sugerencia: algo del tipo
Comprar_A, Comprar_B y Comprar_C.
Almacenar los pedidos recibidos (almacenar tems)
Conocer cual es el estado del almacn (visualizar almacen)
Asumiremos implementado un procedimiento generar_pedido(in tipo_producto, out producto) el cual
devuelve en el parmetro producto 100 unidades del producto especificado en el parmetro
tipo_producto.
NOTA: la estructura debe representar el estado del almacn en cuanto a cantidades de los productos, no
donde se encuentran fsicamente.
Pregunta 4 (1.5 p):
Dado el siguiente conjunto de tareas definidas como T = (C i , Pi , Di ) (cmputo, periodo, deadline):

Determinar sin son planificables en un sistema de planificacin basado en prioridades y bajo qu


criterio de asignacin de las mismas. T1=(1,5,2); T2=(2,7,4); T3=(1,15,5); T3=(5,20,13);
Determinarlo tambin en el caso de que el cambio de contexto tenga un coste de 1 unidad de
tiempo.
NOTA: U(4)=75.7%
Pregunta 5 (1.5 p):
Implementar una tarea que atienda eventos de forma espordica con separacin mnima de 250
milisegundos. Si pasados 500 milisegundos no llegara ningn evento deber lanzar un mensaje de
advertencia.

Pregunta 6 (2.0 p):


Implementar una tarea servidor de puertos serie (COM1, COM2 y COM3 ) con servicios de abrir_puerto,
cerrar_puerto, enviar_puerto y recibir_puerto. Se debern considerar las siguientes caractersticas:
Todos los servicios retornan un valor booleano indicando si la operacin ha sido satisfactoria o
no.
la recepcin tiene una temporizacin de 2 segundos la cual si se sobrepasa se devuelve un
mensaje vaci
no se puede enviar por un puerto que no se ha abierto o que se ha cerrado ya.
no se puede cerrar un puerto del que se ha quedado pendiente recibir un mensaje
Implementar tanto la tarea tipo servidora y como el cliente.
Podemos asumir que existen los siguientes subprogramas implementados para acceso al hardware:
function envia_mensaje(in mensaje, in num_puerto, out resultado) TRUE siempre
procedure recibe_mensaje(out mensaje, in num_puerto, out resultado) llamada bloqueante que
devuelve el mensaje en el buffer
function abre_puerto(in num_puerto, out resultado) TRUE si se abre el puerto correctamente
FALSE en caso contrario
cierra_puerto(in num_puerto, out resultado) TRUE si se cierra el puerto correctamente FALSE
en caso contrario