! " # " # & ' '()*+ 0" #*

Tamaño: px
Comenzar la demostración a partir de la página:

Download "! " # " # & ' '()*+ 0" #*"

Transcripción

1 ! " # " # $% & ' '()*+ #* *' ++,-"./" [Ben90] Ben-Ari, M. Concurrent and Distributed Programming Prentice Hall, [Capítulos 3, 4, 5, 6 7 y 8 ] [Ray83] Raynal, M. Algorithms for Mutual Exclusion. MIT Press, [Pal03] Palma, J. et al. Programación Concurrente. [Capítulos 4, 5 y 6] [Tom03] Tomeu, A. Apuntes de Prog. Concurrente. [Tema 3]

2 Niveles de Exclusión Mutua-Sincronización LENGUAJE SISTEMA MONITORES, REGIONES CRÍTICAS SEMÁFOROS MEMORIA ESPERA OCUPADA

3 1 ) (! * #',# '' ( * (2 2! 3)( 1 '!''" #! #&' 4& 5 ( 2&6 '' 4* #&' '

4 ! # 2 3' # 2 )6 ## % 71! 2 8' " #99((:4(: (#5-(,' 4% ) 57 *1#)&'

5 " # $ Turno: integer range 1..2 := 1; task body P2 is loop Resto_código_2; loop exit when Turno = 2; Sección_Crítica_2; Turno := 1; end P2; task body P1 is loop Resto_código_1; loop exit when Turno = 1; Sección_Crítica_1; Turno := 2; end P1;

6 l5 l6 l1 l3 l2 t1 TEOREMA: LA SOLUCIÓN DE TURNOS CONSERVA LA EM SOBRE LAS SECCIONES CRÍTICAS Y ESTÁ LIBRE DE INTERBLOQUEOS -Demostración: transformar a RdP pura, extraer sistemas de ecuaciones y resolver PA para E.M. e INTREBLOQUEO t3 l4 t2 t4

7 " # $ C1, C2: integer range 0..1 := 1; task body P1 is loop RC1 t1 L1 t2 SC1 Resto_código_1; loop exit when C2 = 1; C1 := 0; Sección_Crítica_1; C1 := 1; t3 end P1; task body P2 is loop RC2 t4 L2 t5 SC2 Resto_código_2; loop exit when C1 = 1; C2 := 0; Sección_Crítica_2; C2 := 1; t6 end P2;

8 c1=1 c2=1 RC1 RC2 t1 t4 L1 L2 t2 t5 SC1 SC2 t3 c1=0 c2=0 t6

9 % & +,"3"3",3;".";3"3" TEOREMA: LA RdP ANTERIOR NO CONSERVA LA EM SOBRE LAS SECCIONES CRÍTICAS -Demostración: transformar a RdP pura, extraer sistema de ecuacione y resolver PA para E.M <""=">""?"".";" 3"

10 '" # ( $ C1, C2: integer range 0..1 := 1; task body P1 is loop Resto_código_1; C1 := 0; loop exit when C2 = 1; Sección_Crítica_1; C1 := 1; end P1; RC1 T1 L1,t2 SC1 t3 task body P2 is loop Resto_código_2; C2 := 0; loop exit when C1 = 1; Sección_Crítica_2; C2 := 1; end P2; RC2 T4 L1,t5 SC2 t3

11 c1=0 c2=0 RC1 RC2 t1 t4 L1 L2 TEOREMA: AMBOS PROCESOS SE INTERBLOQUEAN EN SUS LAZOS DE ESPERA OCUPADA (L1 y L2) t2-demostración: transformar a RdP pura, extraer sistema t5 de ecuaciones y resolver PA para interbloqueo SC1 SC2 t3 c1=1 c2=1 t6

12 )" #* +* C1, C2: integer range 0..1 := 1; task body P1 is loop Resto_código_1; C1 := 0; loop exit when C2 =1; C1 := 1; C1 := 0; Sección_Crítica_1; C1 := 1; end P1; task body P2 is loop Resto_código_2; C2 := 0; loop exit when C1 = 1; C2 := 1; C2 := 0; Sección_Crítica_2; C2 := 1; end P2;

13 )" #* +* Respeta la exclusión mutua Presenta una forma de bloqueo débil (livelock) dada por una secuencia de entrelazado cuál es? Puede haber procesos hambrientos Ejercicio: Extraer RdP y verificar su análisis

14 %,--.,--/01234 Turno : Integer range 0..1 := 1; C1, C2: integer range 1..2 := 1; task body P1 is loop Resto_código_1; C1 := 0; loop exit when C2=1; if Turno=2 then C1:=1; loop exit when Turno:=1; C1 := 0; end if; Sección_Crítica_1; C1 := 1; Turno := 2; end P1; task body P2 is loop Resto_código_2; C2 := 0; loop exit when C1=1; if Turno=1 then C2:=1; loop exit then Turno=2; C2 := 0; end if; Sección_Crítica_2; C2 := 1; Turno := 1; end P2;

15 % %,-- Exclusión Mutua Libertad de Interbloqueos No hay procesos hambrientos Hay progreso en la ejecución Generalizable a n procesos [Dijkstra] Complejo y poco intuitivo

16 %. /01504 C1, C2: boolean := false; Turno : integer range 1..2; task body P1 is RC1 u1 u2, u3 u4, u5 SC1 u6 loop Resto_código_1; C1 := true; Turno := 2 ; while (C2 and Turno=2)do; Sección_Crítica_1; C1 := false; end P1; RC2 v1 task body P2 is loop Resto_código_2; C2 := true; Turno := 1; while (C1 and Turno=1)do; Sección_Crítica_2; C2 := false; end P2; v2, v3 v, v5 SC2 v6

17 C1:=false C2:=false RC1 RC2 u6 u1 C1:=true v1 C2:=true v6 u2 TEOREMA: CONSERVA LA E.M. Y ESTÁ LIBRE DE INTERBLOQUEOS. v2 u3 Turno:=1 -Demostración: transformar a RdP pura, extraer sistemas de ecuaciones y resolver PA en ambos casos v3 COROLARIO: NO HAY PROCESOS HAMBRIENTOS Y LA EJECUCIÓN PROGRESA SIEMPRE u5 v5 u4 v4 SC1 Turno:=2 SC2

18 % 6.6 /01224 var flag: array [0..1] of boolean; (*inicialmente FALSE*) turn: 0..1 := 0; INCORRECTO! repeat flag[0]:= true; while turn <> 0 do while flag[1] do end do; turn:= 0; enddo; 4 <seccion critica>; flag[0]:= false; until false; 3 repeat 1 flag[1]:= true; while turn <> 1 do 2 while flag[0] do end do; 5turn:= 1; enddo; 6<seccion critica>; flag[1]:= false; until false;

19 % 7 var c: array[0..n-1] of (pasivo, solicitando, en-cs); (*inicialmente 'pasivo'*) turn0: 0..n-1; (*valor 0 ó 1, inicialmente*) repeat c[i]:=solicitando; j:=turno //j es local a cada proceso while j<>i do if c[j]<>pasivo then j:=turno else j:= (j-1) mod n;endif; end; c[i]:=en-sc; k:=0; while (k<n) and (k=i or c[k]<> en-sc) do j:=j+1 enddo; until k>=n; turno:=i; <seccion critica>; turn:= (i-1) mod n; c[i]:=pasivo;

