next_inactive up previous
Up: Examen de Programación Concurrente Previous: El almacén de las

Subsecciones


Preguntas cortas

Las respuestas a esta pregunta deben entregarse en esta misma hoja del enunciado.


Nombre:

Número de matrícula: Grupo:

Cuestión 1

Tras un análisis de una aplicación concurrente se diseña un sistema con dos procesos $A$ y $B$ y un recurso compartido $C$. Cuando se traduce a paso de mensajes se añade un proceso Gestor_C para controlar el recurso $C$. Este proceso incluye una sentencia SELECT Qué procesos pueden enviar mensajes a un canal c que aparece en la recepción de una rama de dicha SELECT?

$\Box$
$A$, $B$ y $C$
$\Box$
O bien $A$ o bien $B$, según se haga el GetChannel (c).
$\surd$
$A$ y $B$ indistintamente.

Cuestión 2

Complétese la siguiente tabla que equipara los diferentes elementos de la implementación de un recurso mediante monitores y paso de mensajes:

Monitores Paso de mensajes
Nombre de operaciones del monitor
Canal para petición de ejecución de operaciones
Entrada a monitor en exclusión mutua
Verificación de la guarda booleana tras un WHEN y recepción del mensaje correspondiente a la operación
Llamada a una operacion del monitor para la que se usa canal_op suministrando datos_entrada y recibiendo datos_salida
Send (canal_op, datos_entrada);
Receive (canal_retorno, resultados)

Variables del monitor accesibles en exclusión mutua por todos los procesos
Variables locales del proceso que implementa el recurso activo
Precondición de una operación que no se cumple y que provoca un Delay
Condición de rama WHEN que no se cumple
Continue (variable_condition)
Actualización de variables de manera que en la siguiente ejecución de la SELECT se verifica la condición de una de sus ramas
Cuerpo dentro de una operación entre la comprobación de precondiciones y el código que realiza los Continue necesarios
Cuerpo dentro de una rama de la SELECT WHEN cond, Receive (canal, d) DO
  $«$ cuerpo $»$

Cuestión 3

Estúdiese el siguiente programa concurrente con paso de mensajes, y descríbase en el recuadro inferior vacío las situaciones (esto es, los valores admisibles para $v1, v2, v3, v4$) en las que no se producirán errores, ni interbloqueos, ni inanición en el programa, y el programa terminará correctamente. Nota: la rama ELSE de la SELECT se ejecuta cuando todas las expresiones booleanas de las guardas son falsas, independientemente de que haya o no mensajes encolados en los canales por los que reciben los Receive.


\begin{lstlisting}{}
MODULE Programa;
TYPE T = [1..3];
VAR c1, c2 : CHANNEL (* OF T *);
\end{lstlisting}


\begin{lstlisting}{}
TASK P1;
VAR a : T;
BEGIN
a := $v1$;
IF NOT ODD (a) THEN DEC (a) END;
IF a > 2 THEN
Send (c1, a)
END;
END P1;
\end{lstlisting}

\begin{lstlisting}{}
TASK P2;
VAR a : T;
BEGIN
a:= $v2$;
Send (c2, a);
END P2;
\end{lstlisting}


\begin{lstlisting}{}
TASK G_R;
VAR a, b : T;
VAR i, c : INTEGER;
BEGIN
GetC...
...O
c := c + b;
ELSE
c := b;
END;
a := $v4$;
END
END G_R;
\end{lstlisting}


\begin{lstlisting}{}
BEGIN
COBEGIN
P1; P2; G_R
COEND;
END Programa;
\end{lstlisting}

\fbox{
\begin{minipage}[t]{0.98\textwidth}
\textbf{Valores admisibles:} \hfill...
...c2}
antes que la rama \textbf{ELSE} de la \textbf{SELECT}.
\par
\end{minipage}}


next_inactive up previous
Up: Examen de Programación Concurrente Previous: El almacén de las
Manuel Carro
2001-03-01