Documentos de Académico
Documentos de Profesional
Documentos de Cultura
o
Dpto. LSIIS. Unidad de Programacin
o
2005-10-24
ndice
I
1. Avisador de correo
3. Mquina expendedora
a
4. Sistema de climatizaci n
o
5. Editor interactivo
6. Accesos a disco
7. Cache de disco
10
8. Gesti n de memoria
o
11
12
10.Buffer basculante
12
11.Buffer selectivo
13
12.Lectores/escritores
14
13.Servicio de impresoras
15
15
15.Cintas transportadoras
16
17
17.Centralita
18
20
19.Lonja Online
22
23
21.Bolsa en red
25
22.People mover
25
23.Pastas de t
e
27
1. Avisador de correo
Un avisador de correo es una peque a aplicacin que (generalmente en un entorno de ventanas)
n
o
avisa al usuario de si ha recibido correo electrnico. La gura muestra el aspecto de la ventanita del
o
avisador, en los dos estados posibles: sin o con correo.
tama o del chero de correo: si ha crecido desde la ultima vez ha de pintarse el icono de correo;
n
si ha decrecido se asume que el usuario est leyendo ya los mensajes con alg n programa y se
a
u
pintar el icono de sin correo.
a
El usuario puede quitar el aviso de correo en cualquier momento haciendo clic con el ratn en
o
el icono.
Se asumen como ya programados los siguientes procedimientos:
procedure Fichero_Correo() return TipoFichero;
-- Devuelve el fichero donde se almacena el correo del usuario
-- que lo ejecuta.
procedure Tam(f: in TipoFichero) return Natural;
-- Devuelve el tama~o del fichero que se le pasa como argumento.
n
procedure Esperar(seg : in Natural);
-- No retorna hasta que han pasado seg! segundos.
procedure Leer_Clic();
-- No retorna hasta que el usuario hace clic con el ratn en la
o
-- ventana de la aplicacin.
o
procedure Pintar_Icono_Correo();
-- Pinta el icono de que ha llegado correo en la ventana
-- de la aplicacin.
o
procedure Pintar_Icono_Sin_Correo();
-- Pinta el icono de que no hay correo en la
-- ventana de la aplicacin.
o
Las operaciones de pintado no se pueden ejecutar de manera concurrente.
Para poder controlar el acceso al area com n de carga y descarga un equipo ha programado el paquete
u
Barreras en el que estn denidas las constantes E y S, as como el tipo
a
3. Mquina expendedora
a
El objetivo de este ejercicio es dise ar un sistema concurrente para controlar una mquina genrica
n
a
e
expendedora de productos (hasta 16 numerados de 0 al 15). Recordemos parte de la funcionalidad de
una de estas mquinas:
a
Inicialmente el saldo para obtener un producto es 0.
Cuando se introduce una moneda: si hay cambio se actualiza el saldo y se visualiza en el display,
si no hay cambio se devuelve la moneda.
Cuando se pulsa el botn de devolucin hay que devolver la cantidad del saldo y actualizarlo a
o
o
0.
Cuando se selecciona un producto, si el saldo es suciente se sirve el producto y se devuelve la
cantidad restante dejando el saldo de nuevo a 0, si el saldo no es suciente se informa en el
display de la cantidad que falta y la mquina olvida la seleccin.
a
o
Para desarrollar dicho software se dispone de un paquete Maquina ya implementado para controlar los
dispositivos de la mquina.
a
6
-- Precio(p) es el precio del producto p.
procedure Detectar_Seleccion(producto: out Tipo_Producto);
-- Detectar_Seleccion(p) provoca que el proceso que lo invoca quede
-- bloqueado hasta que un usuario seleccione un producto p.
procedure Servir(producto: in Tipo_Producto)
-- Servir(p) provoca que la mquina sirva una unidad del producto p.
a
procedure Mostrar(cantidad: in Integer)
-- Mostrar(c) muestra una cantidad c en el display de la mquina.
a
4. Sistema de climatizaci n
o
Se pretende desarrollar un sistema capaz de controlar la temperatura de un local. Para ello ya se
dispone de un selector que permite elegir la temperatura deseada en cada momento, un termmetro
o
que permite medir la temperatura ambiente y un aparato climatizador con el que generar aire caliente
o fr
o.
Los requisitos de funcionamiento del sistema son los siguientes:
procedure Activar_Calor();
-- Provoca la emisin de aire caliente.
o
procedure Parar_Calor();
-- Provoca que cese la emisin de aire caliente.
o
procedure Medir_Temperatura(Temperatura: out TipoTemperatura);
-- Realiza una medicin de la temperatura ambiente a travs del
o
e
-- termmetro. El parmetro de salida contiene dicha lectura.
o
a
procedure Retardo(T: in Natural);
-- El proceso que la invoca queda bloqueado durante
-- los segundos indicados en el parmetro t!.
a
5. Editor interactivo
Un editor interactivo de documentos se ha dise ado de manera que el documento en edicin se
n
o
el teclado. Las ordenes consisten en una o varias pulsaciones de tecla seguidas. Estas ordenes provocan
modicaciones en el documento almacenado en memoria y, posteriormente, se actualiza su presentacin en pantalla, a partir de una copia de la parte visible del documento. Esta copia tambin reside en
o
e
memoria.
Para permitir en lo posible que un usuario experto teclee a la mxima velocidad de que sea capaz,
a
se establecen los siguientes requisitos:
1. El editor debe estar listo para aceptar en todo momento los caracteres que se vayan tecleando.
2. Las ordenes que se vayan reconociendo deben ejecutarse a la velocidad a la que la mquina sea
a
capaz de hacerlo. La ejecucin de una orden debe proseguir hasta completarse, aunque dure
o
alg n tiempo.
u
puede realizarse de forma simultnea al tratamiento de las siguientes ordenes, en caso de llegar
a
durante una actualizacinrecuerda que la pantalla se guarda separada del documento.
o
trabajo de actualizacin, de manera que si se ejecutan varias ordenes de edicin seguidas, la actualio
o
zacin presenta de una vez el resultado nal de la serie de ordenes. Por otra parte, el punto 4 exige
o
que la solucin no sufra de un problema de espera activa con el consiguiente gasto in til de CPU.
o
u
Para resolver el problema se cuenta con las siguientes operaciones que no tienes que implementar:
function Leer_Comando() return Tipo_Comando;
-- Se encarga de leer un comando de teclado. Retorna cuando la
-- secuencia de teclas pulsadas se entiende sin ambigedad
u
8
-- como un comando del editor.
procedure Ejecutar_Comando(Cmd: in Tipo_Comando;
Doc: out Tipo_Documento);
-- Toma un documento y lo modifica de acuerdo con un comando.
procedure Extrae_Pantalla(Doc:
in Tipo_Documento;
Pant: out Tipo_Pantalla);
-- Obtiene una copia de la parte visible del documento.
procedure Mostrar_Pantalla(Pant: in Tipo_Pantalla);
-- Muestra en pantalla el documento.
procedure Abrir_Documento(Fich:
Tipo_Fichero;
Doc: out Tipo_Documento);
-- Crea un nuevo documento a partir de un fichero de texto.
6. Accesos a disco
Los discos de cabezas mviles pueden leer o grabar sectores en el dispositivo f
o
sico. Para ello es
necesario situar la cabeza sobre la pista correspondiente al sector, accin que dura un tiempo bastante
o
grande, y luego realizar el acceso al sector deseado, con un tiempo considerablemente menor que el
anterior. Si el disco es usado en un entorno concurrente, resulta ventajoso realizar las operaciones
solicitadas por los procesos de manera que se minimice, en lo posible, el movimiento de la cabeza de
unas pistas a otras.
Suponemos que tenemos discos sin esta optimizacin, a los que se puede acceder mediante el paquete
o
Disk, que tiene la siguiente interfaz:
package Disk is
type Tipo_Buffer;
procedure Read(Sec: in Natural; Buffer: out Tipo_Buffer);
-- Deja en Buffer el contenido del sector sec del disco disk
procedure Write(Sec: in Natural; Buffer: in Tipo_Buffer);
-- Copia al sector sec del disco disk el contenido de Buffer
private
...
end Disk;
Estas operaciones leen o graban un sector cada vez. Los sectores se consideran numerados correlativamente, una pista tras otra. Esto quiere decir que si hay S sectores por pista, la pista en que se encuentra
un sector s ser el resultado de la divisin entera de s por S.
a
o
El objetivo del programa que tienes que realizar es programar un par de procedimientos
procedure Leer(Sec: in Natural; Buffer: out Tipo_Buffer);
procedure Escribir(Sec: in Natural; Buffer: in Tipo_Buffer);
2. optimicen el acceso de varios procesos a un disco, intentando que se cambie de pista lo menos
posible.
Esto se consigue leyendo o grabando los sectores que se soliciten, tratando de mantener el movimiento
de las cabezas en la misma direccin, mientras sea posible. Para ello no realizar las operaciones en el
o
a
orden en que se soliciten, sino que en cada momento elegir con preferencia aquella que corresponda
a
a la misma pista en la que se encuentra la cabeza o a la ms prxima, en sentido creciente de n mero
a
o
u
de pista. Si no hay ninguna peticin pendiente la pista actual o superiores, se retroceder a la menor
o
a
pista en la que hubiera peticiones.
Algunos requisitos de funcionamiento del sistema son los siguientes:
1. Las operaciones del paquete Disk no son concurrentes, es decir, no puede haber dos procesos
ejecutando simultneamente Disk.Read o Disk.Write.
a
2. Si se estn atendiendo peticiones escrituras o lecturas en una pista determinada, no se
a
pasar a atender otra pista hasta que no queden peticiones pendientes en la pista en curso.
a
3. El orden de atenci n a las peticiones dentro de una misma pista es irrelevante.
o
4. La operacin de lectura terminar tras completarse la operaci n fsica en el disco, y recibirse
o
a
o
los datos le
dos. La operacin de escritura se dar por terminada en cuanto se inicia la operacin
o
a
o
f
sica en el disco, sin esperar a que se complete.
5. El programa debe funcionar correctamente para un n mero indeterminado de procesos lectores
u
y grabadores.
Tras un anlisis preliminar del problema, se opta por la estructura de procesos e interacciones mostrada
a
en la gura 3.
Lectorj
Leer
ControlDisco
Grabadori
Actuador
DISK
Escribir
10
7. Cache de disco
Muchos sistemas operativos mantienen lo que habitualmente se denomina memoria cache de disco.
Esto consiste en un conjunto de buffers de memoria, cada uno del tama o de un bloque de disco.
n
Cuando alg n proceso de usuario quiere acceder a un bloque de disco, el sistema de cheros parte
u
del sistema operativo busca primero si existe una copia de tal bloque en la cache, en cuyo caso
devuelve al proceso el buffer correspondiente. En caso contrario, el sistema de cheros busca un
buffer desocupado o, de no haber espacios libres, selecciona el buffer que lleva ms tiempo sin ser
a
usado y lo sustituye por el bloque pedido, que habr sido le del disco. El buffer reemplazado ha de
a
do
ser previamente grabado a disco. La utilidad de este sistema a dos niveles es maniesta: la memoria
es mucho ms rpida que el disco y el esquema garantiza que los bloques a los que se accede con ms
a a
a
frecuencia van a ser le
dos, salvo la primera vez, de memoria principal.
11
8. Gesti n de memoria
o
En un sistema operativo multiprogramado, un Gestor se encarga de la asignacin de pginas de
o
a
memoria a los distintos procesos de usuario que se encuentran en ejecucin en cada momento. Las
o
peticiones de memoria se hacen mediante la ejecucin del procedimiento Solicitar con cabecera
o
type Tipo_Paginas is Natural range 1..N;
procedure Solicitar(Num: in Natural;
Ind: out Tipo_Paginas);
donde Num indica el n mero de pginas solicitadas, N es el n mero total de pginas de memoria y
u
a
u
a
el
ndice Ind la direccin de la primera de las pginas concedidas, que han de ser tantas como las
o
a
solicitadas y ocupando posiciones contiguas.
Los procesos liberan memoria ejecutando el procedimiento Liberar con cabecera
procedure Liberar(Num: in Natural;
Ind: in Tipo_Paginas);
donde Num denota el n mero de pginas liberadas e Ind la direccin de la primera de ellas (de nuevo
u
a
o
las pginas deben ser contiguas).
a
En principio los procesos pueden liberar una cantidad cualquiera de pginas con la unica restrica
cin de no liberar ms de la que solicitaron, aunque a la hora de ejecutar una simulacin se recomienda
o
a
o
que ambas cantidades sean coincidentes. El ejercicio propuesto es dise ar e implementar dicho gestor,
n
teniendo en cuenta la posibilidad de accesos concurrentes.
12
Bfer prim./sec.
u
Datos ya impresos
FC
GFEDCBA
BA
GED
4. Cada b fer requiere acceso exclusivo. No pueden hacerse dos operaciones a la vez sobre el
u
mismo b fer.
u
5. Durante el acceso al b fer lento en disco no debe estar bloqueada la aceptacin de peticiones ni
u
o
el acceso al b fer primario.
u
6. Comentar las decisiones que se pueden tomar y justicar las soluciones elegidas (basandose en
criterios como pueden ser tiempos de espera, acceso simultaneo de dos procesos cada uno a un
buffer, simplicidad de la solucin, etc.).
o
13
(insertar) 1
(extraer) 2
2. Si un proceso quiere extraer datos no puede hacerlo porque no hay ning n dato (y ms precisau
a
mente porque no hay datos en la cola de extraer).
3. Si un proceso quiere insertar datos tendr que hacerlo en la cola etiquetada para ello (la cola 1).
a
Supongamos la insercin de un dato d1 . Adems de insertar d1 en la cola 1 el proceso deber
o
a
a
bascular las colas, es decir, cambiar las etiquetas de insertar y extraer para posibilitar una
extraccin y una insercin simultneamente:
o
o
a
(extraer) 1
d1
(insertar) 2
4. Supongamos que llegan dos procesos que quieren insertar datos (d2 y d3 ), tendrn que insertar
a
en la cola etiquetada para ello y lo tendrn que hacer en exclusin mutua:
a
o
(extraer) 1
d1
(insertar) 2
d2
d3
5. Si ahora un proceso quiere insertar y otro extraer pueden realizar la operacin simultneamente
o
a
y, nalmente . . . , hay que volver a bascular:
(insertar) 1
(extraer) 2
d2
d3
d4
6. Como puede observarse la situacin permite que de nuevo puedan ejecutarse simultneamente
o
a
una operacin de insercin y una de extraccin.
o
o
o
14
package Buffer_Selectivo is
type Tipo_Datos_A is ...;
type Tipo_Datos_B is ...;
type Array_A is
record
Cuantos: Natural;
Datos: array(1..3) of Tipo_Datos_A;
end record;
type Array_B is
record
Cuantos: Natural;
Datos: array(1..3) of Tipo_Datos_B;
end record;
12. Lectores/escritores
Un ejemplo paradigmtico de la programacin concurrente es el de los lectores/escritores. Muchas
a
o
veces nos enfrentamos a situaciones en las que un recurso compartido por varios procesos es accedido
slo para leer informacin del mismo o bien para modicar su/s contenido/s (t
o
o
pica situacin en bases
o
de datos). Todos sabemos que varias operaciones de lectura (la estructura no va a sufrir ning n cambio
u
de estado) sobre el recurso compartido pueden realizarse simultaneamente sin efectos no deseados,
independientemente de cual sea el entrelazado de operaciones atmicas, sin embargo, en el instante
o
en que se inicia una operacin que modique la estructura ninguna otra operacin, ya sea de lectura
o
o
o de modicacin, puede ejecutar simultaneamente con sta.
o
e
Algunos mecanismos de sincronizacin en memoria compartida tienen dicultades para resolver el
o
problema de los lectores/escritores al asegurar exclusin mutua, esto hace que la solucin al problema
o
o
sea ms complicada de lo esperado.
a
Adems es encesario tomar decisiones extra para evitar que no se cumpla la propiedad de ausencia
a
de inanicin pero seguir manteniendo un grado de eciencia aceptable en el acceso al recurso.
o
Analizar el problema bajo las siguientes restricciones:
Prioridad para los lectores (esto puede provocar la inanicin de los escritores).
o
Prioridad para escritores (esto puede provocar la inanicin de los lectores).
o
Prioridad por estricto orden de invocacin de las operaciones.
o
Prioridad cambiante mediante el manejo de un turno de prioridad que cambia. Cmo deber
o
a
cambiar el turno para que la solucin mantenga una eciencia aceptable?
o
15
16
Cliente
Cliente
Servidor
1
Imprimir
2
o
-- el trabajo ha sido impreso con exito. Puede no retornar si la
-- impresora se estropea.
procedure Hora_Sistema(Hora: out Tipo_Hora);
-- Proporciona la hora del sistema operativo
procedure Esperar_Hora(Hora: in Tipo_Hora);
-- Se queda bloqueada hasta que se cumpla la hora que se pasa como
-- argumento
Se suponen tambin denidas funciones para trabajar con el tipo Tipo Hora (como Inc Minuto y
e
>=).
17
un unico proceso Reloj que cada segundo env un mensaje a travs del canal CanalReloj.
a
e
Esto constituye toda la interfaz de vuestro programa con el exterior. Adems, resulta que si surge
a
alg n problema en el motor de una de las cintas, no est garantizado el retorno de los procedimientos
u
a
textsf Start y Stop, requirindose que si falla un motor al menos la otra cinta siga funcionando.
e
Extra: Qu modicaciones habr que realizar en vuestro sistema si ahora queremos que en vez
e
a
de tener prejados los sentidos de la marcha, estos sean variables? Se supone que disponemos de
sensores en ambos extremos de cada cinta y el requisito adicional ser que las cintas no deben nunca
a
desplazarse en el mismo sentido.
Las unidades de adquisicin de datos atendern tambin a ordenes peridicas de muestreo desde
o
a
e
o
la unidad de registro, a las que respondern con los valores actuales anotados de las medidas.
a
Se asume que las unidades de adquisicin de datos pueden tomar las medidas a una cadencia
o
mucho ms rpida que las solicitudes de muestreo, es decir, pueden repetir varias veces la lectura de
a a
18
UAD1
UAD2
UADn
17. Centralita
La prctica consiste en escribir un programa concurrente que simule el funcionamiento de una
a
centralita con los N telfonos conectados a ella.
e
Los telfonos tienen una interfaz con el usuario y otra con la centralita:
e
1. El usuario puede realizar las siguientes acciones sobre el telfono3 :
e
Descolgar: se simular pulsando la tecla D.
a
Marcar: se simular pulsando uno de los d
a
gitos del 0 al 9 del teclado (por tanto, el n mero
u
N de telfonos es menor o igual que 10 y cada telfono tiene asignado un n mero del 0 a
e
e
u
N ).
Colgar: se simular pulsando la tecla C.
a
2. El telfono comunicar al usuario (simulndolo a travs de la pantalla) la situacin en la que se
e
a
a
e
o
encuentra:
Colgado y en espera: Colgado
Colgado y recibiendo llamada: Ring-Ring.
Descolgado y dando se al: Piii....
n
Descolgado y marcando: Marcado x.
Descolgado y llamando al otro extremo: Piii-Piii.
Descolgado y el otro extremo comunica: Tuu-Tuu-Tuu.
Descolgado y conectado al otro extremo: Hablando con x.
3. El telfono debe comunicar a la centralita que el usuario
e
ha descolgado,
3
19
En la gura 17 se puede observar un esquema de las comunicaciones que existen entre el usuario,
el telfono (uno de ellos, el resto son idnticos) y la centralita
e
e
Usuario
Colgado
Ring_Ring
PIII...
PIII...PIII
Marcado x
TuuTuuTuu
Hablando con x
Colgar
Marcar
Descolgar
Telefono
RingRing
PIII...
PiiiPiii
TuuTuuTuu
Hablando con x
Colgar
Marcar
Descolgar
Centralita
20
Cuando se est llamando a un telfono (Ring-Ring) y se descuelga, en ambos lados (el llamante
a
e
y el llamado) la centralita deber advertir que estn conectados (Hablando con x).
a
a
En general, cuando la centralita comunica al telfono un mensaje, este deber comunicar al
e
a
usuario la situacin (en nuestro caso basta con visualizar el Ring-Ring, el Piii..., el Piii-Piii,
o
el Tuu-Tuu-Tuu o el Hablando con x).
Cuando un usuario cuelga despus de haberse establecido el contacto con otro telfono, ese
e
Estacion 1
Sensor 2
!!!!!!!
!!!!!!
!
!!
!! !! !! !! !! !!
!!!!!!
!
# # # # # # %" % % % % %
"#$%
" " " " " "
"#"#"#"#"#"" $%$%$%$%$%$%
$ "" $ $ $ $ $
###"#"#"#"#""#%$%$%$%$%$%$%
"#%$
"##$%%$
"#"#"#"#"#"##" $%$%$%$%$%$%
# # # # #
%" % % % % %
"" "" "" "" "" "" "$$ "" $$ $$ $$ $$ $$
$$
Sensor 1
Estacion 2
En cada estacin se cargan trenes con mercanc y se solicita la salida de un tren cuando est lleno.
o
as
a
La forma de solicitar la salida es mediante un terminal de ordenador en que se introduce el n mero
u
de v en la que est estacionado el tren y qu tipo de tren es (ver ms abajo). Un tren arranca cuando
a
a
e
a
su semforo se pone en verde. Tras salir de la estacin el tren entra en el cruce, en el que no debe
a
o
haber dos trenes simultneamente. A la salida del cruce hay un sensor en cada v que detecta cundo
a
a
a
el tren ya ha abandonado el cruce.
Hay trenes de dos tipos: urgentes y normales. Dentro de cada estacin, los trenes urgentes tienen
o
siempre preferencia sobre los normales y la salida de estos ultimos debe retrasarse hasta que no haya
ning n tren urgente esperando. Dentro de la misma categor de trenes y en una estacin dada las
u
a
o
peticiones de salida deben ser atendidas en el mismo orden en que fueron realizadas.
21
Tenemos el siguiente interfaz para leer datos acerca de los sensores de las v y de las peticiones
as
de salida de trenes, y para noticar la salida de los trenes:
Sensor.EsperarPasoTren(NumeroEstacion: TipoNumEst)
(* Se bloquea hasta que se detecte el paso del ultimo vagn de un tren*)
o
(* por la va que sale de la estacin NumeroEstacion.
o
*)
(* Puede consultarse concurrentemente el estado de varios sensores.
*)
Semaforo.DarSalida(NumeroEstacion: TipoNumEst;
NumeroVia:
TipoNumVia);
(* Pone a verde el semforo de la va NumeroVia en la estacin
a
o
(* NumeroEstacion y lo vuelve a poner a rojo tras el tiempo necesario
(* para que el tren arranque (este tiempo es mucho menor que el que
(* emplea el tren en llegar al cruce). No pueden realizarse
(* concurrentemente operaciones sobre semforos de la misma estacin.
a
o
(* Es bloqueante.
NumeroEstacion: TipoNumEst;
VAR Clase:
TipoTren;
VAR NumeroVia:
TipoNumVia);
(* Lee una peticin de salida de la estacin NumeroEstacion. La va
o
o
*)
*)
*)
*)
*)
*)
Terminal.LeerPeticion(
*)
*)
*)
personal de la estacin y con el sensor del cruce debe utilizar unicamente el interfaz expuesto
o
anteriormente.
3. Especicar formalmente con un C-TAD el/los recurso(s) que aparezcan en el primer apartado
de esta pregunta.
Aunque el texto del problema habla unicamente de dos estaciones, pensar en el problema como si
tuviese n estaciones puede ayudar a tener una solucin ms elegante.
o
a
22
OirValor (PrecioAnterior : in
NuevoPrecio
: out
Hay
: out
-- Usada por un comprador para
Precio;
Precio;
Boolean);
conocer el nuevo precio
23
a
entrada PrecioAnterior.
Especicar formalmente un CTADSOL GestorSubasta que permita realizar la interaccin entre
o
vendedor y compradores.
Implementacin en Ada 95 del sistema (procesos Vendedor, Comprador y gestor) usando proceo
sos distribuidos y rendez-vous y/o paso de mensajes.
Implementacin mediante objetos protegidos (slo el cdigo del tipo protegido).
o
o
o
Un sistema de retransmisin de v
o
deo en tiempo real (gura 9) consta de un emisor que es capaz
de recoger imgenes, codicarlas para lograr que ocupen menos espacio, y enviarlas a una serie de
a
receptores. Se desea que los receptores tengan una imagen que sea lo ms el posible al desarrollo
a
temporal de las escenas a retransmitir (por ejemplo, que no acumulen retrasos).
Figura 9: Esquema de sistema de retransmisin
o
El emisor intenta producir un cierto n mero de imgenes por segundo. Sin embargo, debido a
u
a
la tecnolog usada para la codicacin de imgenes, algunos fotogramas tardan ms y otros menos
a
o
a
a
en estar preparados para su difusin. Por lo tanto, el emisor elabora fotogramas a una cadencia no
o
24
ja, tardando, en media, R segundos por fotograma. Dichos fotogramas se dejan inmediatamente
disponibles para los receptores. Como n mero orientativo, los sistemas reales de televisin, v
u
o
deo o
DVD muestran entre 24 y 50 fotogramas por segundo, dependiendo del estndar.
a
Por otro lado, los receptores pueden ser de distinta calidad y velocidad. Cada receptor puede
tardar un tiempo variable en mostrar cada fotograma (sin relacin directa con el tiempo empleado
o
por el emisor en codicarlo), y distintos receptores pueden necesitar un tiempo diferente para el
mismo fotograma. Los receptores pueden conectarse al sistema en cualquier momento (su n mero,
u
por tanto, no est jo a lo largo de la historia del recurso), y mostrar las mismas imgenes que los
a
a
dems receptores. Se puede asumir que la retransmisin no termina una vez que ha comenzado, y los
a
o
receptores no se desconectan del sistema una vez conectados a l.
e
De todo lo anterior se desprende que el emisor y los receptores se comportan de forma as
ncrona.
Sin embargo, se quiere asegurar que la visualizacin progresa adecuadamente y de forma lo ms sio
a
multnea posible: no debe suceder que un receptor con ms potencia de proceso adelante sin l
a
a
mite a
otros ms lentos. Para conseguirlo, algunos receptores pueden no mostrar alg n fotograma (bien pora
u
que lo desechen, bien porque directamente no lo reciban) para conseguir alcanzar la simultaneidad
necesaria. Si bien la falta de un fotograma representa una disminucin en la calidad de la reproduco
cin, ello debe ser causado slo por la falta de potencia de un reproductor en particular, que no es
o
o
capaz de alcanzar la velocidad a la que el emisor genera fotogramas. El dise o del sistema no debe
n
producir prdidas innecesarias de fotogramas.
e
Es deseable desacoplar en lo posible las velocidades del emisor y los receptores, para intentar
que, aun en el caso de que el emisor tarde ms de R unidades de tiempo en codicar una imagen
a
determinada, los receptores no perciban este retraso. Asimismo debe intentarse reducir en lo posible el
gasto de memoria del sistema, eliminando del mismo fotogramas en cuanto estos no sean ya necesarios
y evitando la duplicacin de la informacin (un segundo de pel
o
o
cula en formato MPEG, como el usado
en DVDs, que utiliza con algoritmos de compresin y prediccin del movimiento muy elaborados,
o
o
necesita alrededor de 0.6 Mb de almacenamiento).
Las unicas operaciones disponibles en las interfaces del servidor y los receptores son:
procedure Mostrar_Imagen(I: in Tipo_Imagen);
-- Muestra en el receptor llamante la imagen I. Tarda un tiempo
-- en ejecutarse, que vara dependiendo de la imagen I.
Adicionalmente se dispone de una operacin de bloqueo durante un tiempo dado, que puede
o
utilizarse en cualquier proceso del sistema:
procedure Esperar(T: in Tipo_Tiempo);
-- Espera (bloqueando el proceso) durante T unidades de tiempo.
Supondremos que los valores de Tipo Tiempo pueden asignarse, compararse (con igualdad y desigualdad) y operarse (por ejemplo, para sumar una duracin a un punto en el tiempo). De modo
o
similar, las variables de tipo Tipo Imagen puede asignarse entre s
.
Realizar la fase de anlisis y dise o de la concurrencia, proporcionando:
a
n
Grafo de procesos (incluyendo los de emisor, receptores, y cualesquiera otros que se consideren
necesarios) y recursos.
Especicaci n formal del recurso necesario para la sincronizacin de los procesos.
o
o
Seudoc digo de los procesos en funcin de la interfaz del recurso especicado.
o
o
25
Implementaci n en Ada 95 del sistema (procesos Emisor, Receptor, Reloj y recurso Transmio
sinV
o deo) usando procesos distribuidos y rendez-vous y/o paso de mensajes.
Implementaci n del recurso mediante objetos protegidos (slo el cdigo del tipo protegido).
o
o
o
cada sentido. Por cada v viaja un unico tren. La gura muestra una vista area de una estacin.
a
e
o
26
Existe un andn central, de entrada, por el que se puede acceder indistintamente a los trenes
e
de ambas v
as. En la gura, un pasajero se dispone a montar en uno de los trenes. La salida ha
de realizarse necesariamente por los andenes exteriores. Para ello los trenes disponen de puertas de
entrada y salida que se accionan de manera independiente.
Para ahorrar energ los trenes se encuentran detenidos en alguna estacin hasta que un pasajero
a,
o
se monte o hasta que alg n pasajero de otra estacin lo solicite mediante el botn de llamada presente
u
o
o
en todos los andenes centrales.
Cada tren dispone de un sensor capaz de detectar que se est aproximando a una estacin, pero
a
o
slo se debe detener si es necesario, es decir, si uno de los pasajeros que viajan en el tren ha pulsado
o
el botn de parada solicitada o si se ha llamado al tren desde la estacin a la que ste se acerca. La
o
o
e
solicitud de parada se desactiva al detenerse el tren y no puede volverse a activar hasta que se reanuda
la marcha.
El tren posee un detector de carga que le permite conocer si lleva pasajeros en un momento dado.
Esto sirve, entre otras cosas, para detectar que un pasajero ha subido a un tren vac y detenido en
o
una estacin.
o
Para realizar el control de este sistema se dispone de los siguientes procedimientos ya programados:
procedure Ocupacion_Vagon(in T: Tipo_Tren;
out P: Boolean);
Se encarga de ver si la carga del tren T permite deducir que hay alg n pasajero. Esta operacin es
u
o
relativamente lenta (tarda unos segundos).
procedure Lectura_Anden(in
E: Tipo_Estacion);
T: Tipo_Tren);
Arrancar_Tren(in T: Tipo_Tren);
Detener_Tren (in T: Tipo_Tren);
Apertura_Puertas_Salida(in T: Tipo_Tren);
Cierre_Puertas_Salida (in T: Tipo_Tren);
Apertura_Puertas_Entrada(in T: Tipo_Tren);
Cierre_Puertas_Entrada (in T: Tipo_Tren);
Act an sobre diferentes dispositivos del tren. Deben ser llamados de forma no simultnea para un tren
u
a
dado y en una secuencia coherente con los requisitos planteados anteriormente. Una llamada a una de
estas operaciones puede tardar unos segundos en retornar: p.ej., Cierre Puertas Salida(t) incluye todo
el proceso de cerrado, con aviso sonoro, peque a espera y cierre de las puertas en s Para simplicar,
n
.
supondremos que el intento de cerrar unas puertas ya cerradas o abrir unas puertas ya abiertas carece
de efecto alguno.
27
Se pide:
Grafo de procesos/recursos que permita controlar el sistema arriba descrito.
Cdigo esquemtico de las tareas propuestas.
o
a
Especicacin formal (CTADSOL) del recurso o recursos propuestos.
o
Una implementacin en Ada 95 del C-TADSOL utilizando objetos protegidos.
o
Una implementacin en Ada 95 del C-TADSOL utilizando Rendez-Vous, con paso de mensajes
o
expl
cito si se considera necesario.
La comunicacin de la ocupacin (o no) de un vagn slo incumbe a los procesos controlador
o
o
o o
del tren y al proceso que recoge dicha informacin. Podr extraerse esa comunicacin del
o
a
o
recurso presentado y delegarse a otro recurso?
23. Pastas de t
e
Una fbrica de pastas de t tiene tres hornos que producen tres tipos diferentes de pastas: A, B y
a
e
C, con pesos diferentes: pesoA, pesoB y pesoC. Procedentes de los hornos, las pastas se van situando
en un mostrador com n.
u
Las pastas son empaquetadas en cajas. Uno o varios robots Empaquetador toman pastas del mostrador y las introducen en la caja (ver gura). Cada caja puede contener un n mero diferente de pastas
u
siempre y cuando no se sobrepase un peso l
mite, denominado P esoM aximo. Por este motivo, antes
de incluir una pasta en la caja, cada empaquetador debe asegurarse de que con su inclusin no se
o
sobrepasa el peso mximo. Si no se sobrepasa el peso se incluye la pasta en la caja; en otro caso, un
a
Brazo mecnico se encarga de retirar la caja que se estaba llenando y posteriormente la sustituye por
a
una caja vac
a.
Tened en cuenta de que se trata de llenar la caja lo ms posible, lo cual puede ser conseguido
a
por uno cualquiera de los robots que intentan depositar simultneamente alguna pasta, de pesos que
a
pueden variar. Se considera que no hay interferencia f
sica entre robots que intentan soltar pastas al
mismo tiempo en la caja.
Asumiremos que inicialmente hay una caja vac junto al mostrador.
a
Para desarrollar el software de control se parte de paquetes Robot y Brazo ya programados que
proporcionan, entre otras, los siguientes procedimientos de acceso a los dispositivos mecnicos (nos
a
olvidamos del horno; no es asunto del software que debemos dise ar):
n
28
type Tipo Empaquetador i s N a t u r a l range 0 . . NumEmpaquetadores ;
procedure R e t i r a r C a j a ;
R e t i r a r C a j a hace que
quede bloqueado hasta
r e t i r a d a por e l brazo
Requiere que haya una
e l proceso que l o i n v o c a
que l a c a j a que estaba siendo l l e n a d a es
auxiliar .
c a j a en l a zona de r e l l e n a d o .
v a c a en e l area de r e l l e n a d o .
Se pide:
Grafo de procesos/recursos que permita controlar el sistema arriba descrito.
Cdigo esquemtico de las tareas propuestas.
o
a
Especicacin formal (CTADSOL) del recurso o recursos propuestos.
o
Una implementacin en Ada 95 utilizando objetos protegidos.
o
Una implementacin en Ada 95 utilizando Rendez-Vous y con paso de mensajes expl
o
cito si se
considera necesario.
Una variacin del dise o en la que se considere que el brazo robot no puede calcular el peso de
o
n
las pastas, sino que la plataforma en que est la caja tiene una balanza con una operacin
a
o
PesoBalanza(Peso: out TipoPeso)
que es no bloqueante y de ejecucin prcticamente inmediata. El nuevo dise o debe cumplir
o
a
n
en lo posible los mismos requisitos que el inicial.