20 % 7 var flag: array[0..1] of boolean; (*inicialmente FALSE*) turn: array[0..1] of 0..1; (*valor 0 ó 1, inicialmente*) repeat flag[0]:= true; turn[0]:= turn[1] + 0 mod 2; while (flag[1] and turn[0]= turn[1] + 0 mod 2) do nothing end do; <seccion critica> flag[0]:= false; until false; repeat flag[1]:= true; turn[1]:= turn[0] + 1 mod 2; while (flag[0] and turn[1]= turn[0] + 1 mod 2) do nothing end do; <seccion critica> flag[1]:= false; until false;

21 % 8 N1, N2: Integer := 0; task body P1 is loop Resto_código_1; N1 := 1; N1 := N2+1; loop exit when N2=0 or N1<=N2; Sección_Crítica_1; N1 := 0; end P1; task body P2 is loop Resto_código_2; N2 := 1; N2 := N1+1; loop exit when N1=0 or N2<N1; Sección_Crítica_2; N2 := 0; end P2;

22 % :4 Choosing: array (1..N) of integer (others=>0); Number: array (1..N) of integer (others=>0); task body Pi is I: constant integer :=..., task id loop Resto_código_I; choosing(i):=1; number (I)=1+max(number); choosing(i):=0; for J in 1..N loop if J<>I then loop exit when chossing(j)=0; loop exit when number(j)=0 or number(i)<number(j) or (number(i)=number(j) and i<j); end loop, end if; Sección_Crítica_I; number(i):=0; end Pi;

23 ! "! 1! 4%

24 Swap cerradura : boolean := false; Swap (A,B) ";" Temp := B; B := A; A := Temp; Task body Pi is llave: boolean; //local RCi t1-4 L1-2 t2-5 SCi t3-6 loop Resto_Código_i; llave:=true; loop Swap(cerradura,llave); exit when llave=false; Sección_Crítica_i; cerradura:=false; end Pi;

25 cerradura:=false RC1 llave:=true llave:=true RC2 t1 t4 L1 t2 TEOREMA: t7 LA E.M. SE PRESERVA A NIVEL t8 DE SECCIONES CRITICAS. NO HAY INTERBLOQUEOS -Demostración: extraer sistemas de ecuaciones y resolver PA para E.M. e interbloqueo SC1 llave:=false llave:=false SC2 L2 t5 t3 t6

26 C: integer /*global*/ Test_and_Set (Li) ";" Li := C; C := 1; Task body Pi is Li: Integer range 0..1; //local loop Resto_Código_i; loop Test_and Set (Li); exit when Li := 0; Sección_Crítica_i; C := 0; end Pi;

27 (.,-/01234," #'!! 3 ) 2& *#* &* # &2 2 ) # 7

28 (#,(! 3&! 2! #!* 2 ) ' (1965)' Wait (S)@AB5C' ( ( ' Signal (S)4* '(BDC' Wait (S)=P(S) Signal (S)=V(S)

29 (#; Wait *Signal! & #! Signal #7( E4..F $ & # B@A & BA(C! 4 2 & = +

30 (#" Implementación Type semáforo=record of S: integer; L: lista_de_procesos; end;,!! &,(& BA* Wait 2 * G )( # 2,#7 #7 #'

31 (#" procedure inic(var sem:semaphore; s0:integer); sem.s:=s0; inicializar(sem.l); end; procedure wait(var sem:semaphore); if sem.s>0 then sem.s:=sem.s-1; else sem.l.insertar(proceso); bloquear (proceso); end; end; procedure signal(var sem:semaphore if not sem.l.vacia() then sem.l.eliminar (proceso); desbloquear (proceso); end; else sem.s:=sem.s+1; end;

32 (# SEMAFOROS CONJUNTO BLOQ. COLA BLOQUEADA ESPERA OCUPADA Wait(S):Inc. S si es mayor 0. Signal(s):Libera proc o dec. S Wait(S):Inc. S si es mayor 0. Signal(s):Libera proc o dec. S COLA FIFO Wait(S):Inc. S si es mayor 0. Signal(s):Libera proc o dec. S ESPERA OCUPADA

33 ( C*H I S: semáforo := 1; Task body P1 is loop RC1 t1 SC1 t2 Resto_1; Wait (S); Sección_Crítica_1; Signal (S); end P1; Task body P2 is loop RC2 t3 SC2 t4 Resto_2; Wait (S); Sección_Crítica_2; Signal (S); end P2;

34 % <, 2 ', # 2 ( 1! + =

35 % <*=& S RC1 RC2 t1 t3 SC1 SC2 TEOREMA: LA E.M. SE PRESERVA A NIVEL DE SECCIONES t2 CRITICAS. NO HAY INTERBLOQUEOS t4 -Demostración: obtener matriz de incidencia, extraer sistemas de ecuaciones y resolver PA para E.M. e interbloqueo

36 ( )C*H2H G C' S: semaphore := 0: Task Body P1 is Task Body P2 is RC1 t1 RC2, t2 loop Codigo Signal(S); Codigo end; loop Codigo Wait(S); Codigo end; RC3 t3 RC3, t4

37 % <*=& RC1 t1 RC3 RC2 S t3 t2 TEOREMA: P1 puede ciclar libremente, pero P2 debe esperar siempre la señal desde P1 RC4 -Demostración: obtener matriz de incidencia, extraer sistemas de ecuaciones y resolver PA para ambas situaciones t4

38 > ( 3 #2# 424 # I Barrera1 : semaphore := 0; Barrera2 : semaphore := 0; l1 t1,l2 t2 l3,t3 Task Body P1 is loop Signal(Barrera1); Wait(Barrera2); Código_Restante; end; l4 t4,l5 t5 l6,t6 Task Body P2 is loop Signal(Barrera2); Wait(Barrera1); Código_Restante; end;

39 Barrera1=1 Barrera2=1 t1 t4 t2 t5 t3 Barrera1=0 Barrera2=0 t6 TEOREMA: AMBOS PROCESOS SE SINCRONIZAN AL COMENZAR A EJECUTAR SUS CÓDIGOS RESTANTES -Demostración- Resolver PA correspondiente

40 )#+) &? 2 "?/!? "! ' & In_Ptr Out_Ptr

41 % " B: array (0..infinity) of integer; In_Ptr, Out_Ptr: integer:=0; Task body Productor is I:Integer; loop producir (I); B(In_Ptr):=I; In_Ptr:= In_Ptr+1; end Productor; Task body Consumidor is I:Integer; loop I:=B(Out_Ptr); Out_Ptr:= Out_Ptr+1; consumir (I); end Consumidor;

42 % % " J 7 J 7 = 2 *# ( 2 = + K!& ' ) & 2 *

43 % >((" ( B: array (0..infinity) of integer; In_Ptr, Out_Ptr: integer:=0; Elements: semaphore:=0; em: semaphore:=1; Task body Productor is I:Integer; loop producir (I); l1 t1 Wait(em); l2 B(In_Ptr):=I; In_Ptr:= In_Ptr+1; t2 Signal (em); Signal(Elements); end Productor; Task body Consumidor is I:Integer; loop Wait (Elements); Wait(em); I:=B(Out_Ptr); Out_Ptr:= Out_Ptr+1; Signal (em); consumir (I); end Consumidor; l5,t3 l6,t4 l7 t5

44 l1 em l5 t1 t2 l2 Elements t3 l6 t4 TEOREMA: El productor puede producir indiscriminadamente, pero el consumidor debe esperar a que haya al menos un dato en el buffer. l7 -Demostración: obtener matriz de incidencia, extraer sistemas de ecuaciones y resolver PA t5

45 % >((< B: array (0..N-1) of integer; In_Ptr, Out_Ptr: integer:=0; Elements: semaphore:=0; Spaces: semaphore:=n; em: semaphore:=1; Task body Productor is I:Integer; loop producir (I); Wait (Spaces); Wait(em); B(In_Ptr):=I; In_Ptr:=(In_Ptr+1)modN; Signal (em); Signal(Elements); end Productor; Task body Consumidor is I:Integer; loop Wait (Elements); Wait(em); I:=B(Out_Ptr); Out_Ptr:= (Out_Ptr+1)modN; Signal (em); Signal (Spaces); consumir (I); end Consumidor;

46 l1 em l5 t1 l2 Elements t3 t2 l6 N TEOREMA: El productor puede producir hasta llenar el buffer, el consumidor debe Spaces esperar a que haya al menos un dato en el buffer, y puede consumir mientras haya objetos en el mismo. l7 t4 -Demostración: obtener matriz de incidencia, extraer sistemas de ecuaciones y resolver PA t5

47 ( ) C dispone de la biblioteca sem.h en el marco de las facilidades IPC. Define conjuntos de semáforos Semántica muy diferente a la estándar de Djikstra Son más potentes Funciones semget, semctl y semop

48 /*Antonio J. Tomeu-Dpto. LSI-Area CC. e I.A.*/ /*Ejemplo de Wait sobre un semaforo IPC */ #include <stdio.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #include <string.h> #define PERMISOS S_IRUSR S_IWUSR S_IRGRP S_IWGRP S_IROTH S_IWOTH #define TAM 3 #define CLAVE (key_t) 666 void ajustar(struct sembuf *s, int valor, int operacion, int flags); int main (void) { int semid; struct sembuf mioper[tam-1];

49 semid = semget(clave, TAM, IPC_CREAT PERMISOS); /*Creacion*/ if(semid==-1) printf("error"); semctl (semid, 0, SETVAL, 1); ajustar(&(mioper[0]), 0, -1, 0); semop(semid, mioper,1); /*Wait=>Decremento del semaforo*/ semop(semid, mioper,1); /*Wait=>Bloqueo del proceso*/ /*Eliminacion del conjunto de semaforos*/ semctl(semid, NULL, IPC_RMID);} void ajustar (struct sembuf *s, int valor, int operacion, int flags) { s->sem_num = (short) valor; s->sem_op = operacion; s->sem_flg = flags; return; }

50 L!&! L!! '' 1E1F L! ) 1 #6''

51 public class semaforo { private byte S; public void _inicial (byte valor) {S = valor; return;} synchronized public void Wait() { while (S == 0) try{ wait(); } catch (Exception e) {} S--; } } synchronized public void Signal() { S++; notifyall(); }

52 " * ( +1! ' + ' & # ' 1#2 44!&

53 & )=.6A> +6 /019B4 3#* 11 &#) &! 2 & "#E! F #EF? 3# *4*'

54 & )=# var V: shared T; region V do S; /*acceso en e.m. a V*/

55 & )=#,! # 32# #& ( 4 # 3 #* 32# # ( # 2!

56 & )=#" * 2 P: region x do region y do S1: Q: region y do region x do S2;!) 1#

57 & )=) # var V: shared T; region V when B do S; /*acceso en e.m. a V*/

58 & )=) # # 2 # ( 2 1 ##2 +,! + # +! M N ( #* ',2! 7+M N

59 & )=) #"

