P. CONCURRENTE. QUIZ. 14-04

Anuncio
P. CONCURRENTE. QUIZ. 14-04-2011
Apellidos:____________________________________________________ Nombre: _________________
1 [2.0] Para las expresiones CSP siguientes, escribir (V/F) y justificar la respuesta:
a) | | [P1::*[P2 ? x-> NULL TRUE -> x:= x+5] || [P2 :: P1 ! (3, 5, 7)]]
La ejecución del programa anterior produce el interbloqueo de ambos procesos.
__________________________________________________________________________
__________________________________________________________________________
________________________________________________________________________
b)
| | [P1::*[FALSE;var x: 1..10; P2 ? x -> NULL TRUE ->x:= x+5] || P2 :: P1 ! (-1) ]
La ejecución del programa anterior produce interbloqueo.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
c)
P3 ? ( y, z) -> y:= y+1] || P2:: NULL || P3::P1 ! (6,0)]
| | [P1 :: *[P2 ? x -> x:= x+1
Si sustituimos P2:: NULL por P2:: P1 ! x, el programa anterior dejará de bloquearse.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
d)
| | termina:= FALSE;
NOT termina; P2 ? x -> x:= x+5;
[P1::*[NOT termina;P3 ? x -> x:= x+5; termina:=true; P3 ! (0,1)
termina:= true] || P2::P1 ! 0 || P3:: P1 ! 0; P1 ? y]
Una posible ejecución del programa anterior produce el interbloqueo de procesos.
_______________________________________________________________________
________________________________________________________________________
________________________________________________________________________
e)
| | [P1::var x:positive:=1;*[x>0;P2 ? x -> x:= x+5 ] || P2:: P1 ! ( -5)]
En el programa anterior se bloquean ambos procesos porque el valor enviado por P2 es un entero
negativo y no se corresponde con el tipo de la variable objetivo que va a recibirlo.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
f)
| | [P1::x:integer; *[P2 ? x -> x:= x+5 ] || P2::NULL]. Ambos procesos terminan.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
g) | | [in(i:1..N)::IN || mux::*[(i:1..N) x:integer; in(i) ?x -> out ! (i, x)]; out ! true || out::x:bool; mux?x]
Si los procesos in(1), .., in(n) terminan ejecutando órdenes de la forma mux ! x , entonces los tres
procesos del programa anterior terminan.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
h)
| | [P1 :: *[P2 ? x -> x:= x+1 P3 ? y -> y:= y+1] || P2:: x:= 4 || P3::P1 ! 6].
El proceso P1 podría llegar a bloquearse indefinidamente si dicho proceso siempre selecciona la
primera alternativa de su orden repetitiva.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
i)
| | El siguiente programa no termina, ya que ambos procesos se bloquean porque sus órdenes
de entrada y salida no se corresponden:
[P1::x:integer;*[FALSE;P2 ? x -> x:= x+5 ] || P2:: P1 ! (0,1)]
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
j)
| | [P1::*[P2 ? x -> NULL] || P2::P1 ! x()]
El programa anterior termina en un bloqueo indefinido de ambos procesos.
________________________________________________________________________
________________________________________________________________________
2 [0.75] Escribir las condiciones de las guardas de la orden SELECT, y completar el código que falta en
dos de los ACCEPTs, del siguiente proceso Servidor para que implemente correctamente una cita
múltiple entre 10 procesos de tipo B y 1 proceso de tipo A.
Por su parte, los procesos clientes (de tipo A ó B) invocan el nombre del primer punto de entrada
(llamaA o llamaB) del servidor para notificarle su intención de participar en una cita múltiple. Los puntos
de entrada esperaA y esperaB sirven para detener a los procesos clientes que han invocado hasta se
den las condiciones para que se produzca la cita múltiple, es decir, hasta que llamen el número
suficiente de procesos de cada tipo.
Process Servidor
ENTRY llamaA; ENTRY esperaA;
ENTRY llamaB; ENTRY esperaB;
begin
while true do
SELECT
ACCEPT llamaA; NA++;
Process type TipoA
begin
while true do
Servidor.llamaA;
Servidor.esperaA
enddo;
end;
or ACCEPT llamaB; NB++;
Process type TipoB
begin
while true do
Servidor.llamaB;
Servidor.esperaB;
enddo;
end;
or (
)
and (
)=>
ACCEPT esperaA; NA--; NA’++
or (
)
and (
)=>
ACCEPT esperaB; NB--; NB’++
end; //SELECT
enddo
end;
3 [0.75] Para que exista bloqueo global o intebloqueo de los procesos que componen un programa en CSP
se ha de cumplir que ningún par de órdenes de entrada/salida entre procesos se correspondan y no
todos los procesos nombrados en las órdenes de entrada de las guardas hayan terminado y que no
fallen todas las guardas de las órdenes repetitivas.
P2?(x,y)
(1)[P1::*[P2?x → x:=x+5
→NULL] ⎥⎥ P2::P1!(-3)]
(2)[P1:: P2?x; *[x≥0;P2?y → x:=y+5]
⎥⎥ P2::P1!(-3); P1?z]
P2?(x,y)→
(3)[P1::*[P2?x → x:=x+5
(x,y):=(x-1, y-2)]
⎥⎥ P2::i:=0;*[i<2→P1!(-3);i:=i+1
i<2→P1!(1,2);i:=i+1]]
(4)[P1:: x:=-7;[ x≥0; P2?y → x:=y+5]
⎥⎥ P2::P1!(-2,-3)]
Responder (V/F) y explicar la respuesta identificando qué condiciones se cumplen o fallan:
|
| Existe una determinada secuencia de ejecución del fragmento (1) que conduce al interbloqueo.
________________________________________________________________________
________________________________________________________________________
| | (2) Se interbloquea porque las segundas órdenes de entrada (en negrita) de ambos procesos no se
corresponden
________________________________________________________________________
________________________________________________________________________
| | (3) Si el proceso P2 elije primero su segunda alternativa y envía (1, 2) y el proceso P1 elige la primera de
sus alternativas, entonces la ejecución del programa podría acabar en interbloqueo.
________________________________________________________________________
________________________________________________________________________
| | (4) Ambos procesos terminan bloqueándose.
________________________________________________________________________
________________________________________________________________________
4 [1.5] (a) Escribir un programa en CSP que implemente un proceso controlador de un cajero automático
que se encarga de garantizar que las operaciones de los clientes siempre se realizan correctamente.
Los procesos-cliente (suponemos que hay 1000 cuentas de clientes) obtienen dinero del cajero con la
operación reintegro(cantidad). Si la cuenta de un cliente determinado tiene suficiente dinero, entonces
el controlador ha de disminuir el dinero en la cantidad indicada por el cliente y termina enviándole un
mensaje con el dinero que queda en la cuenta; si no hay dinero suficiente, le envía un valor de error (-1).
Los procesos-cliente ingresan dinero en su cuenta con la operación ingresar(cantidad) y el controlador,
después de aumentar el dinero en la cuenta, les envía un mensaje con el nuevo valor al terminar dicha
operación.
Cada cliente tiene inicialmente100 unidades de efectivo en su cuenta.
Nota: para programarlo en CSP hay que declarar un array de 1000 elementos que representan las
cuentas de los clientes. Las operaciones anteriores (reintegro() e ingresar()) han de programarse en el
proceso controlador pedido como 2 órdenes con guarda que acaban en una orden de entrada para
cada cliente.
(b) Modificar el programa del controlador anterior para tener en cuenta ahora que el cajero automático
sólo dispone de 1000 unidades de efectivo para todas las peticiones de los clientes. Cuando el cajero
agota totalmente su efectivo, no podrá servir más peticiones de ningún tipo de los clientes y devuelve un
mensaje de error (-2). Los ingresos de los clientes no incrementan las unidades de efectivo del cajero.
Descargar