60 +) & )= var buffer: shared record B: array [0..n-1] of integer; In_Ptr, Out_Ptr, cont: integer; Productor region buffer when cont<n do producir(i); B[In_Ptr]:=I; In_Ptr:=In_Ptr+1 mod n; cont:=cont+1; end; Consumidor region buffer when cont>0 do end; I:=B[Out_Ptr]; Out_Ptr:=Out_Ptr+1 mod n; cont:=cont-1; consumir(i);

61 .6/019:4 3 & #1#2 #''1 2 #' * " ' ) G * 2 & &!

62 #" ;(! * C H

63 # type nombre-monitor=monitor declaraciones de variables procedure entry P1(...)... end;... procedure entry PN(...)... end; código de inicialización end;

64 #,! EG F! ) 32! ' ( '' * G )& ) G * 2G ) G *# 2G )#

65 #C) DEF ) 2 nombre_variable: condition; wait(variable_condición): 2 4..! 2 ' send(variable_condición):! non_empty(variable_condición):! &!' &c.wait, c.send! c.

66 #, E " < & G & G *# G * G G ( '4*2#' G )' G ' G )' G ' 7 O 3 G * G # G )' G *! G )' G *! #( '

67 +) monitor prod_con is B: array(0..n-1) of Integer; In_Ptr, Out_Ptr: Integer:=0; Count: Integer:=0; Not_Full, Not_Empty: Condition; Procedure Añadir(I:in Integer) is if Count=N then wait(not_full); end if; B(In_Ptr):=I; In_Ptr:=(In_Ptr+1) mod N; Send(Not_Empty); end; Procedure Coger(I:out Integer) is if Count=0 then wait(not_empty); end if; I:=B(Out_Ptr); Out_Ptr:=(Out_Ptr+1) mod N; Send(Not_Full); end; end prod_con;

68 ( Wait Wait (S) Signal Signal (S) S 2 OEF # EF? J= 2 BA

69 ( monitor Emula_Semaforo is S: Integer := S0; Not_Zero: Condition; procedure Emula_Wait is if S0=0 then Wait(Not_Zero); end if; S := S-1; end Emula_Wait; Procedure Emula_Signal is Begin S := S+1; Send(Not_Zero) end Emula_Signal; end monitor;

70 ( & 1*,'' #&! C & Csemáforo* CCount 2 & ) 2

71 ( B### ' & S Send(C) 2! if CCount > 0 then Signal(CSemáforo); end if; wait(c) 2! CCount := CCount+1; Signal(S); Wait(CSemáforo); Wait(S); CCount := CCount-1;

72 ) No existen como tales Emulación mediante semáforos IPC Fases: Diseñar una solución con monitores Utilizar señalización SX Transformar a su equivalente con semáforos (Djikstra) Implementar con semáforos IPC

73 @* Todo objeto es un monitor potencial Clase Object: métodos wait, notify, notifyall Clases con métodos synchronized No soporta variables de condición Hay que simular la sincronización con los métodos de la clase Object. Equivalen a una única variable de condición.

74 @*# class Monitor { public Monitor(){ } //constructor public synchronized tipo1 metodo1() throws InterruptedException{ notifyall(); //señal explícita no desplazante while(!condicion1) wait(); //espera sobre v. de condición } public synchronized tipo2 metodo2() throws InterruptedException{ notifyall(); while(!condicion1) wait(); } }

75 # # ( 2 7 *! 24! *4 -+(! 4 2 * 2 & *

76 Monitor Lector_Escritor is Lector: integer:=0; Writing: boolean:=true; OK_to_Read, OK_to_Write: Condition; procedure Start_Read is if Writing or Awaited(OK_to_Write) then Wait(OK_to_Read); end if; Lector:= Lector+1; Send (OK_to_Read); end Start_Read; procedure End_Read is Lector:= Lector-1; if Lector=0 then Send(OK_to_Write); end if; end End_Read;

77 procedure Start_Write is if Lector<>0 or Writing then Wait(OK_to_Write); end if; Writing:=True; end Start_Write; procedure End_Write Writing:=False; if Awaited(OK_to_Read) then Send (OK_to_Read); else Send (OK_to_Write); end if; end End_Write; end Lector_Escritor Monitor;

78 Task Body Lector is loop Start_Read; Leer_Datos; End_Read; end Lector; Task Body Escritor is loop Start_Write; Escribir_Datos; End_Write; end Escritor;

79 #<( &!! Comer * Pensar #( 72 G 2 * 3 # 4* 2 4* 4*

80 (#% Tenedores: array(0..4) of Semaphore := (others=>1); Task body Filosofo is loop Pensar; Wait(Tenedores(i)); Wait(Tenedores(i+1) mod 5); Comer; Signal(Tenedores(i)); Signal(Tenedores(i+1) mod 5); end Filosofo;

81 T[0] T[1] T[2] T[3] T[4] a T[1] a T[2] a T[3] a T[4] a T[0]

82 (# % Mesa: Semaphore := 4; Tenedores: array(0..4) of Semaphore := (others=>1); Task body Filosofo is loop Pensar; Wait(Mesa); Wait(Tenedores(i)); Wait(Tenedores(i+1) mod 5); Comer; Signal(Tenedores(i)); Signal(Tenedores(i+1) mod 5); Signal(Mesa); end Filosofo;

83 # Monitor MTenedores Tenedores: array(0..4)of Integer range 0..2 (others)=>2; Listo: array (0..4) of Condition; Procedure Coger_Tenedor(I: Integer) is if Tenedores(I)<>2 then wait(listo(i)); end if; Tenedores((I+1) mod 5) := Tenedores((I+1) mod 5)-1; Tenedores((I-1) mod 5) := Tenedores((I-1) mod 5)-1; end Coger_Tenedor;

84 Procedure Dejar_Tenedor(I: Integer) is Tenedores((I+1) mod 5) := Tenedores((I+1) mod 5)+1; Tenedores((I-1) mod 5) := Tenedores((I-1) mod 5)+1; if Tenedores(I+1)=2 then send (Listo(I+1)); end if; if Tenedores(I-1)=2 then send (Listo(I-1)); end if; end Dejar_Tenedor; end MTenedores; Task body Filosofo is /*cinco entidades como esta*/ loop Pensar; Coger_Tenedor(I); Comer; Dejar_Tenedor(I); end Filosofo;

85 # Monitor MTenedores Estado: array(0..4)of (pensar, hambriento, comer); Listo: array (0..4) of Condition; Procedure Coger_Tenedor(I: Integer) is Begin Estado[I]:=hambriento; test(i); if Estado[i]<>comer then wait(listo[i]); end Coger_Tenedor; Procedure Dejar_Tenedor(I: Integer) is Estado[i]:=pensar; test(i-1 mod 5); test(i+1 mod 5); end Dejar_Tenedor;

86 Procedure test(k: Integer) is Begin if Estado[k-1 mod 5]<>comer and Estado[k]=hambriento and Estado[k+1 mod 5]<>comer then Estado[k]:=comer; send(listo[k]); end Coger_Tenedor; //codigo de inicialización For i:=1 to 5 Estado[i]:=pensar; end MTenedores;

87 ,# 6( ( # ' #& 2 ) " )! 0" *)

88 ,#) '' 3 7 2! * 1 */( // ( 0" *)

89 ,#) task Body Pi is loop Resto_Código_i; send(coordinador, solicitud); receive(coordinador, permiso); Sección_Crítica_i; send(coordinador, terminación); end Pi; 0" *)

90 ,#) A C H A C H ") "), " A C H H.'' ")

91 ,#'- +& # A9 9!99DC 9 " # " #2! P69Q P Q 0" *)

92 ,#'- +& 0" *)

93 ,#%,-G El proceso que desea ejecutar su sección crítica debe ganar una votación entre todos los demás Conjunto de procesos ={P1, P2,,Pn} distribuidos en N nodos comunicados entre sí Se preserva el orden de los mensajes, y el retardo de los mismo es finito. Todos los nodos están comunicados entre sí Para cada proceso Pi existe un conjunto de procesos Si contenido en. Es su distrito de votantes Pi siempre pertenece a Si Todos los distritos tienen igual número de votantes. Para cada i,j se satisface que Si Sjconjunto vacío 0" *)

94 ,#% -G i 1!! Si Bloqueado hasta recibir el voto de todos los procesos de Si Cuando un proceso de Si recibe una solicitud de voto contesta SÍ si aún no ha votado. Si ya ha votado (a otro proceso), retiene la respuesta El proceso Pi que ha ejecutado su sc informa a todos los procesos de Si que ya pueden votar a otros candidatos Exclusión mutua garantizada Pueden aparecer interbloqueos, pero se pueden prevenir 0" *)

95 ,#% -G boolean voto_dado:= false; Task body Pi is Begin loop Resto_Código_i for(pj in Si) send(pj, solicitud); for(pj in Si) receive(pj, voto); Sección_Crítica_i; for(pj in Si) send(pj, finalizada); end; End; 0" *)

96 Task body Receptor_Solicitudes_i is Begin loop receive(pj, solicitud); if(voto_dado) encolar(pj); else voto_dado:=true; send(pj, voto); end; end; End; 0" *)

97 Task body Emisor_Permisos is Begin loop if(cola_vacía) voto_dado:=false; else Pj:=desencolar(); send(pj, voto); end; end; End; 0" *)

98 ,#%,&+% G " #*"#% "! 3 ) #,! &2 7* & " * &'' &''*!(: &*!!1: ) 0" *)

99 ,#% 1 3! 1& () 7 2! (!1, *& & 1 ( 21

100 ,#" 1 EF '' 2 2 Task body Main_Process is loop Resto_De_Código; Choose_Sequence_Number;(*se pone a la cola*) Send_Request_to_Nodes; (*pide permiso a los demás*) Wait_for_reply; (*espera respuesta de todos*) Sección_Crítica; Reply_to_Deferred_Nodes;(*da permiso a otros*) end Main_Process; 0" *)

101 2 &(( (# Task body Request_Process is (*acepta solicitudes de otros*) loop accept Message; if Decide_to_Defer then Defer_reply; else Send_reply; end if; end Request_Process; 0" *)

102 2E*F ( 1'' ( # Task body Reply_Process is (*acepta respuesta de otros*) loop accept Message; Increment_Reply_count; if Last_Reply then Wake_Main_Process; end if; end Reply_Process; 0" *)

103 Los 3 procesos comparten las siguiente variables globales a nivel de nodo, las cuales informan sobre su estado. Number:Contiene el número de secuencia escogido por el nodo. High_Number:Mayor número de los recibidos. Para saltar la comparación si el nodo no desea competir por s.c. Requesting:flag indicador de si el nodo pide s.c. Reply_Count:Total de mensajes Reply recibidos. S:Semáforo para acceso en e.m. a variables globales. Wake_Up:Semáforo para suspender al proceso principal hasta que puede ejecutar su sección crítica. Deferred:Estructura de datos para indicar qué nodos tienen su respuesta diferida 0" *)

104 Number:Integer:=0; High_Number:Integer:=0; Requesting:Boolean:=False; Reply_Count:Integer:=0; S:Semaphore:=1; Wake_Up:Semaphore:=0; Deferred:array (1..N)of Boolean:=False; task type Main_Process is; task type Request_Process is entry Message (Num,ID:in Integer); end Request_Process; task type Reply_Process is entry Message; end Reply_Process; Main_Process: array (1..N) of Main_Process; Request_Process: array (1..N) of Request_Process; Reply_Process: array (1..N) of Reply_Process; 0" *)

105 , Procedure Choose_Number is; Wait(S); Requesting:=True; Number:=High_Number+1; Signal(S); end Choose_Number; Procedure Send_Request is; Reply_Count:=0; for J in 1..N loop if J<>I then Request_Process(J).Message(Number,I); end if; end Send_Request; Procedure Wait_for_Reply is; Wait(Wake_Up); end Wait_for_Reply; Procedure Reply_for_Deferred_Nodes is; Wait(S); Requesting:=False; Signal(S); for J in 1..N loop if Deferred (J) then Deferred:=False: Reply_Process(J).Message; end if; end Reply_for_Deferred_Nodes; 0" *)

106 ,Request_Process Task body Request_Process is Received_Number:Integer; Received_ID:Integer; Decide_to_Defer:Boolean; loop accept Message(Num,ID:in Integer) do Received_Num:=Num; Received_ID:=ID; end Message; High_Number:=Max(High_Number, Received_Num); Wait(S); Decide_to_Defer:=Requesting and (Number<Received_Num or (Number=Received_Num) and I<Received_ID); if Decide_to_Defer then Deferred(Received_ID):=True; end if; Signal(S); end Request_Process; 0" *)

107 ,Reply_Process "* # 3!)( '' Task body Reply_Process is loop accept Message; Reply_Count:=Reply_Count+1; if Reply_Count=N-1 then Signal (Wake_Up); end if; end Reply_Process; 0" *)

108 ,#) Algoritmo Mensajes por E/S Retardo en entrada Problemas Centralizado 3 2 Caída del coordinador Token-Ring 1 a 0 a n-1 Pérdida token Distribuido Puro 2(n-1) 2(n-1) Caída de proceso 0" *)

109 Terminación Distribuida: Definición * ) ( 4*( &4* & 2 4*7(! 4*I # " )* 0",#1L!* #

110 Terminación Distribuida: Generalidades Soporte de los algoritmos La terminación se produce cuando? Características algoritmos de terminación entidades distribuidas estruturadas en grafo canales de comunicación inter-nodo dirigidos canales libres de error mensajes llegan a destino en orden de envío puede haber ciclos y bidireccionalidad existe un nodo fuente sin ejes de entrada

111 Terminación Distribuida: Ejemplo de Grafo C H S R C ( ' 1 0",#1L!* #

Tema 4: Modelos Teóricos de Control de la Concurrencia

Tema 4: Modelos Teóricos de Control de la Concurrencia Tema 4: Modelos Teóricos de Control de la Concurrencia CONTENIDO: El Problema de la Exclusión Mutua Concepto de Sección Crítica Algoritmos de Espera Ocupada Semáforos. Protocolos de E. Mutua, Sincronización

Más detalles

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar MONITORES EN JAVA Un monitor es un objeto que implementa acceso bajo e.m. a todos sus métodos, y provee sincronización En Java, son objetos de una clase cuyos métodos públicos son todos synchronized Un

Más detalles

PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores

PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores PROGRAMACIÓN CONCURRENTE Tema 5 Monitores 1 Indice Definición de los monitores Sincronización condicional usando monitores Algunos problemas con monitores 2 Problemas de las regiones críticas condicionales

Más detalles

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia Concurrencia: deberes Concurrencia: Exclusión Mutua y Sincronización Capítulo 5 Comunicación entre procesos Compartir recursos Sincronización de múltiples procesos Asignación del tiempo de procesador Concurrencia

Más detalles

CDI Exclusión mutua a nivel alto. conceptos

CDI Exclusión mutua a nivel alto. conceptos conceptos El concepto de usar estructuras de datos a nivel alto libera al programador de los detalles de su implementación. El programador puede asumir que las operaciones están implementadas correctamente

Más detalles

El problema de los Filósofos

El problema de los Filósofos El problema de los Filósofos Problemas de Programación Concurrente Solución con Semáforos Para evitar una situación de interbloqueo se limita el número de filósofos en disposición de comer a 4. PROGRAM

Más detalles

Concurrencia: Exclusión mutua y Sincronización

Concurrencia: Exclusión mutua y Sincronización Concurrencia: Exclusión mutua y Sincronización Prof. Carlos Figueira Basado en materiales de Yudith Cardinale (USB) Williams Stallings, Eugene Styer Concurrencia Múltiples aplicaciones Aplicaciones estructuradas

Más detalles

Tema 3: Concurrencia de procesos

Tema 3: Concurrencia de procesos Tema 3: Concurrencia de procesos Yolanda Blanco Fernández [email protected] Concurrencia, Tiempo Real y Paralelismo Concurrencia: Convivencia de un conjunto de procesos en un mismo ordenador. Sistemas

Más detalles

Mensajes. Interbloqueo

Mensajes. Interbloqueo CONCURRENCIA DE PROCESOS Preparado por: Angel Chata Tintaya ([email protected]) Resumen Los procesos comparten variables globales, comparten y compiten por recursos, se ejecutan simultáneamente intercalándose

Más detalles

Concurrencia. Primitivas IPC con bloqueo

Concurrencia. Primitivas IPC con bloqueo Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región

Más detalles

Tema 3. Monitores Programación Concurrente

Tema 3. Monitores Programación Concurrente Tema 3. Monitores Programación Concurrente Depto. de Lenguajes y Sistemas Informáticos Universidad de Granada Contenidos 1. Concepto de Monitor 1.1. Fundamento teórico de los monitores 1.2. Sintaxis de

Más detalles

Implementación de monitores POSIX

Implementación de monitores POSIX Implementación de monitores POSIX Ampliación de Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Programación concurrente: Problemática Presencia de condiciones de

Más detalles

PROGRAMACION CONCURRENTE

PROGRAMACION CONCURRENTE PROGRAMACION CONCURRENTE II.4 Sincronización basada en memoria compartida: Regiones críticas J.M. Drake 1 Regiones críticas Son bloques de código que al ser declarados como regiones críticas respecto de

Más detalles

Sistemas Operativos Temas 4, 5 y 6. Jorge García Duque Despacho: B-202 Tutorías: Lunes 16:00-18:00 y Martes 16:00-20:00

Sistemas Operativos Temas 4, 5 y 6. Jorge García Duque Despacho: B-202 Tutorías: Lunes 16:00-18:00 y Martes 16:00-20:00 Sistemas Operativos Temas 4, 5 y 6 Jorge García Duque Despacho: B-202 Tutorías: Lunes 16:00-18:00 y Martes 16:00-20:00 Índice Tema 4: Herramientas de Sincronización de Alto Nivel. Regiones Críticas. Monitores.

Más detalles

un programa concurrente

un programa concurrente Introducción un programa concurrente asumimos que tengamos un programa concurrente que quiere realizar acciones con recursos: si los recursos de los diferentes procesos son diferentes no hay problema,

Más detalles

Programación Concurrente y Paralela. P(S) ; sección crítica P(S);

Programación Concurrente y Paralela. P(S) ; sección crítica P(S); 2.5.2 Monitores Los semáforos, a pesar de su sencillez de uso, son el equivalente a las instrucciones goto y el manejo de apuntadores en los lenguajes de programación imperativos: son muy susceptibles

Más detalles

Concurrencia entre Procesos.

Concurrencia entre Procesos. Concurrencia entre Procesos. Sistemas Operativos Tema 3. 1 Procesamiento concurrente. Procesamiento concurrente: base de los sistemas operativos modernos (multiprogramados): Un conjunto de procesos que

Más detalles

PROGRAMACION CONCURRENTE

PROGRAMACION CONCURRENTE PROGRAMACION CONCURRENTE II.3 Sincronización basada en memoria compartida: Semáforos J.M. Drake 1 Procesos concurrentes y memoria compartida. Si los diferentes procesos de un programa concurrente tienen

Más detalles

dit UPM Tema 3: Concurrencia /ejercicios Análisis y diseño de software José A. Mañas 3.4.2014 http://jungla.dit.upm.es/~pepe/doc/adsw/index.

dit UPM Tema 3: Concurrencia /ejercicios Análisis y diseño de software José A. Mañas 3.4.2014 http://jungla.dit.upm.es/~pepe/doc/adsw/index. Análisis y diseño de software dit UPM Tema 3: Concurrencia /ejercicios José A. Mañas http://jungla.dit.upm.es/~pepe/doc/adsw/index.html 3.4.2014 ejercicio 1.1 programar una cuenta bancaria compartida 1.

Más detalles

Práctica 2: El problema de la sección crítica

Práctica 2: El problema de la sección crítica Práctica 2: El problema de la sección crítica Programación de Sistemas Concurrentes y Distribuidos Grado de Ingeniería Informática Dpto. de Informática e Ingeniería de Sistemas, Escuela de Ingeniería y

Más detalles

Ingeniería Superior de Informática. Curso 3º. Sistemas Operativos. Examen Final. TEORÍA. 31 de Enero de 2005

Ingeniería Superior de Informática. Curso 3º. Sistemas Operativos. Examen Final. TEORÍA. 31 de Enero de 2005 Ingeniería Superior de Informática. Curso º. Sistemas Operativos. Examen Final. TEORÍA. de Enero de 005 Nombre: DNI:. ( puntos). La TFA es la tabla que, en UNIX, guarda los punteros de posición de cada

Más detalles

1 (2 5 puntos) Responda con brevedad y precisión a las siguientes preguntas:

1 (2 5 puntos) Responda con brevedad y precisión a las siguientes preguntas: Universidad de Las Palmas de Gran Canaria Escuela Universitaria de Informática Facultad de Informática Sistemas Operativos Examen parcial, 11 de mayo de 2002 SOLUCIONES Calificación 1 2 3 4 5 1 (2 5 puntos)

Más detalles

I.3. Interacción entre Procesos Concurrentes.

I.3. Interacción entre Procesos Concurrentes. PROGRAMACION CONCURRENTE I.3. Interacción entre Procesos Concurrentes. J.M. Drake 1 Interacción entre Procesos Concurrentes Modelos de interacción entre procesos. Problemas de sincronización y exclusión

Más detalles

SISTEMAS OPERATIVOS AVANZADOS

SISTEMAS OPERATIVOS AVANZADOS SISTEMAS OPERATIVOS AVANZADOS TEMA 3 CLAVE: MIS 204 PROFESOR: M.C. ALEJA DRO GUTIÉRREZ DÍAZ 3. PROCESOS CONCURRENTES 3.1 Conceptos de programación concurrente 3.2 El problema de la sección crítica 3.3

Más detalles

Sistemas Operativos. Características de la Multiprogramación. Interacción entre Procesos. Características de la Multiprogramación

Sistemas Operativos. Características de la Multiprogramación. Interacción entre Procesos. Características de la Multiprogramación Universidad Simón Bolívar Departamento de Electrónica y Circuitos EC3731 Arquitectura del Computador II Prof. Osberth De Castro Prof. Juan C. Regidor Sistemas Operativos Concurrencia y Sincronización de

Más detalles

PROGRAMACIÓN EN JAVA

PROGRAMACIÓN EN JAVA SISTEMAS INFORMÁTICOS INDUSTRIALES curso 2007-2008 PROGRAMACIÓN EN JAVA PRÁCTICA 3: Comunicación entre tareas. Modelo productor / consumidor. Objetivos Implementar una aplicación en Java en la que existan

Más detalles

1. Equivalencia de herramientas. Implemente las primitivas de las regiones críticas condicionales con semáforos. (2pt).

1. Equivalencia de herramientas. Implemente las primitivas de las regiones críticas condicionales con semáforos. (2pt). 1. Equivalencia de herramientas. Implemente las primitivas de las regiones críticas condicionales con semáforos. (2pt). La respuesta a esta pregunta se encuentra en el texto base de la asignatura em las

Más detalles

CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas

CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas 8 Comunicación y sincronización basada en variables compartidas...2 8.1 Exclusión mutua y condición de sincronización....2 8.2

Más detalles

Paso de mensajes. Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura. Filosofía cliente-servidor.

Paso de mensajes. Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura. Filosofía cliente-servidor. Paso de mensajes Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons

Más detalles

TEMA 5: Control de la Concurrencia en Java (API Estándar)

TEMA 5: Control de la Concurrencia en Java (API Estándar) TEMA 5: Control de la Concurrencia en Java (API Estándar) CONTENIDO Exclusión Mutua con código synchronized. Exclusión Mutua con métodos synchronized. Protocolos de Control de la Exclusión Mutua. Interbloqueos

Más detalles

Programación Concurrente en Java

Programación Concurrente en Java Hebras y monitores Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid 21 de marzo de 2006 Threads Extendiendo la clase java.lang.thread. public class PrThread extends

Más detalles

Multitarea en Java. Rafa Caballero - UCM

Multitarea en Java. Rafa Caballero - UCM Multitarea en Java Rafa Caballero - UCM Programa Monoproceso (monotarea) En cada momento hay una única instrucción ejecutándose Se dice que el programa es monotarea, o monoproceso o monohebra (o single

Más detalles

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. II.5 Sincronización basada en memoria compartida: Monitores

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. II.5 Sincronización basada en memoria compartida: Monitores PROGRAMACION CONCURRENTE Y DISTRIBUIDA II.5 Sincronización basada en memoria compartida: Monitores J.M. Drake 1 Monitor Son módulos que encierran los recursos o variables compartidas como componentes internos

Más detalles

Sistemas Operativos Práctica 4

Sistemas Operativos Práctica 4 Sistemas Operativos Práctica 4 Ing. Andrés Bustamante [email protected] Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que

Más detalles

Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software.

Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software. Junio 2008 Programación Concurrente 1/6 Normas Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software Este examen es un cuestionario

Más detalles

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática Fundamentos de la informática 2. Algoritmos, diagramas de flujo y pseudocódigo Contenido Algoritmos Diagramas de flujo

Más detalles

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente: (3 ptos) Memoria Compartida y Semáforos R/W 1. Objetivo En esta práctica se pretende crear una librería que dé la funcionalidad de un semáforo para resolver problemas con múltiples lectores y escritores

Más detalles

Secciones críticas y exclusión mutua

Secciones críticas y exclusión mutua Secciones críticas y exclusión mutua Lecturas: Andrews, secciones 3.1, 3.2, 3.3, 3.4 Ben-Ari, sección 2.2 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la

Más detalles

Solución Examen Febrero 2006

Solución Examen Febrero 2006 Solución Examen Febrero 2006 Lea detenidamente las siguientes instrucciones. No cumplir los requerimientos puede implicar la pérdida del examen. Formato Indique su nombre completo y número de cédula en

Más detalles

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos. Threads Un thread es un flujo de control secuencial dentro de un programa. A los threads también se los conoce como procesos livianos ó contextos de ejecución. Un thread es similar a un programa secuencial:

Más detalles

Programación Orientada a Eventos

Programación Orientada a Eventos Programación Orientada a Eventos Técnicas de Programación Santiago Pavón V:2012.03.13 Programas Secuénciales El flujo de ejecución del programa sigue la secuencia de sentencias que lo forman. El estado

Más detalles

Receta general para resolver problemas de sincronización con semáforos

Receta general para resolver problemas de sincronización con semáforos Receta general para resolver problemas de sincronización con semáforos La primera vez que te enfrentas a la tarea de implementar una solución a un problema de sincronización entre procesos, es normal que

Más detalles

Primitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA.

Primitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA. Primitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA. Carácterísticas: Construcción de alto nivel. Estructura de datos estática:

Más detalles

Procesadores de lenguaje Tema 5 Comprobación de tipos

Procesadores de lenguaje Tema 5 Comprobación de tipos Procesadores de lenguaje Tema 5 Comprobación de tipos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Sistemas de tipos. Expresiones de tipo. Equivalencia de tipos. Sobrecarga,

Más detalles

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid las RPC de Java. Parte I Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid de marzo de 006 RMI y RPC RPC: Remote Procedure Call. RMI y RPC RPC: Remote Procedure Call.

Más detalles

Mensajes. (versión preliminar)

Mensajes. (versión preliminar) Mensajes (versión preliminar) Ejemplo: productor/consumidor con buffer de tamaño 0 void produce(item *p_it); void consume(item *p_it); int nmain() { ntask cons= nemittask(consproc); ntask prod= nemittask(prodproc,

Más detalles

Examen Febrero de 2012

Examen Febrero de 2012 Examen Febrero de 2012 Lea detenidamente las siguientes instrucciones. No cumplir los requerimientos puede implicar la pérdida del examen. Formato Indique su nombre completo y número de cédula en cada

Más detalles

Examen escrito de Programación 1

Examen escrito de Programación 1 Examen escrito de Programación 1 Escuela de Ingeniería y Arquitectura Departamento de Informática e Ingeniería de Sistemas 2 de septiembre de 2015 Se debe disponer sobre la mesa en lugar visible un documento

Más detalles

4. Programación Paralela

4. Programación Paralela 4. Programación Paralela La necesidad que surge para resolver problemas que requieren tiempo elevado de cómputo origina lo que hoy se conoce como computación paralela. Mediante el uso concurrente de varios

Más detalles

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA PRACTICA 8 MONITORES BASADOS EN SEMÁFOROS

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

Semántica Denotacional

Semántica Denotacional Semántica Denotacional Idea: El significado de un programa es la función denotada por el programa Componentes del metalenguaje para la definición semántica denotacional de un L.P.: Dominios sintácticos

Más detalles

Benemérita Universidad Autónoma del Estado de Puebla

Benemérita Universidad Autónoma del Estado de Puebla Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Práctica de Laboratorio No. 5 Profr: María del Carmen Cerón Garnica Alumno: Roberto

Más detalles

Modulo 1 El lenguaje Java

Modulo 1 El lenguaje Java Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto

Más detalles

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES Introducción al tema a. Formar grupos de 4 personas b. Tomar una hoja en blanco y una lapicera o lápiz c. En la hoja en blanco diseña un

Más detalles

SIMM: TEORÍA DE LOS S.O. I.E.S. JUAN DE LA CIERVA CURSO 2007/2008

SIMM: TEORÍA DE LOS S.O. I.E.S. JUAN DE LA CIERVA CURSO 2007/2008 SIMM: TEORÍA DE LOS S.O. I.E.S. JUAN DE LA CIERVA CURSO 2007/2008 1.- INTRODUCCIÓN A LOS PROCESOS 1.1.- Concepto 1.2.- Composición y estructura 1.3.- Estados y transiciones 2.- COMUNICACIÓN ENTRE PROCESOS

Más detalles

Tema 2. El lenguaje de programación Java (Parte 1)

Tema 2. El lenguaje de programación Java (Parte 1) Programación en Java Tema 2. El lenguaje de programación Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Elementos del lenguaje (I) El juego de caracteres. No utiliza ASCII, sino Unicode de

Más detalles

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006 ARBOLES ESTRUCTURAS DE DATOS 2006 DEFINICION Un árbol (tree) es un conjunto finito de nodos. Es una estructura jerárquica aplicable sobre una colección de elementos u objetos llamados nodos; uno de los

Más detalles

2. Estructura de un programa en Java

2. Estructura de un programa en Java 24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador

Más detalles

Sincronización de Procesos

Sincronización de Procesos Sincronización de Procesos Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Sincronización de Procesos Fundamentos El Problema de la Sección Crítica Solución a la sección

Más detalles

1 HILOS (THREADS) EN JAVA

1 HILOS (THREADS) EN JAVA 1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los

Más detalles

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante) 1. : La clase Cuenta. Uso de la clase Cuenta 3. Métodos y objetos receptores de mensajes (Importante) 1 Una clase para cuentas de un banco Vamos a modelar con una clase, un nuevo tipo de datos, donde los

Más detalles

Contenido. Qué es el interbloqueo? Cómo prevenirlo? Cómo evitarlo? Cómo detectarlo? Interbloqueo. Cruce en un Puente. Qué es?

Contenido. Qué es el interbloqueo? Cómo prevenirlo? Cómo evitarlo? Cómo detectarlo? Interbloqueo. Cruce en un Puente. Qué es? Contenido Interbloqueo Qué es el? Cómo prevenirlo? Cómo evitarlo? Cómo detectarlo? Qué es? Bloqueo permanente de un conjunto de procesos que para terminar necesitan o bien los recursos del sistema, o bien

Más detalles

Algorítmica y Lenguajes de Programación. Ordenación (i)

Algorítmica y Lenguajes de Programación. Ordenación (i) Algorítmica y Lenguajes de Programación Ordenación (i) Ordenación. Introducción A lo largo del curso hemos visto distintas formas de almacenar datos: Vectores. Matrices. Ficheros Listas (pilas y colas)

Más detalles

Tema 4.- Pilas y Colas

Tema 4.- Pilas y Colas Apuntes elaborados por: Eduardo Quevedo, Raquel López y Aaron Asencio Revisado por: Javier Miranda el???? Tema 4.- Pilas y Colas Las pilas y colas son estructuras de datos que se utilizan generalmente

Más detalles

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009 Árboles Ejemplos de estructuras arborescentes: con forma de árbol Regla de Alcance: los objetos visibles en un procedimiento son aquellos declarados en él mismo o en cualquier ancestro de él (cualquier

Más detalles

1. Descripción y objetivos

1. Descripción y objetivos Pruebas 1 1. Descripción y objetivos Las pruebas son prácticas a realizar en diversos momentos de la vida del sistema de información para verificar: El correcto funcionamiento de los componentes del sistema.

Más detalles

Monitores. Implementación de un Buffer con monitores

Monitores. Implementación de un Buffer con monitores Monitores Los monitores corresponden a la segunda herramienta de sincronización que veremos en el curso. Se usan para garantizar la exclusión mutua en secciones críticas y para esperar la ocurrencia de

Más detalles

Benemérita Universidad Autónoma del Estado de Puebla

Benemérita Universidad Autónoma del Estado de Puebla Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Práctica de Laboratorio No. 4 Profr: María del Carmen Cerón Garnica Alumno: Roberto

Más detalles

Concurrencia en.net David Jesús Horat Flotats

Concurrencia en.net David Jesús Horat Flotats Concurrencia en.net David Jesús Horat Flotats ÍNDICE 1. Introducción n a.net 2. Sincronización n en.net 2.1 Contextos sincronizados 2.2 Método M Synchronized 2.3 Regiones de código c sincronizado 2.4 Sincronización

Más detalles

Programación Concurrente en Java

Programación Concurrente en Java Programación Concurrente en Java Curso 2006-2007 9/2/2007 Prog. Distribuida Bajo Internet Qué es la Programación Concurrente? Diseño basado en varias actividades independientes Conceptualmente se ejecutan

Más detalles

Comunicación y Sincronización con Monitores Resumen del Tema

Comunicación y Sincronización con Monitores Resumen del Tema Notas de clase de Programación Concurrente Comunicación y Sincronización con Monitores Resumen del Tema Dpto de Lenguajes y Ciencias de la Computación Universidad de Málaga María del Mar Gallardo Melgarejo

Más detalles

Práctica sobre compartición de instancias remotas.

Práctica sobre compartición de instancias remotas. Práctica sobre compartición de instancias remotas. Para esta práctica se ha construido un pequeño sistema cliente-servidor que permite la resolución de Sudokus entre varios jugadores. El servidor consta

Más detalles

Asignatura: Administración de Bases de Datos. Pedro P. Alarcón Cavero

Asignatura: Administración de Bases de Datos. Pedro P. Alarcón Cavero Ingeniería Técnica en Informática Escuela Universitaria de Informática Universidad Politécnica de Madrid Asignatura: Administración de Bases de Datos Tema 5: Proceso de Transacciones Pedro P. Alarcón Cavero

Más detalles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS 1 NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS Árboles Binarios y Árboles Binarios Ordenados 2 Contenido Árboles binarios Iteradores Árboles binarios ordenados 3 Árboles binarios Algunas definiciones para

Más detalles

Primer Parcial Septiembre 5 de 2009

Primer Parcial Septiembre 5 de 2009 Primer Parcial Septiembre 5 de 2009 Algoritmos y Lenguajes II Reglas del juego Tal como se le dijo antes, durante este examen usted no puede pedir ABSOLUTAMENTE nada prestado a sus compañeros, ni hablar

Más detalles

Programación Concurrente Recopilación de teoría referente a la materia

Programación Concurrente Recopilación de teoría referente a la materia UNIVERSIDAD AMERICANA Programación Concurrente Recopilación de teoría referente a la materia Ing. Luis Müller 2011 Esta es una recopilación de la teoría referente a la asignatura Programación Concurrente,

Más detalles

Concurrencia en Java

Concurrencia en Java Concurrencia en Java Herramientas proporcionadas por Java La Máquina Virtual (JVM) Pedro Pablo Gómez Martín La clase Thread Clase principal con la que conseguir concurrencia. La llamada a su método start()

Más detalles

Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales.

Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales. GRAFOS DE PRECEDENCIA Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales. Un arco de un nodo Si al nodo Sj significa que la sentencia Sj puede ejecutarse sólo cuando ha acabado

Más detalles

Java: Programación Multithread

Java: Programación Multithread Qué es un thread? Java: Programación Multithread Hasta el momento hemos desarrollado programas secuenciales con un único thread: en cualquier instante durante la ejecución de un programa hay un único punto

Más detalles

Repaso de las características más importantes de la programación Java y su adaptación a Android

Repaso de las características más importantes de la programación Java y su adaptación a Android Repaso de las características más importantes de la programación Java y su adaptación a Android 1. Entorno de programación en java 2. Variables y tipos de datos 3. Operaciones y operadores 4. Clases y

Más detalles

GENERACIÓN DE CÓDIGO

GENERACIÓN DE CÓDIGO GENERACIÓN DE CÓDIGO INTRODUCCION La generación de código es la fase más compleja de un compilador, puesto que no sólo depende de las características del lenguaje fuente sino también de contar con información

Más detalles

Una (muy) breve introducción a la teoría de la computación

Una (muy) breve introducción a la teoría de la computación Una (muy) breve introducción a la teoría de la computación Marcelo Arenas M. Arenas Una (muy) breve introducción a la teoría de la computación 1 / 48 Ciencia de la computación Cuál es el objeto de estudio

Más detalles

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras.

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras. Actividades de Divulgación del Centro Atómico Bariloche Qué hay detrás de un programa de computadora? Expositores: Daniela Arnica Pablo E. Argañaras División Mecánica Computacional Gerencia de Investigación

Más detalles

Árboles. Cursos Propedéuticos 2015. Dr. René Cumplido M. en C. Luis Rodríguez Flores

Árboles. Cursos Propedéuticos 2015. Dr. René Cumplido M. en C. Luis Rodríguez Flores Árboles Cursos Propedéuticos 2015 Dr. René Cumplido M. en C. Luis Rodríguez Flores Contenido de la sección Introducción Árbol genérico Definición y representación Árboles binarios Definición, implementación,

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción a Java LSUB. 15 de enero de 2015 GSYC Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Examen de Fundamentos de sistemas distribuidos

Examen de Fundamentos de sistemas distribuidos Examen de Fundamentos de sistemas distribuidos Tiempo total: 2 horas Problema: Programa: Rendezvous con semáforos(5 puntos) Utilizando como único mecanismo de sincronización los semáforos descritos en

Más detalles

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Dpto. de Ingeniería de Sistemas Telemáticos E.T.S.I. Telecomunicación Universidad Politécnica de Madrid FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Normas de examen: Con libros y apuntes Duración: 2 horas

Más detalles

Sincronización de Procesos. Módulo 6. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur. Sincronización de Procesos

Sincronización de Procesos. Módulo 6. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur. Sincronización de Procesos Sincronización de Procesos Módulo 6 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Sincronización de Procesos Fundamentos El Problema de la Sección Crítica La Solución

Más detalles

Capítulo IV. INTERBLOQUEO E INANICIÓN

Capítulo IV. INTERBLOQUEO E INANICIÓN Capítulo IV. INTERBLOQUEO E INANICIÓN Interbloqueo: [MAEKAMA] Se define como el bloqueo permanente de un conjunto de procesos que compiten por los recursos del sistema o bien se comunican unos con otros.

Más detalles

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES Características ARBOLES - CONCEPTOS Cada elemento del árbol se relaciona con cero o más elementos a quienes llama hijos. Si el árbol no

Más detalles

Examen final de CL 11 de Enero de 2012 Fecha de publicación de notas: 19-1-2012 Fecha de revisión: 20-1-2012

Examen final de CL 11 de Enero de 2012 Fecha de publicación de notas: 19-1-2012 Fecha de revisión: 20-1-2012 Examen final de CL 11 de Enero de 2012 Fecha de publicación de notas: 19-1-2012 Fecha de revisión: 20-1-2012 Sin apuntes. Tiemp: 3h. Nombre y Apellidos: Problema de analisis léxico, sintáctico e intérpretes

Más detalles

Manual del Protocolo XML-RPC de Mensajería Negocios

Manual del Protocolo XML-RPC de Mensajería Negocios Manual del Protocolo XML-RPC de Mensajería Negocios Índice de contenidos 1 INTRODUCCIÓN... 3 2 FUNCIONALIDADES DEL API DE COMUNICACIÓN XML-RPC... 4 2.1 Envío Libre... 4 2.2 Envío a Grupo de Contactos...

Más detalles

15. Arquitectura de los multiprocesadores. 16. Multiprocesadores de memoria compartida. 17. Multicomputadores.

15. Arquitectura de los multiprocesadores. 16. Multiprocesadores de memoria compartida. 17. Multicomputadores. UNIDAD TEMÁTICA 5: MULTIPROCESADORES. 15. Arquitectura de los multiprocesadores. 16. Multiprocesadores de memoria compartida. 17. Multicomputadores. 15-1 TEMA 15: ARQUITECTURA DE LOS MULTIPROCESADORES.

Más detalles

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Threads (hilos) Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Conceptos: Proceso (thread o hilo): es un programa en ejecución

Más detalles

Tema 4. Gestión de entrada/salida

Tema 4. Gestión de entrada/salida Tema 4. Gestión de entrada/salida 1. Principios de la gestión de E/S. 1.Problemática de los dispositivos de E/S. 2.Objetivos generales del software de E/S. 3.Principios hardware de E/S. 1. E/S controlada

Más detalles