concurrencia y distribucion´ · concurrencia y distribucion´ dr. arno formella universidad de...

63
Concurrencia y Distribuci´ on Dr. Arno Formella Universidad de Vigo Departamento de Inform´ atica ´ Area de Lenguajes y Sistemas Inform´ aticos E-32004 Ourense http://www.ei.uvigo.es/˜formella Email: [email protected] 3 de junio de 2002

Upload: others

Post on 01-May-2020

27 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

Concurrenciay Distrib ucion

Dr. Arno FormellaUniversidadde Vigo

Departamentode Inf ormaticaAr eadeLenguajesy SistemasInf ormaticos

E-32004Ourense

http://www.ei. uvi go.e s/ ˜f ormel la

Email: [email protected]

3 dejunio de2002

Page 2: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 2

Indice1. Curso 5

2. Objetivos 5

3. Sobre estedocumento 5

4. Intr oduccion 64.1. Aclaracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64.2. Procesos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64.3. Aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

4.3.1. Indicadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74.3.2. Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.3.3. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4.4. Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.5. Crıtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

5. Repaso:programacion secuencial 10

6. Primer algoritmo concurrente 11

7. Ar quitecturas quesoportan la concurrencia 12

8. Comunicacion y sincronizacion 13

9. Abstraccion 159.1. Instruccionesatomicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159.2. Funcionamientocorrecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159.3. Regionescrıticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

10.Exclusion mutua a nivel bajo 1610.1.Algoritmo deDekker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

10.1.1. Primerintento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710.1.2. Segundointento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710.1.3. Tercerintento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1810.1.4. Cuartointento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1810.1.5. Quintointento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

10.2.Algoritmo dela panaderıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1910.3.Algoritmo dePeterson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1910.4.Ayudaconhardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

10.4.1. Test-and-set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2010.4.2. multi-prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

11.Propriedadesde programasconcurrentes 2011.1.Seguridady vivacidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2011.2.Justiciaentreprocesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

12.Exclusion mutua a nivel alto 2212.1.Semaforos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2212.2.Regionescrıticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2412.3.Regionescrıticascondicionales. . . . . . . . . . . . . . . . . . . . . . . . . . 24

Page 3: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 3

12.4.Monitores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

13.Problemadel productor y consumidor 26

14.Bloqueo 2714.1.Detectary actuar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2814.2.Evitar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2814.3.Prevenir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

15.Patronesdediseno para aplicacionesconcurrentes 2915.1.Reactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3015.2.Proactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3115.3.Fichadeterminacionasıncrona. . . . . . . . . . . . . . . . . . . . . . . . . . 3215.4.Aceptor-Conector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3315.5.Guardian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3415.6.Interfazseguraparamulti-hilos . . . . . . . . . . . . . . . . . . . . . . . . . . 3515.7.Avisodehecho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3615.8.Objetosactivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3715.9.Monitores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3815.10.Mitad-sıncrono,mitadasıncrono . . . . . . . . . . . . . . . . . . . . . . . . . 3915.11.Lıder-y-Seguidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

16.Java 4116.1.Hilos deJava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4116.2.RepasodeJava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

16.2.1. Clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4416.2.2. Modificadoresdeclases . . . . . . . . . . . . . . . . . . . . . . . . . 4416.2.3. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4516.2.4. Tipossimples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4516.2.5. Modificadoresdemiembros . . . . . . . . . . . . . . . . . . . . . . . 4516.2.6. Estructurasdecontrol . . . . . . . . . . . . . . . . . . . . . . . . . . 4716.2.7. Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4716.2.8. Palabrasreservadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4816.2.9. Objetosy referenciasaobjetos. . . . . . . . . . . . . . . . . . . . . . 4816.2.10.Parametros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4916.2.11.Valoresderetorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4916.2.12.Arreglos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5016.2.13.this andsuper . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5016.2.14.Extenderclases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5016.2.15.Clasesdentrodeclases. . . . . . . . . . . . . . . . . . . . . . . . . . 5116.2.16.Claseslocales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5116.2.17.La claseObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5116.2.18.Clonarobjetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5216.2.19.Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5216.2.20.Clasesy paquetes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5316.2.21.Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5316.2.22.Paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5416.2.23.Conversionaflujosdebytes . . . . . . . . . . . . . . . . . . . . . . . 54

16.3.Reflexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5516.4.Hilos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

16.4.1. Crearun hilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

Page 4: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 4

16.4.2. La interfazRunnable . . . . . . . . . . . . . . . . . . . . . . . . . . 5516.4.3. Sincronizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5716.4.4. Objetossıncronos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5816.4.5. Los monitoresdeJava . . . . . . . . . . . . . . . . . . . . . . . . . . 58

16.5.Javay seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5816.6.AtomicidadenJava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

17.Concurrenciaenmemoria distrib uida 5817.1.Pasodemensajes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

17.1.1. Tiposdesincronizacion . . . . . . . . . . . . . . . . . . . . . . . . . 5917.1.2. Identificacion del otro lado . . . . . . . . . . . . . . . . . . . . . . . . 5917.1.3. Prioridades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

18.Terminacion deprogramas 6018.1.Deteccion determinacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

19.Tareasde programacion 61

20.Bibliograf ıa 63

Page 5: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 5

1. Curso

Teorıa: los lunes,16-18horas,Aula 3.2Practicas: dosgrupos,los lunes19-21horasy losviernes16-18horas,

Lab. 30-BAsignaturasvecinas: todo sobre programacion, sistemas operativos, proce-

samientoparalelo,sistemasde tiemporeal,diseno desoft-ware

Prerequisitos: Java,C, programacionsecuencialExamen: escrito,final del curso,teorıa y practicajuntosCreditos: 6Literatura: mira Bibliografıa (Section20)

2. Objetiv os

conocerlosprincipiosy lasmetodologıasdela programacion concurrentey distribuida

conocerlasprincipalesdificultadesenrealizarprogramasconcurrentesy distribuidos

conocerherramientasexistentesparaafrontarla tareadela programacion concurrenteydistribuida

conocerel conceptodeconcurrenciaenJava

3. Sobre este documento

Estedocumentocrecera duranteel curso,ojo, nonecesariamentesolamenteal final.

Losejemplosdeprogramasy algoritmosseraneningles.

Usodecodigodecoloresenestedocumento:

algoritmo

codigofuente

Page 6: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 6

4. Intr oducci on

No existeunaclaradefiniciondeprogramacionconcurrenteenla literatura.No sepuedesepararfacilmenteel terminoprogramacionconcurrentedel terminoprogramacionenparalelo.

4.1. Aclaraci on

Unatendenciasegunmi opiniones:

la programacionconcurrentesededicamasadesarrollar y aplicar conceptosparael usoderecursosenparalelo

la programcionenparalelosededicamasasolucionary analizarproblemasbajoel con-ceptodel usoderecursosenparalelo

Otraposibilidaddesepararlos terminoses:

unprogramaconcurrentedefinelasaccionesquesepuedenejecutarsimultaneamente

un programaparaleloesun programaconcurrentedisenadode estarejecutadoen hard-wareparalelo

unprogramadistribuidoesunprogramaparalelodisenadodeestarejecutadoenhardwaredistribuido,esdecir, dondevariosprocesadoresno tenganmemoriacompartida

Intuitivamente,todostenemosunaideabasicadelo quesignificael conceptodeconcurrencia.

Ejemplo:

sumamosalgunosnumeros

si lo haceunosolo...

si lo hacemosjuntos...

4.2. Procesos

Es decir, subdividimos la tareaen trozosque se puedenresolver en paralelo.Dichos trozosllamamosprocesos. Esdecir, un proceso(ennuestrocontexto) es

unasecuenciadeinstruccioneso sentenciasque

seejecutansecuencialmenteenunprocesador

Page 7: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 7

En la literatura,sobretodoenel ambitodesistemasoperativos,existentambien los conceptosde hilos (“threads”)y de tareas(“tasks” o “jobs”) quesonparecidosal conceptode proceso,aun quesedistinguenenvariosaspectos.En nuestrocontexto novamosadiferenciarlos.

Solodestacamosel conceptodehilo queseusacasisiempreenla programacion moderna.Unprogramamulti-hilo intercalavariassecuenciasdeinstruccionesqueusanlos mismosrecursosbajoel techodeun solo procesoenel sentidodeunidaddecontroldel sistemaoperativo, quenosedebeconfundirconnuestroconceptoabstractodeproceso.

Un programasecuencialconsisteenunsoloproceso.

En un programaconcurrentetrabajaun conjuntode procesosen paralelolos cualescooperanpararesolverun problema.

4.3. Aplicaci on

¿Cuandoseusanprogramasconcurrentes?

cuandonosde la gana,lo principales:solucionarel problema, y

cuandolos recursoslo permitany cuandoprometenunprovecho,lo principales:conocerlasposibilidadesy herramientas

4.3.1. Indicadores

¿Cualessonindicadoresquesugierenunprogramaconcurrente?

el problemaconsistedeformanaturalengestionareventos

el problemaconsisteen proporcionarun alto nivel de disponibilidad,es decir, nuevoseventosrecienllegadosrequierenunarespuestarapida(disponibilidad,“availability”)

el problemaexigeun altonivel decontrol,esdecir, sequiereterminaro suspendertareasunavezempezadas(controlabilidad,“controllability”)

el problematienequecumplir restriccionestemporales

el problemarequierequevariastareasseejecutan(casi)simultaneamente(programacionreactiva,“reactiveprogramming”)

sequiereejecutarun programamasrapidoy los recursosestandisponibles(explotaciondelparalelismo,“Exploytationof parallelism”)

el problemaconsisteensimularobjetosrealesconsuscomportamientosy interaccionesindeterminısticos(objetosactivos,“activeobjects”)

Eso implica que hay que tomar decisionesque tipo y que numerode procesosse usay enquemaneradebeninteractuar.

Page 8: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 8

4.3.2.�

Recur sos

Entrootros,posiblesrecursosson

procesadores

memoria

dispositivosperifericos(p.e.,impresoras,lıneastelefonicas)sobretodo de entraday desalida

estructurasdedatosconsuscontenidos

4.3.3. Ejemplos

Existenejemplosdeproblemasqueporsunaturalezadebendisenarsecomoprogramasconcur-rentes:

sistemasoperativos

� soportaroperacionescasi-paralelas� proveerserviciosavariosusuariosa la vez(sistemasmulti-usuario,sin largostiem-

posdeespera)� gestionarrecursoscompartidos(p.e.,sistemasdeficheros)� reaccionaraeventosno predeterminados

sistemasdetiemporeal

� necesidaddecumplir restriccionestemporales� reaccionaraeventosno predeterminados

sistemasdesimulacion

� el sistemapor simularyadisponedemodulosquefuncionanenformaconcurrente� el flujo delcontrolnosigueun patronsecuencial

sistemadereservasy compra(“bookingsystems”)

� lasaplicacionesseejecutanendiferenteslugares

sistemasdetransacciones

� setienequeesperarla terminacion deunatransaccion antesdeponerenmarchalasiguiente

� variastransaccionesen esperapuedencompartirpor serejecutadocon diferentesprioridades

controladoresdetraficoaereo

� el sistematienequeestimarel futuroproximosinperderla capacidaddereaccionarrapidamenteacambiosbruscos

Page 9: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 9

sistemasdecomunicacion

� la interfazal usuariorequiereunaltonivel dedisponibilidady controlabilidad� enla epocadela comunicaciondigital, todosqueremosusarla red(o bienalambrica

o bieninalambrica)al mismotiemposin notarquehabra masgenteconlasmismasambiciones

sistemastolerantesa fallos

� sevigila deformaconcurrenteel funcionamientocorrectodeotraaplicacion

juegosdistribuidos

En particular, resultara escencialel desarrollode un programaconcurrentecuandola concur-renciadeactivadesesunaspectointernodel problemaaresolver.

Programadoresmodernostienenque sabercomo escribir programasque manejanmultiplesprocesos.

4.4. Implementaci on

Nos enfocamossolamentea programasescritosen lenguajesimperativos con concurrencia,comunicaciony sincronizacionexplıcita.

Comocualquierotratareadeprogramacionnosenfrentamosa losproblemasde

la especificacion delprograma,

el diseno delprograma,

la codificacion del programa,y

la verificacion del programa.

4.5. Crıtica

Entrelasventajasdela programacionconcurrentesesuelenencontrar

mejorrendimiento,esdecir, seespera

� queel programaseejecutemasrapido� queel programauselosrecursosdemejormanera,p.e.,nodejerecursosdisponibles

sinusardurantemuchotiempo� queel programasedesarrollemasfacilmente� queel programareflejeel modelodel problemareal

Sin embargo, tambienexistendesventajas:

sepierdetiempoensincronizarprocesosy comunicardatosentreellos

Page 10: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 10

en el casode multiplexacion de procesos/hilossepierdetiempoen salvar informacionsobreel contexto

los procesospuedenesperara accionesdeotrosprocesos,esopuederesultarenun blo-queo(“deadlock”)de algun proceso,en el peorcasosedarıa comoresultadoqueno seprodujeraningunprogresoenel programa

hayquebuscarestrategiaseficientesparadistribuir el trabajoentrelos diferentesproce-sadores(“efficient loadbalancing”)

hayquebuscarestrategiaseficientesparadistribuir los datosentrelos diferentesproce-sadores(“efficient datadistribution”)

enmuchassituacioneshayquebuscaruncompromisoentretiempodeejecuciony usoderecursos

el desarrollode programasconcurrenteses muchomas complejoque el desarrollodeprogramassecuenciales

la depuracion de programasconcurrentesesmuydifıcil, (por esovale la penade man-tenerunaestrictadisciplinaenel desarrollodeprogramasconcurrentesy basarla imple-mentacionenpatronesdedisenobienestudiados)

5. Repaso: programaci on secuencial

Asumimosquetengamossolamentelasoperacionesaritmeticassumary subtraerdisponiblesyqueremosmultiplicardosnumerospositivos.

Un posiblealgoritmosequencialquemultiplica el numerop conel numeroq produciendoelresultador es:

Initially: p is set to positive numberq is set to positive number

a: set r to 0b: loopc: if q equal 0 exitd: set r to r+pe: set q to q-1f: endloopg: ...

¿Comosecompruebasi el algoritmoescorrecto?

Primerotenemosquedecirquesignificacorrecto.

El algoritmo(secuencial)escorrectosi

unavezsellegaa la instruccion g: el valor de la variabler contieneel productodelosvaloresdelasvariablesp y q (serefiereasusvaloresquehanllegadoala instrucciona: )

Page 11: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 11

sellegaa la instrucciong: enalgunmomento

Tenemosquesaberquelasinstruccionesatomicassoncorrectos,esdecir, sabemosexactamentesusignificado,incluyendotodoslosefectossegundariosposibles.

Luegousamosel conceptodeinduccionparacomprobarel bucle.

6. Primer algoritmo concurrente

Initially: p is set to positive numberq is set to positive number

a: set r to 0P0 P1

b: loop loopc: if q equal 0 exit if q equal 0 exitd: set r to r+p set r to r+pe: set q to q-1 set q to q-1f: endloop endloopg: ...

El algoritmoesindeterminısticoenel sentidoqueno sesabedeantemanoenque ordensevanaejecutarlasinstrucciones,o maspreciso,comosevana intercalarlasinstruccionesdeambosprocesos.

En estemomentoanotamosqueparaun algoritmoconcurrentelassiguientespropriedadessonescenciales:

seguridad: nuncapasanadamalo,esdecir, unaciertacondicion secumplesiempre(“safetyproperty”)

vivacidad: avecespasaalgobueno,esdecir, al fin y al cabopasaalgoo enalgunmomentoenel futuro secumpleunaciertacondicion (“li venessproperty”)

El indeterminismopuedeprovocarsituacionesquederivenen errorestransitorios,esdecir, elfallo ocurresolamentesi lasinstruccionesseejecutanenunordenespecıfico.

Ejemplo: multiplicacion

Un programaconcurrenteescorrectosi el resultadoobservado(y esperado)no dependedelorden(dentrodetodoslosposiblesordenes)enel cualseejecutelasinstrucciones.

Paracomprobarsi unprogramaconcurrenteesincorrectobastaconencontrarunaintercalaciondeinstruccionesquenosllevaenun fallo.

Paracomprobarsi un programaconcurrenteescorrectohayquecomprobarqueno seproduceningun fallo enningunadelasintercalacionesposibles.

Page 12: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 12

El numerodeposiblesintercalacionesdelos procesosenun programaconcurrentecreceexpo-nencialmenteconel numerodeunidadesquemanejael planificador. Poresoespracticamenteimposiblecomprobarcon la meraenumeracion si un programaconcurrenteescorrectobajotodaslasejecucionesposibles.

En la argumentacion hastaahorafue muy importanteque las instruccionesse ejecutarandeformaatomica,esdecir, sin interrupcionninguna.

Porejemplo,seobservaunagrandiferenciasi el procesadortrabajadirectamenteenmemoriaosi trabajaconregistros:

P1: inc NP2: inc N

P2: inc NP1: inc N

Seobserva: lasdosintercalacionesposiblesproducenel resultadocorrecto.

P1: load R1,NP2: load R2,NP1: inc R1P2: inc R2P1: store R1,NP2: store R2,N

Esdecir, existeunaintercalacionqueproduceunresultadofalso.

Esoimplica directamente:no sepuedeconvertir un programamulti-hilo en un programadis-tribuidosinanalizarel conceptodememoriacomundetenidamente.

7. Arquitecturas que sopor tan la concurrencia

Sesueledistinguirconcurrencia

degranofinoesdecir, seaprovechadela ejecuciondeoperacionesconcurrentesal nivel delprocesador(hardware)

degranogruesoes decir, se aprovechade la ejecucion de procesoso aplicacionesal nivel del sistemaoperativo o al nivel dela reddeordenadores

Entreambosextremoscabenmuchosgranosintermedios.

Unaclasificacion clasicadeordenadoresparaleloses:

Page 13: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 13

SIMD (singleinstructionmultipledata)

MISD (multiple instructionsingledata)

MIMD (multiple instructionmultipledata)

Nohacefaltaquelosprocesosseejecutannecesariamenteenhardwaredistinto(multi-programaciono “multi-programming”).Sepuedeaprovecharde la posibilidadde multiplexar variosproce-sosen un solo procesador(multi-procesamientoo “multi-processing”).El sistemaoperativo(muchasvecescon la ayudade hardware especıfico) realizala ejecucion de variosprocesosdeformacuasi-paralelodistribuyendoel tiempodisponiblea lassecuenciasdiferentes(“time-sharingsystem”).

En estecasoesimprecindibleparael analisisdel programaqueel mecanismodeconmutacionseaindependientedel programaconcurrente,aunquetomelas decisionesa partir de las apli-caciones.En el casocontrariohay que incluir dicho mecanismoen el analisis del programaconcurrente.Al desarrollarunprogramaconcurrente,nosedebeasumirninguncomportamien-to especıfico delplanificador(siendola unidadquerealizala conmutaciondelosprocesos).

Ejemplo: Ya vimosquesi seasumeunaintercalacion perfecta,el algoritmodemultiplicacionresultacorrecto.

Existenmuchostipos de arquitecturasde ordenadores.Algunassondisenadasespecialmenteparala ejecucion deprogramasconcurrenteso paralelos(p.ej. los proyectosNYU, SB-PRAM,o Tera).

Sin embargo,no hacefaltaqueseejecuteel programaenunidadessimilaresparaobtenercon-currencia.La concurrenciaesta presentetambien en sistemasheterogenos,p.e.,aquellosquesolapanel trabajodeentraday salidaconel restodelastareas(discosduros).

La comunicacion y sincronizacion (Section8) entreprocesosfuncionamedianteunamemoriacomun (“sharedmemory”) a la cual puedenaccedertodoslos procesadoresa la vez o me-dianteel intercambiode mensajesusandouna red conectandolos diferentesprocesadoresuordenadores(“distributedprocessing”).

Siemprehacefaltauntipo dememoriacomunpararealizarla comunicacionentreprocesos,so-lamentequeenalgunoscasosdichamemorianoestaaccesibleenformadirectaal programador.

Tambien existen mezclasde todo tipo de estosconceptos,p.e., un sistemaque use multi-procesamientocon hilos y procesosen cadaprocesadorde un sistemadistribuido simulandounamemoriacomunal nivel dela aplicacion.

8. Comunicaci on y sincr onizaci on

Programasconcurrentesnecesitanalgun tipo decomunicacion entrelos procesos.Hay dosra-zonesprincipales:

1. losprocesoscompitenparaobteneraccesoa recursoscompartidos,

Page 14: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 14

2.� losprocesosquierenintercambiardatos.

Lasherramientasdeprogramacionsuelenproporcionarsolamenteunadelasdosposibilidades.

Enamboscasoshacefaltaunmetododesincronizacionentrelosprocesosquequierencomuni-carseentreellos.Al nivel delprogramadorexistentresvariantescomorealizarlasinteraccionesentreprocesos:

1. usarmemoriacompartida,

2. mandarmensajes,

3. lanzarprocedimientosremotos.

Con la sincronizacion condicionalseprotege un objeto (p.e,un trozo de memoria)paraqueningunotroprocesopuedeaccederel objetohastaqueesteseencuentreenunestadopermitido.

Losobjetivosrequeridosparala sincronizaciondeprocesossonnormalmente:

exclusionmutua

nobloqueo

noesperainnecesaria

justo

La comunicacionnotienequesersıncronaentodosloscasos.Existetambienla formaasıncronadondeun procesodejasumensajeenunaestructuradedatoscompartidapor los procesos.Elprocesoquehamandadolos datospuedeseguir conotrastareas.El procesoquedebeleer losdatoslo haceensumomento.

Unacomunicacionentreprocesospuedesernofiableentodoslossistemas,existenvariasposi-bilidadesdefallos:

1. sepierdenmensajes

2. secambiael ordendelosmensajes

3. semodificanmensajes

4. seanadenmensajesquenuncafueronmandados

Existentecnicasparasuperarlosproblemas:

1. protocoloderecepcion (‘?Cuandosesabequehayallegadoel ultimo mensaje?)

2. enumeraciondelosmensajes

3. usodecodigodecorrecion (CRC)

4. protocolodeautentificacion

Page 15: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 15

9. Abstracci on

Un programaconcurrentesepuedevercomounconjuntode

procesosqueconsistenensecuenciasdeinstruccionesatomicas(Section9.1)

cuyotiempodeejecucion esindivisibley finito y

hastaquenosequierahacerunaestimaciondel tiemporealnoseasumenadasobredichotiempofinito y finalmente.

No se puedeasumirde antemanoningunainformacion sobreel tiempo de ejecucion de unproceso(especialmenterelativo respetoa otros procesos).Desdeel punto de vista abstractono importasi los procesosseejecutanenunidadesindependienteso si algun planificadordis-tribuyelosprocesosmultiplexandounsoloprocesador. Detodasmaneras,lascaracterısticasdelplanificadordelsistemano tienenpor queserconocidaspor el programador.

9.1. Instrucciones atomicas

Se considerainstruccionesatomicasaquellasque esta garantizadosu correctocumplimentoindependientementodeotrasinstruccionesposiblementeejecutadassimultaneamenteenel pro-grama.A vecestambiennosreferimosa instruccionesatomicascuandoel procesadorescapazdevolveral estadoproducidojustamenteantesdehaberempezadola ejecuciondela instruccionenel casodequeseproduzcaunainterrupcion,esdecir, el efectodela instruccionesnulo.

Denotamosla secuenciadeinstruccionesatomicasdel programacomo ��������� �������������� .Un algoritmo secuencialimponeun ordentotal en el conjuntode las instruccionesque es-tablecemientrasun algoritmoconcurrentesolamenteespecificaun ordenparcial.Esosepuedevisualizarcongrafos:losnodosrepresentanlasinstruccionesatomicas,lasaristasindicansi unainstrucciondebeseguir la otra.

Aquı debe venir figura seqorden.ps

Aquı debe venir figura conorden.ps

Eso implica que la ejecucion del programaes indeterminıstica.Ejecutarel mismoprogramavariasveces,aun con los mismosdatosde entrada,puederesultaren secuenciasde instruc-cionesdiferentes,inclusopuedeocurrir queesimposibledetectarenqueordenseejecutanlasinstruccionesenun casoreal.

9.2. Funcionamiento correcto

Generalmentesedicequeunprogramaescorrectosi dadounaentradael programaproducelosresultadosdeseados.

Masformalmente:

Page 16: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 16

Sea ������� una propriedadde una variable � de entrada(aquı el sımbolo � refleja cualquierconjuntodevariablesdeentradas).Sea���������� unapropriedaddeunavariable � deentradaydeunavariable� desalida.

Sedefinedostiposdefuncionamientocorrectodeun programa:

funcionamientocorrectoparcial: dadounaentrada� , si ������� esverdadero,y si selanzaelprogramacon la entrada� , entoncessi el programaterminahabra calculado y �!���"�# �tambienesverdadero.

funcionamientocorrectototal: dadouna entrada� , si ������� es verdadero,y si se lanzaelprogramaconla entrada� , entoncesel programaterminay habracalculado con �!���"�# �siendotambienverdadero.

Sedistinguelos doscasossobretodoporqueel problemasi un programa,dadounaentrada,separano escalculable.

Para un programasecuencialexiste solamenteun ordentotal de las instruccionesatomicas,mientrasqueparaunprogramaconcurrentepuedanexistir variosordenes.

Aquı debe venir figura condifor.ps

Poresosetienequeexigir:

funcionamientocorrectoconcurrente: un programaconcurrentefuncionacorrectamentesiel resultado���������� no dependedel ordende las instruccionesatomicasentretodoslosordenesposibles.

9.3. Regiones cr ıticas

Una region crıtica esunasecuenciade instruccionesqueno debeser interrumpidapor otrosprocesos,esdecir, sedebetratarunaregioncrıtica comounasolainstruccionatomica.

No essuficientequelos recursosusadosenunaregion crıtica no debanseralteradospor otrosprocesos,porqueesposiblequesuvaloro contenidoenel momentodelecturanoseanvalidos;puedeserqueestenenunestadotransitorio.Sinembargo,si losaccesosconcurrentessolamenteleenpuedenestarpermitidos(massobreel temaveremosmasadelante).

Apuntamosregionescrıticascon $�%��������$'& .

Normalmenteseprotegeen los lenguajesdeprogramacion solamenteel codigodirectamente,losdatosestanprotegidosindirectamentepor sucodigodeacceso.

Por ejemplo,en Java no sepuededeclararunaclasecomosynchronized , sino solamentesusmetodos.Esorequieremuchadisciplinapor partedel programadoren cuantoa accederalasvariablescrıticassolamenteconmetodosadecuados.

10. Exclusi on mutua a nivel bajo

Page 17: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 17

Paraevitar el accesoconcurrentea recursoscompartidoshacefalta instalarun mecanismodecontrol.

Un metodoesusarun tipo decerrojo(“lock”). Si un procesoquiereusarel recurso,mira si elcerrojoesta abierto,si lo esta, cierrael cerrojoy usael recurso.Unavezhaterminado,abreelcerrojodenuevo. Si estacerradoel cerrojo,tienequeesperaro dedicarseaotracosaquequedeporhacer.

Denotamosel recursoconunavariable$ (quepuedeser, p.e.,unaimpresorao un ficheroo unaestructuradedatos(colao lista)).

Mientrasun procesoesta accediendoal recurso$ ningun otro procesodebeinterferir (especi-ficamosmasadelanteeste‘interferir’ de modomaspreciso).El problemamasgrandeocurrecuandodosprocesosintentanmodificarel estadodel recursoal mismotiempo.

En otraspalabras,el procesoesta ejecutandounaregion crıtica queusael recurso$ y todoslosdemasprocesosdebenestarexcluidos.

Desarrollodel algoritmodeDekkery Peterson

10.1. Algoritmo de Dekker

Intentamoscontrolarun solorecurso$ quequierenusardosprocesos�)( y �+* .

10.1.1. Primer intento

Usamosunavariablev quenosindicaracualdelosdosprocesostienesuturno.

P0 P1a: loop loopb: non-critical section non-critical sectionc: wait until v equals P0 wait until v equals P1d: critical section using r critical section using re: set v to P1 set v to P0f: endloop endloop

Obviamente,losprocesospuedenaccederal recursosolamentealternativamente.

Si unprocesosetermina,el otropuederesultarbloqueado.

10.1.2. Segundo intento

Usamosparacadaprocesounavariablev0 respectivamentev1 queindicasi el correspondienteprocesoestausandoel recurso.

P0 P1non-critical section non-critical sectionwait until v1 equals false wait until v0 equals falseset v0 to true set v1 to truecritical section using r critical section using rset v0 to false set v1 to false

Page 18: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 18

Yanoexistela situaciondeposiblebloqueo.

Sin embargo: el algoritmono esta seguro,porquelos dosprocesospuedenalcanzarsusseccionescrıticassimultaneamente.

El problemaestaescondidoenel usodelasvariablesdecontrol.v0 sedebecambiaraverdaderosolamentesi v1 siguesiendofalso.

10.1.3. Tercer intento

Cambiamosel lugardondesemodificala variabledecontrol:

P0 P1non-critical section non-critical sectionset v0 to true set v1 to truewait until v1 equals false wait until v0 equals falsecritical section using r critical section using rset v0 to false set v1 to false

Estagarantizadoquenoentrenambosprocesosal mismotiempoensusseccionescrıticas.

Perosebloqueanmutuamenteencasoquelo intentansimultaneamente.

10.1.4. Cuar to intento

P0 P1non-critical section non-critical sectionset v0 to true set v1 to truerepeat repeat

set v0 to false set v1 to falseset v0 to true set v1 to true

until v1 equals false until v0 equals falsecritical section using r critical section using rset v0 to false set v1 to false

starvation:un procesoo unosprocesossiguenconsutrabajoperootrosnuncallegana utilizarlos recursos

livelock:esunavariantedebloqueo:losprocesoshacenalgoperono lleganahaceralgoutil

10.1.5. Quinto intento

1968

Al final obtenemosconel quintointentoel algoritmodeDekker:

Page 19: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 19

Initially:, v0 is equal falsev1 is equal falsev is equal P0 o P1

P0 P1non-critical section non-critical sectionset v0 to true set v1 to truerepeat repeat

if v equals P1 if v equals P0set v0 to false set v1 to falsewait until v equals P0 wait until v equals P1set v0 to true set v1 to true

fi fiuntil v1 equals false until v0 equals falsecritical section using r critical section using rset v0 to false set v1 to falseset v to P1 set v to P0

El algoritmode Dekker resuelve el problemade exclusion mutuaen el casode dosprocesos(conmemoriacomun).

Existenalgoritmosqueresuelvenel problemapara - procesos,p.ej.,el algoritmodeLambert(algoritmodela panaderıa),o el algoritmodePeterson.

10.2. Algoritmo de la panader ıa

Algoritmo:

cadaprocesotira un ticket (queestanordenadosenordenascendente)

cadaprocesoesperahastaquesuvalor del ticket seael mınimo entrotodoslos procesosesperando

el procesoconel valormınimoaccedela regioncrıtica

Observaciones:

senecesitaun cerrojoparaaccedera los tickets

el numerodeticketsno tienelımite

losprocesostienenquecomprobarcontinuadamentetodoslos ticketsdetodoslosdemasprocesos

Poresoel algoritmonoesverdaderamentepracticable(infinitos ticketsy ineficiencia).

10.3. Algoritmo de Peterson

Es unavariacion del algoritmode panaderıa queusasolamentevariablesconfinadasa cuatrovalores.Sin embargo,senecesitamuchascomprobacionesparaaccederel turno.

El algoritmodeLambertrealizael accesoa la region crıtica conun numeroconstantedecom-probaciones(encasodeausensiadeconflicto).

Page 20: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 20

10.4.. Ayuda con hardware

Si existeninstruccionesmaspotentesenel microprocesadorsepuederealizarla exclusionmu-tuamasfacil.

10.4.1. Test-and-set

La instruccion test-and-set(TAS) implementaunacomprobaciondel contenidodeunavariableenla memoriaal mismotiempoquevarıa sucontenidoencasoquela comprobaciondeexito.

Ası sepuederealizarla exclusionmutuacon

Loop:TAS lockbyte ; test-and-set operationBNZ LOOP ; loop until we get access... critical sectionCLR lockbyte ; clear lock

En casode un sistemamulti-procesadorhay quetenercuidadoque la operacion test-and-seteste realizadacercadela memoriacompartida.

10.4.2. multi-prefix

(explicadoenclase)

11. Propriedades de programas concurrentes

11.1. Seguridad y viv acidad

Un programaconcurrentepuedefallar por variasrazoneslas cualessepuedenclasificarentredosgruposdepropiedades:

seguridad: Esapropriedadinidcaqueno esta pasandonadamaloenel programa,esdecir, elprogramano ejecutainstruccionesqueno debahacer.

vivacidad: Esapropriedadindicaqueesta pasandocontinuamentealgobuenodurantela eje-cucion,esdecir, el programaconsiguealgunprogresoensustareas.

Laspropiedadesdeseguridadsuelenseralgunasdelas invariantesdel programaquesetienenqueintroducirenlascomprobacionesdel funcionamientocorrecto(p.e.,medianteinduccion).

Ejemplosdepropiedadesdeseguridad:

Page 21: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 21

el algoritmousadoescorrecto

la exclusionmutuaderegionescrıticas

Ejemplosdepropiedadesdevivacidad:

ningunprocesomuerepor inanicion

si un procesopideun recurso,lo consigueenalgunmomento

losprocesosno sebloqueanmutuamente

no seterminaun procesodesdefuerasin motivo (p.ej.,enJava,cadastop() esrazon-able)

un procesono sequedadormido(p.ej.en Java, cadasuspend() tienesu resume()correspondiente)

la conexionentreprocesosesfiable

11.2. Justicia entre procesos

Cuandolos procesoscompitenpor el accesoa recursoscompartidosse puededefinir variosconceptosdejusticia:

justicia debil: si un procesopideaccesocontinuamente,le seradadoenalgunmomento

justicia estricta: si unprocesopideaccesoinfinitamenteveces,le seradadoenalgunmomento

esperalimitada: si un procesopideaccesounavez,le sera dadoantesdequeotro procesoloobtengamasdeunavez

esperaordenadaen tiempo: si unprocesopideacceso,le seradadoantesdetodoslosproce-sosquelo hayanpedidomastarde

Los dosprimerosconceptosno sonmuy practicosporquedependendeterminosinfinitamenteo el algun momento,sinembargo,puedenserutilesencomprobacionesformales.

Enunsistemadistribuidola ordenacionentiemponoestanfacil derealizardadoquela nociondetiempono esta tanclara.

Normalmentesequierequetodoslos procesosmanifestenalgun progresoen su trabajo.Sinembargo,esono esnecesarioenprogramasconcurrentes;sepuedevivir bienconalgunospro-cesos“muertos”, mientrasno denotrosproblemasparael controlador(p.e.,como llenar lastablaslimitadasdel sistemaoperativo). Siempreexiste la posibilidadqueel trabajoasignadoaunprocesoseahechopor otroprocesodejandoel primeroenesperainfinita.

Page 22: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 22

12. Exclusi on mutua a nivel alto

El conceptodeusarestructurasdedatosa nivel alto liberaal programadordelos detallesdesuimplementacion. El programadorpuedeasumirquelasoperacionesestan implementadascor-rectamentey puedebasarel desarrollodelprogramaconcurrenteenunfuncionamientocorrectodelasoperacionesdelos tiposdedatosabstractos.

Lasimplementacionesconcretasdelos tiposdedatosabstractostienenquerecurrira lasposi-bilidadesdescritasarriba.

12.1. Semaforos

Un semaforoesuntipo dedatosabstractoquepermiteel usodeunrecursodemaneraexclusivacuandovariosprocesosestancompitiendo.

El tipo dedatosabstractocumplela siguientesemantica:

El estadointernodelsemaforocuentacuantosprocesostodavıapuedenutilizar el recurso.Sepuederealizar, p.e.,conunnumeroenteroquenuncallegaasernegativo.

Exitentresoperacionesconunsemaforo:init() , wait() , y signal() querealizanlo siguiente:

init() : Inicializa el semaforoantesde quecualquierprocesohayaejecutadoni unaoperacion wait() ni unaoperacion signal() al lımite denumerodeprocesosquetenganderechoa accederel recurso.Si seinicializa con1, sehacontruidounsemaforobinario.

wait() : Si el estadoindica cero,el procesosequedaatrapadoen el semaforo hastaqueseadespertadopor otro proceso.Si el estadoindicaqueun procesomaspuedeaccederel recursosedecrementael contadory la operacion terminaconexito.

La operacionwait() tienequeestar implementadacomounainstruccionatomica.Sin embargo, enmuchasimplementacionesla operacion wait() puedeserinter-rumpida.Normalmenteexisteunaformadecomprobarsi la salidadel wait() esdebidoaunainterrupciono porquesehadadoaccesoal semaforo.

signal() : Una vez se ha terminadoel uso del recurso,el procesolo senaliza alsemaforo.Si quedaalgun procesobloqueadoen el semaforounode ellos seades-pertado,sinoseincrementael contador.

La operacion signal() tambien tienequeestar implementadacomoinstruccionatomica.En algunasimplementacionesesposiblecomprobarsi sehayadespertadoun procesoconexito encasoquehubieraalgunobloqueado.

Paradespertarlos procesosexistenvariasformasquesedestinguenen susgradosdejusticia:� FIFO quegarantizaqueno seproduzcainanicon de ningun procesoestando

bloqueadoenel semaforo� aleatorioquepuederesultareninanicion� ...

Page 23: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 23

El accesomutuoa regionescrıticassearregla conun semaforoquepermitael accesoa un soloproceso

S.init(1)

P1 P2a: loop loopb: S.wait() S.wait()c: critical region critical regiond: S.signal() S.signal()e: non-critical region non-critical regionf: endloop endloop

Observamoslossiguientedetalles:

Si algunprocesono liberael semaforo,sepuedeprovocarunbloqueo.

No hacefaltaqueun procesoliberesupropiorecurso,esdecir, la operacion signal()puedeseaejecutadaporotro proceso.

Consimplessemaforosnosepuedeimponerunordenenlosprocesosaccediendoadifer-entesrecursos.

Si existenenun entornosolamentesemaforosbinarios,sepuedesimularun semaforogeneralusandodossemaforosbinariosy uncontador, p.e.,conlasvariablesdelay , mutex y count .

La operacion init() inicializael contadoral numeromaximopermitido.El semaforomutexaseguraaccesomutuamenteexclusivo al contador. El semaforo delay atrapaa los procesosquesuperanel numeromaximopermitido.

La operacion wait() seimplementadela siguientemanera:

delay.wait()mutex.wait()decrement countif count greater 0 then delay.signal()mutex.signal()

y la operacion signal() seimplementadela siguientemanera:

mutex.wait()increment countif count equal 1 then delay.signal()mutex.signal()

Unasprincipalesdesventajasdesemaforosson:

nosepuedeimponerel usocorrectodeloswait() sy signal() s

noexisteunaasociacionentreel semaforoy el recurso

entrewait() y signal() el usuariopuederealizarcualquieroperacionconel recurso

Page 24: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 24

12.2./ Regiones cr ıticas

El terminoabstractode regionescrıticas(Section9.3) sepuedever realizadodirectamenteenun lenguajedeprogramacion.Ası partedela responsabilidadsehatrasladadodesdeel progra-madoral compilador.

De algunamaneraseidentificaquealgun bloquedecodigosedebetratarcomoregion crıtica(ası funcionaJavaconsusbloquessincronizados):

V is shared variableregion V do

code of critical region

El compiladoraseguraquela variableV tengaun semaforo adjuntoqueseusaparacontrolarel accesoexclusivo de un solo procesoa la region crıtica. De estemodono hacefalta queelprogramadorusedirectamentelasoperacioneswait() y signal() paracontrolarel accesoconel posibleerrordeolvidarsedealgunsignal() .

Adicionalmenteesposiblequedentrode la region crıtica se llame a otra partedel programa(p.e.,un procedimientoo funcion) que a su vez contengauna region crıtica. Si estaregionesta controladapor la mismavariableV el procesoobtieneautomaticamentetambienaccesoadicharegion.

Los regionescrıticasno sonlo mismoquelos semaforos,porqueno setieneaccesodirectoalasoperacionesinit() , wait() y signal() .

12.3. Regiones cr ıticas condicionales

Enmuchassituacionesesconvenientecontrolarel accesodevariosprocesosaunaregioncrıticapor una condicion. Con las regionescrıticas (Section12.2) simplesno se puederealizartalcontrol.Hacefaltaotraconstruccion,por ejemplo:

V is shared variableC is boolean expressionregion V when C do

code of critical region

En la programacion orientadaa objectoslasregionescrıticascondicionalesdondela condicionreflejael estadoactualde un objetosonmuy utiles paracontrolarel accesoal objetodepen-diendodeesteestado(en Java sepuedeimplementarp.ej. con unaconstruccion de buclecontry ).

Lasregionescrıticascondicionalesfuncionaninternamentedela siguientemanera:

1. unprocesoquequiereentrarenla regioncrıticaesperahastaquetengapermiso

2. unavezobtenidopermisocompruebael estadodela condicion,si la condicion lo permiteentraenla region,encasocontrarioliberael cerrojoy seponedenuevo esperandoenlacoladeacceso

Page 25: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 25

Se implementauna region crıtica normalmentecon dos colasdiferentes.Una cola principalcontrolalos procesosquequierenaccedera la region crıtica, unacoladeeventoscontrolalosprocesosqueyahanobtenidounavezel cerrojoperoquehanencontradola condicionenestadofalso.Si unprocesosaledela regioncrıtica todoslosprocesosquequedanenla coladeeventospasandenuevo a la colaprincipalporquetienenquerecomprobarla condicion.

Notaqueestatecnicapuedederivarenmuchascomprobacionesdela condicion,todosenmodoexclusivo, y puedecausarperdidasdeeficiencia.Enciertascircunstanciashacefaltauncontrolmassofisticadodel accesoa la regioncrıtica dandopasodirectodeunprocesoaotro.

12.4. Monitores

Todaslasestructurasquehemosvistohastaahorasiguenprovocandoproblemasparael progra-mador:

el controlsobrelos recursosestadistribuidopor variospuntosdeun programa

nohayprotecciondelasvariablesdecontrolquesiemprefueronglobales

Poresoseusael conceptodemonitoresqueimplementanun nivel aun masalto deabstraccionfacilitandoel accesoa recursoscompartidos.

Un monitoresun tipo dedatosabstractoquecontiene

un conjuntode procedimientosde control de los cualessolamenteun subconjuntoesvisibledesdefuera

unconjuntodedatosprivados,esdecir, novisiblesdesdefuera

El accesoal monitor esta permitido solamentea traves de los procedimientospublicos y elcompiladorgarantizaexclusion mutuaparatodoslos procedimientos.La implementacion delmonitor controlala exclusion mutuacon colasde entradaquecontengantodoslos procesosbloqueados.Puedenexistir variascolasy el controladordel monitoreligedecualcolaseva aescogerel siguienteprocesoparaactuarsobrelosdatos.Un monitorno tieneaccesoavariablesexterioresconel resultadodequesucomportamientonopuededependerdeellos.

Unadesventajadelosmonitoresesla exclusividaddesuuso,esdecir, la concurrenciaesta lim-itadasi muchosprocesoshacenusodelmismomonitor.

Un aspectoqueseencuentraen muchasimplementacionesde monitoresesla sincronizacioncondicional,esdecir, mientrasun procesoesta ejecutandoun procedimientodel monitor (conexclusionmutua)puededarpasoaotroprocesoliberandoel cerrojo.Estasoperacionessesuelellamarwait() o delay() . El procesoqueha liberadoel cerrojosequedabloqueadohastaqueotroprocesole despiertadenuevo.Estebloqueotemporalestarealizadodentrodelmonitor.

La tecnicapermitela sincronizacionentreprocesosporqueactuandosobreel mismorecursolosprocesospuedencambiarel estadodel recursoy pasarası informaciondeun procesoal otro.

Lenguajesde alto nivel quefacilitan la programacion concurrentesuelentenermonitoresim-plementadosdentrodel lenguaje(p.e.Java usael conceptodemonitores(Section16.4.5)pararealizarel accesomutuamenteexclusivo asusobjetos).

Page 26: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 26

13. Problema del productor y consumidor

El problemadel productory consumidorconsisteen la situacion siquiente:de una parteseproducealgunproducto(datosennuestrocaso)quesecolocaenalgunlugar(unacolaennuestrocaso)paraqueseaconsumidopor otraparte.Comoalgoritmoobtenemos:

producer: consumer:forever forever

produce(item) take(item)place(item) consume(item)

Queremosgarantizarqueel consumidorno coja los datosmasrapidode lo quelos esta pro-duciendoel productor. Masconcretamente:

1. el productorpuedegenerarsusdatosencualquiermomento

2. el consumidorpuedecogerundatosolamentecuandohayalguno

3. parael intercambiodedatosseusaunacolaala cualambostienenacceso,asisegarantizael ordencorrecto

4. ningundatonoestaconsumidounavezsiendoproducido

Si la colapuedecrecera unalongitud infinita (siendoel casocuandoel consumidorconsumemaslentodelo queel productorproduce),bastaconla siguientesolucion:

producer: consumer:forever forever

produce(item) itemsReady.wai t( )place(item) take(item)itemsReady.sign al () consume(item)

dondeitemsReady esun semaforogeneralquesehainicializadoal principioconel valor0.

El algoritmoescorrecto,lo queseveecon la siguienteprueba.Asumimosqueel consumidoradelantael productor. Entoncesel numerodewait() stienequesermasgrandequeel numerodesignals() :

#waits > #signals==> #signals - #waits < 0==> itemsReady < 0

y la ultima lıneaesunacontradicciona la invariantedel semaforo.

Queremosampliarel problemaintroduciendomasproductoresy masconsumidoresque tra-bajentodoscon la mismacola. Para asegurar que todoslos datosesten consumidoslo masrapidoposiblepor algun consumidordisponibletenemosqueprotegerel accesoa la colaconunsemaforobinario(llamadomutex abajo):

Page 27: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 27

producer: consumer:forever forever

produce(item) itemsReady.wai t( )mutex.wait() mutex.wait()place(item) take(item)mutex.signal() mutex.signal()itemsReady.sign al () consume(item)

Normalmenteno sepuedepermitir que la cola crezcainfinitamente,esdecir, hay queevitarproduccion en excesotambien. Como posiblesolucion introducimosotro semaforo general(llamadospacesLeft ) que cuentacuantosespaciosquedanlibre en la cola. Se inicializael semaforoconla longitudmaximapermitidadela cola.Un productorquedabloqueadosi yanohayespacioenla colay un consumidorsinalasuconsumision.

producer: consumer:forever forever

spacesLeft.wait () itemsReady.wai t( )produce(item) mutex.wait()mutex.wait() take(item)place(item) mutex.signal()mutex.signal() consume(item)itemsReady.sign al () spacesLeft.sig nal( )

14. Bloqueo

Un bloqueoseproducecuandounprocesoestaesperandoalgoquenuncasecumple.

Ejemplo:

Cuandodosprocesos�0� y �1� quierenteneraccesosimultaneamentea dosrecursos$� y $2� , esposiblequeseproduzcaunbloqueodeambosprocesos.Si �3� accedeconexito a $2� y �1� accedeconexito a $� , ambossequedanatrapadosintendandoteneraccesoal otro recurso.

Cuatrocondicionessetienenquecumplirparaqueseaposiblequeseproduzcaunbloqueoentreprocesos:

1. losprocesostienenquecompartirrecursosconexclusionmutua

2. losprocesosquierenaccederaun recursomasmientrasya tienenaccesoexclusivo aotro

3. los recursosnopermitenserusadospor masdeunprocesoal mismotiempo

4. existeunacadenacircularentrepeticionesdeprocesosy asignacionesderecursos

Un problemaadicionalcon los bloqueosesqueesposiblequeel programasigafuncionandocorrectamentesegun la definicion, esdecir, el resultadoobtenidoesel resultadodeseado,auncuandoalgunosdesusprocesosestanbloqueadosdurantela ejecucion.

Existenalgunastecnicasquesepuedeusarparaqueno seproduzcanbloqueos:

Page 28: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 28

14.1.4 Detectar y actuar

Seimplementaunprocesoadicionalquevigila si losdemasformanunacadenacircular.

Masprecisamente,sedefineel grafodeasignacionderecursos:

Losprocesosy los recursosrepresentanlosnodosdeun grafo.

Seanadecadavezunaaristaentreunnodotipo recursoy unnodotipo procesocuandoelprocesohaobtenidoaccesoexclusivo al recurso.

Seanadecadavezunaaristaentreunnodotipo recursoy unnodotipo procesocuandoelprocesoestapidiendoaccesoexclusivo al recurso.

Seeliminanlasaristasentreprocesoy recursoy al revescuandoel procesoya no usaelrecurso.

Aquı debe venir figura gra.ps

Cuandosedetectaenel graforesultanteunciclo,esdecir, cuandoyanoformaungrafoacıclico,sehaproducidounaposiblesituaciondeunbloqueo.

Sepuedereaccionardedosmanerassi sehaencontradounciclo:

No sedapermisoal ultimo procesodeobtenerel recurso.

Sı sedapermiso,perounavezdetectadoel ciclo seabortatodoso algunosdelosprocesosinvolucrados.

Sin embargo, la tecnicapuededarcomoresultadoqueel programano avance,esdecir, el pro-gramasequedaatrapadohaciendotrabajoinutil: crearsituacionesdebloqueoy abortarprocesoscontinuamente.

14.2. Evitar

El sistemano da permisode accesoa recursossi esposiblequeel procesosebloqueeen elfuturo. Un metodoesel algoritmodel banquero(Dijkstra) queesun algoritmocentralizadoyporesoposiblementeno muypracticableenmuchassituaciones.

Segarantizaquetodoslos procesosactuandela siguientemaneraendosfases:

1. primeroseobtienetodoslos cerrojosnecesariospararealizaruna tarea,esose realizasolamentesi sepuedeobtenertodosa la vez,

2. despuesserealizala tareadurantela cual posiblementeseliberanrecursosqueno sonnecesarias.

Ejemplo:

Asumimosquetengamos3 procesosqueactuanconvariosrecursos.El sistemadisponede12recursos.

Page 29: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 29

proceso recursospedidos recursosreservadosA 4 1B 6 4C 8 5

suma 18 10

esdecir, de los 12 recursosdisponiblesya 10 estan ocupados.La unica forma quesepuedeprocederesdarel accesoa losrestantes2 recursosal procesoB. CuandoB hayaterminadovaaliberarsus6 recursosqueinclusopuedenestardistribuidosentreA y C, ası queambostambienpuedenrealizarsutrabajo.

Conunargumentodeinduccionseverificafacilmentequenuncasellegaaningunbloqueo.

14.3. Prevenir

Sepuedeprevenirel bloqueosiemprey cuandoseconsigaquealgunadelascondicionesnece-sariasparala existenciadeun bloqueonoseproduzca.

1. losprocesostienenquecompartirrecursosconexclusionmutua:

No sede a un procesodirectamenteaccesoexclusivo al recurso,si no seusaotroprocesoquerealizael trabajodetodoslosdemasmanejandounacoladetareas(p.e.,un demonioparaimprimir consucoladedocumentospor imprimir).

2. losprocesosquierenaccederaunrecursomasmientrasyatienenaccesoexclusivo aotro:

Seexige queun procesopidatodoslos recursosquevaa utilizar al comienzodesutrabajo

3. los recursosnopermitenserusadospor masdeunprocesoal mismotiempo:

Sepermitequeunprocesoaborteaotroprocesoconel fin deobteneraccesoexclu-sivo al recurso.Hayquetenercuidadodenocaerenlivelock

4. existeunacadenacircularentrepeticionesdeprocesosy alocacion derecursos:

Seordenanlos recursoslınealmentey sefuerzaa los procesosqueaccedana losrecursosenel ordenimpuesto.Ası esimposiblequeseproduzcaunciclo.

15. Patrones de dise no para aplicaciones con-currentes

unconceptomuyparecidoa lospatronesdedisenoseencuentraenla matematicay enla teorıadelosalgoritmos,por ejemplo:

tecnicasde pruebasmatematicas:

Page 30: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 30

comprobaciondirecta

induccion

contradiccion

contra-ejemplo

comprobacion indirecta

diagonalizacion

amortizacion

reduccion

y mas...

paradigmasde desarrollo dealgoritmos:

busquedaexhaustiva

busquedabinaria

divide-y-venceras

ramificacion-y-poda

barrido

perturbacion

y mas...

15.1. Reactor

El patron reactoresconocidotambiencomodispatchero notifier.

Seusacuandounaaplicacion

quegestionaeventos

debereaccionara variaspeticionescuasisimultaneamente

perolosprocesademodosıncronoy enel ordendellegada.

Ejemplos:

servidoresconmultiplesclientes

interfacesal usuarioconvariosfuentesdeeventos

serviciodetransacciones

centralita

Comportamientoexigido:

Page 31: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 31

la aplicacionno debebloquearinnecesariamenteotraspeticionesmientrasseestagestio-nandounapeticion.

debeserfacil incorporarnuevostiposdeeventosy peticiones

la sincronizaciondebeserescondidaparafacilitar la implementaciondela aplicacion

Posiblesolucion:

seesperaenunbuclecentrala todosloseventosquepuedanllegar

unavezrecibidoun eventosetrasladasuprocesamientoa un gestorespecıfico dedichotipo deevento

el reactorpermiteanadir/quitargestoresparaeventos

Detallesdela implementacion:

BajoUnix y (parcialmente)bajowindowssepuedeaprovechardela funcionselect()parael buclecentral.

Si los gestoresdeeventossonprocesosindependienteshayqueevitar posiblesinterblo-queoso estadoserroneossi variosgestorestrabajanconun estadocomun.

Sepuedeaprovechardel propiomecanismodegestionareventosparalanzareventosqueprovoquenqueel propioreactorcambiesuestado.

Javano disponedeun mecanismoapropriadocomoel select() .

15.2. Proactor

Seusacuandounaaplicacion

quegestionaeventos

debeactuarenrespuestaavariaspeticionescuasisimultaneamente

y procesademodoasıncrononotificandola terminacionadecuadamente

Ejemplos:

servidoresparala Red

interfacesal usuarioparatratarcomponentesconlargostiemposdecalculo

contestadorautomatico

Comportamientoexigido (igual comoenel casodel reactor):

la aplicacionno debebloquearinnecesariamenteotraspeticionesmientrasseestagestio-nandounapeticion.

Page 32: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 32

debeserfacil incorporarnuevostiposdeeventosy peticiones

la sincronizaciondebeserescondidaparafacilitar la implementaciondela aplicacion

Posiblesolucion:

se divide la aplicacion en dos partes:operacionesde larga duracion (que se ejecutanasıncronamente)y administradoresdeeventosdeterminacionparadichasoperaciones

conun iniciadorselanzacuandohagafaltala operacion compleja

lasnotificacionesdeterminacionsealmacenaenunacoladeeventosqueasuvezestava-ciandoel administradorparanotificarla aplicacion dela terminaciondel trabajoiniciado

el proactorpermiteanadir/quitargestoresparaoperacionesy administradores

Detallesdela implementacion:

muchasvecesbastaconun soloproactorenunaaplicacion quesepuedeimplementarasuvezcomosingleton.

seusavarios proactoresen casode diferentesprioridades(de suscolasde eventosdeterminacion)

sepuederealizarun bucledeiniciacion/terminacionhastaquealgun tipo determinacionsehayaproducido(p.ej.transpasodeficherosenbloquesy cadabloquedemodoasıncrono.

la operacion asıncronapuedeserunaoperaciondel propiosistemaoperativo

15.3. Ficha de terminaci on asıncr ona

El patron asynchronouscompletiontoken esconocidotambien comoactivedemultiplexing omagic cookie.

Seusacuandounaaplicacion

quegestionaeventos

debeactuarenrespuestaasuspropiaspeticiones

demodoasıncronodespuesdesernotificadode la terminacion del procesamientode lapeticion

Ejemplos:

interaccion complejaenun escenariodecommercioelectronico(rellenodeformularios,suscripcionaservicios)

interfacesal usuariocondiagolosno bloqueantes

contestadorautomatico

Page 33: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 33

Comportamientoexigido:

sequieresepararel procesamientoderespuestasaun servicio

sequierefacilitar un servicioa muchosclientessin mantenerel estadodel clienteenelservidor

Posiblesolucion:

la aplicacion mandaconsupeticion un ficha indicandocomohayqueprocesardespuesdehaberrecibidoun eventodeterminaciondela peticion

la notificacion determinacion incluyela fichaoriginal

Detallesdela implementacion:

lasfichassuelenincorporarunaidentificacion

lasfichaspuedencontenerdirectamentepunterosadatoso funciones

enunentornomasheterogenosepuedeaprovechardeobjetosdistribuidos(CORBA)

hayquetomarmedidasdeseguridadparaevitar el procesodefichasno-deseados

hayquetomarmedidasparael casodeperdereventosdeterminacion

15.4. Aceptor -Conector

Seusacuandounaaplicacion

necesitaestablecerunaconexion entreunaparejadeservicios(p.ej.,ordenadoresenunared)

dondeel servicioseatransparentea lascapasmasaltasdela aplicacion

y el conocimientodelosdetallesdela conexion (activo, passivo, protocolo)nosonnece-sariosparala aplicacion

Ejemplos:

lossuper-serviciosdeunix (inetd )

Comportamientoexigido:

sequiereesconderlos detallesdela conexionentredospuntosdecomunicacion

se quiereun mecanismoflexible en la capabaja para respondereficientementea lasnecesidadesde aplicacionesparaquesepuedanjugar papelescomoservidor, clienteoambosenmodopassivo o activo

Page 34: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 34

sequierela posibilidaddecambiar, modificar, o anadirservicioso susimplementacionessinquedichasmodificacionesafectendirectamentea la aplicacion

Posiblesolucion:

seseparael establecimientode la conexion y su inicializacion de la funcionalidadde laparejadeservicios(peerservices), esdecir, seusaunacapadetransportey unacapadeservicios

sedividecadaparejaqueconstitueunaconexionenunapartequellamadaaceptory otrapartellamadaconector

la parteaceptorasecomportapassiva esperandoa la parteconectoraque inicia activa-mentela conexion

unavezestablecidala conexion los serviciosdela aplicacion usanla capadetransportedemodotransparente

Detallesdela implementacion:

muchasvecesseimplementaunserviciopar-en-par(peer-to-peer) dondela capadetrans-porteofreceunaparejadeconexionesquesepuedeutilizar independientementeenla capadeservicios,normalmenteunalineaparaescribiry otrapararecibir

la inicializacion de la capade transportese puedellevar a cabode modo sıncronooasıncrono,esdecir, la capade serviciosquedabloqueadahastaquesehayaestablecidade conexion o seusaun mecanismode notificacion paraavisar la capade serviciosdelestablecimientodela conexion

esrecomendadode usarel modo sıncronosolamentecuando:el retardoesperadoparaestablecerla conexion escorto o la aplicacion no puedeavanzarmientrasno tengalaconexiondisponible

muchasvecesel sistemaoperativo dasoporteparaimplementarestepatron,porejemplo,conexionmediantesockets

sepuedeaprovechardela mismacapadetransporteparadarservicioavariasaplicacionesa la vez

15.5. Guardi an

El patron guard es conocidotambien como scopedlocking, synchronizedblock o execute-around-object.

Seusacuandounaaplicacion

contieneprocesos(hilos)queseejecutanconcurrentemente

y hayqueprotegerbloquesdecodigoconunpuntodeentradaperovariospuntosdesalida

paraquenoentrenvarioshilos a la vez.

Page 35: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 35

Ejemplos:

cualquiertipo deproteccion deregionescrıticas

Comportamientoexigido:

sequierequeun proceso/hiloquedabloqueadosi otro proceso/hiloya ha entradoen laregioncrıtica,esdecir, haobtenidola llaveexclusivadedicharegion

sequierequeindependientementedel metodousadoparasalir de la region crıtica (p.ej.usodereturn , break etc.)sedevuelve la llaveexclusivaparala region

Posiblesolucion:

seinicializa la region crıtica conun objetodeguardiaqueintentaobtenerunallave ex-clusiva

se aprovechade la llamadaautomatica de destructoresparalibrar la region crıtica, esdecir, devolver la llave

Detallesdela implementacion:

Javaproporcionael guardiandirectamenteenel lenguaje:metodosy bloquessincroniza-dos(synchronized )

hayqueprevenirauto-bloqueoencasodellamadasrecursivas

hayquetenercuidadoconinterrupcionesforzadasquecircundanel flujo decontrolnor-mal

porqueel guardianno esta usadoen la region crıtica, el compilerpuedeefectuarciertosmensajesde alertay — en el casopeor— un optimizadorpuedellegar a tal extremoeliminandoel objeto

parafacilitar la implementaciondeunguardianendiferentesentornos(incluyendositua-cionessecuencialesdondeel guardianefectivamenteno hacenada)sepuedeaprovecharde estrategiasde polimorfismoo decodificacion con plantillasparaflexibilizar el guar-dian(el patron asicambiadosellamaaveces:strategizedlocking)

15.6. Interfaz segura para multi-hilos

thread-safeinterface

Seusacuandounaaplicacion

usamuchoshilos quetrabajanconlosmismosobjetos

y sequiereminimizar el trabajoadicionalparaobtenery devolver la llave quepermiteaccesoenmodoexclusivo

Ejemplos:

Page 36: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 36

Comportamientoexigido:

sequiereevitar auto-bloqueodebidoa llamadasdel mismohilo paraobtenerla mismallave

sequiereminimizarel trabajoadicional

Posiblesolucion:

seaprovechade las interfacesexistentesenel lenguajedeprogramacion paraaccederaloscomponentesdeunaclase

cadahilo accedesolamenteametodospublicosmientrastodavıano haobtenidola llave

dichosmetodospublicosintentanobtenerla llave cuantoantesy delegandespuesel tra-bajoametodosprivados(protegidos)

losmetodosprivados(o protegidos)asumenquesehayaobtenidola llave

Detallesdela implementacion:

los monitoresdeJava proporcionandirectamenteun mecanismoparecidoal usuario,sinembargo, ciertasclasesde Java (p.ej., tablasde dislocacion (hashtables)) usaninterna-menteestepatronpor razonesdeeficiencia

hayquetenercuidadodeno corromperla interfaz,p.ej.,conel usode metodosamigos(friend ) quetienenaccesodirectoapartesprivadasdela clase

el patron noevita bloqueo,solamentefacilita unaimplementacionmastransparente

15.7. Aviso de hecho

El patron double-checkedlockingoptimizationesconocidotambiencomolock hint.

Seusacuandounaaplicacion

usaobjetos(clases)quenecesitanunainicializacion unicay exclusiva(patron Singleton)

queno sequiererealizarsiempre

sinosolamenteencasodenecesidadexplıcita

y quesepuederealizarpor cualquierhilo quevaausarel objetoporprimeravez.

Ejemplos:

Comportamientoexigido:

Page 37: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 37

sequiereun trabajomınimoenel casoquela inicializacionyasehallevadoa cabo

sequierequecualquierhilo puederealizarla inicializacion

Posiblesolucion:

seusaun guardianparaobtenerexclusionmutua

secompruebadosvecessi la inicializacion ya seha llevadoa cabo:unavez antesdeobtenerla llavey unavezdespuesdehaberobtenidola llave

Detallesdela implementacion:

hay que marcarla banderaque marcasi la inicializacion esta realizadacomo volatil(volatile ) paraevitar posiblesoptimizacionesdel compilador

el accesoa la banderatienequeseratomico

15.8. Objetos activ os

El patron activeobjectesconocidotambiencomoconcurrentobject.

Seusacuandounaaplicacion

usavarioshilos y objetos

dondecadahilo puederealizarllamadasa metodosde varios objetosque a su vez seejecutanenhilos separados

Ejemplos:

comportamientodecamareroy cocinaenunrestaurante

Comportamientoexigido:

sequiereunaalta disponibilidadde los metodosde un objeto(sobretodo cuandono seesperaresultadosimmediatos,p.ej.,mandarmensajes)

sequierequela sincronizacion necesariaparainvolucrarlos metodosdeun objetosealomastransparentequeseaposible

sequiereunaexplotacion transparentedel paralelismodisponiblesin programarexplici-tamenteplanificadoresenla aplicacion

Posiblesolucion:

paracadaobjetoseseparala llamadaaunmetododela ejecuciondelcodigo(esdecir, seusaun proxy)

Page 38: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 38

la llamadaaunmetodo(queseejecutaenel hilo delcliente)solamenteanadeunmensajea la listadeaccionespendientesdel objeto

el objetoejecutaconla ayudadeunplanificadorcorrespondientelasaccionesenla lista

la ejecucionde las tareasno siguenecesariamenteel ordendepedidossino dependedelasdecisionesdel planificador

la sincronizacion entreel clientey el objetoserealizabasicamentesobreel accesoa lalistadeaccionespendientes

Detallesdela implementacion:

paradevolver resultadosexistenvariasestrategias:bloqueode la llamadaen el proxy,notificacionconunmensaje(interrupcion),usodelpatronfuturo(sedepositael objetoderetornoa la disposiciondel cliente)

debidoal trabajoadicionalel patron esmasconvenienteparaobjetosgruesos,esdecir,dondoel tiempodecalculodesusmetodospor la frecuenciadesusllamadaseslargo

setienequetomarla decisionapropriada:usodeobjetosactivoso usodemonitores

sepuedeincorporartemporizadoresparaabordar(o tomarotrotipo dedecisiones)cuandounatareanoserealizaenun tiempomaximoestablecido

15.9. Monitores

El patron monitorobjectesconocidotambiencomothread-safepassiveobject.

Seusacuandounaaplicacion

consisteenvarioshilos

queactuansobreel mismoobjetodemodoconcurrente

Ejemplos:

colasdepedidoy colasdeesperaenunrestaurantetipo comidarapida

Comportamientoexigido:

seprotegelos objetosasıquecadahilo accediendoel objetoveael estadoapropiadodelobjetopararealizarsuaccion

sequiereevitar llamadasexplıcitasasemaforos

sequierefacilitar la posibilidadqueun hilo bloqueadodejeel accesoexclusivo el objetoparaqueotroshilos puedantomarel mando(aun el hilo quedaa la esperadere-tomarelobjetodenuevo)

si un hilo sueltatemporalmenteel objetoestedebeestarenun estadoadecuadoparasuusoenotroshilos

Page 39: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 39

Posiblesolucion:

sepermiteel accesoal objetosolamenteconmetodossincronizados

dichosmetodossincronizadosaprovechandeunasolallave (llave del monitor)paraen-cadenartodoslosaccesos

unhilo queyahaobtenidola llavedelmonitorpuedeaccederlibrementelosdemasmeto-dos

unhilo reestableceencasoquepuedesoltarel objetounestadodela invariantedelobjetoy seadjuntaenunacoladeesperaparaobteneraccesodenuevo

el monitormantieneun conjuntode condicionesquedecidenlos casosen los cualessepuedesoltarel objeto(o reanuarel trabajoparaunhilo esperando)

Detallesdela implementacion:

losobjetosdeJavaimplicitamenteusanunmonitorparaadministrarlasllamadasameto-dossincronizados

hayquetenermuchocuidadodurantela implementacion de los estadosinvariantesquepermitensoltarel monitortemporalmenteala reanuaciondeltrabajocuandosehacumpli-do la condicionnecesaria

hay que prevenir el posiblebloqueoque se da por llamadosintercaladasa monitoresde diferentesobjetos:sesueltasolamenteel objetode masalto nivel y el hilo sequedaesperandoenla coladeespera(un fallo comunenJava)

15.10. Mitad-s ıncr ono, mitad asıncr ono

Seusacuandounaaplicacion

tienequeprocesarserviciossıncronosy asıncronosa la vez

quesecomunicanentreellos

Ejemplos:

administraciondedispositivoscontroladospor interrupciones

unir capasdeimplementaciondeaplicacionesqueabajotrabajanenformaasıncronoperoquehaciaofrecenllamadassıncronas(read/write operacionesa trajetasdered)

organizaciondemesasenrestaurantesconuncamareroderecepcion

Comportamientoexigido:

sequiereofrecerunainterfazsıncronaaaplicacionesquelo desean

sequieremantenerla capaasıncronaparaaplicacionesconaltasprestaciones(p.ej.,eje-cucionentiemporeal)

Page 40: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 40

Posiblesolucion:

seseparael servicioendoscapasqueestanunidospor un mecanismodecolas

los serviciosasıncronospuedenaccederlascolascuandolo necesitanconla posibilidadquesebloqueaunserviciosıncronomientrastanto

Detallesdela implementacion:

hayqueevitardesbordamientodelascolas,p.ej.,descartarcontenidoenciertasocaciones,esdecir, hayqueimplementaruncontroldeflujo adecuadoparala aplicacion

sepuedeaprovechardelospatronesobjetosactivoso monitorespararealizarlascolas

paraevitar copiasdedatosinnesesariassepuedeusarmemoriacomun paralos datosdelascolas,solamenteel controldeflujo estaseparado

15.11. Lıder-y-Seguidores

leader-followers

Seusacuandounaaplicacion

tienequereaccionaravarioseventosa la vez

y no esposibleo convenienteinicializarcadavezun hilo paracadaevento

Ejemplos:

procesamientodetransaccionesencuasi-tiemporeal

colasdetaxisenaeropuertos

Comportamientoexigido:

sequiereunadistribucion rapidadeloseventosa hilosyaesperando

sequieregarantizaraccesoconexclusionmutuaa loseventos

Posiblesolucion:

seusaun conjuntodehilos organizadosenunacola

el hilo al frentedela cola(llamadolıder)procesael siguienteevento

perotransformaprimeroel siguientehilo enla colaennuevo lıder

cuandoel hilo hayaterminadosutrabajoseanadedenuevo a la cola

Detallesdela implementacion:

selos eventoslleganmasrapidoquesepuedenconsumircon la cola de hilos, hay quetomarmedidasapropriadas(p.ej.,manejarloseventosenunacola,descartareventosetc.)

paraaumentarla eficienciade la implementacion sepuedeimplementarla coladehilosesperandocomounpila

el accesoa la coladeseguidorestienequesereficientey robusto

Page 41: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 41

16. Java

El famosoholamundoseprogramaenJavaası:

class Hello {public static void main(String[] args) {

System.out.prin tl n( "Hell o world");}

}

Antesdeexplicar rapidamenteel lenguajeJava jugamosconunsimpleejemploparamotivarelusodeJavaenlasclasesdeconcurrencia.

16.1. Hilos de Java

Hastaahorahemoshabladosiempredeprocesosenuncontexto abstracto.

Si estamosprogramandoen un lenguajede programacion, p.ej., C++ o Java, se puedeusarsushilos (“threads”)comoinstanciasde procesos.No obstante,existenmasposibilidadesdeinstanciarlosprocesos.

Un hilo esunasecuenciade instruccionesqueesta controladapor un planificador. El planifi-cadorgestionael tiempodeejecucion del procesadory asignadealgunamaneradichotiempoa losdiferenteshilosactualmentepresentes.

Normalmentelos hilos de un proceso(en estecontexto el procesoes lo quesesuelellamarası enel ambitodesistemasoperativos)suelenteneraccesoa todoslos recursosdisponiblesalproceso,esdecir, actuansobreunamemoriacompartida.

Loshilos estanenel paquetejava.lang.thread

y sepuedeusarpor ejemplodoshilos pararealizarunpequeno pingPONG:

Thread PingThread = new Thread();PingThread.sta rt( );Thread PongThread = new Thread();PongThread.sta rt( );

Por defecto,un hilo nuevamentecreadoy lanzadoaun siendoactivadoası no hacenada.Sinembargo, los hilos se ejecutanduranteun tiempo infinito y hay que abortarel programadeformabruta:control-Cenel terminal.

Extendemosla clasey sobre-escribimosel metodorun() paraquehagaalgoutil:

public class CD_PingThread extends Thread {public void run() {

while(true) {System.out.prin t( "p ing ");

}}

}

Page 42: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 42

El hilo heredatodo de la claseThread , pero sobreescribeel metodorun() . Hacemoslomismoparael otro hilo:

public class CD_PongThread extends Thread {public void run() {

while(true) {System.out.prin t( "P ONG");

}}

}

Y reprogramamosel hilo principal:

CD_PingThread PingThread=new CD_PingThread( );PingThread.sta rt( );CD_PongThread PongThread=new CD_PongThread( );PongThread.sta rt( );

Resultado(esperado):

losdoshilos producencadaunopor supartesussalidasenla pantalla

Resultado(observado):

sevesolamentela salidadeun hilo duranteciertotiempo

parecequela salidadependacomoel planificadoresta realizadoenel entornoJava

Nuestroobjetivo es:la ejecuciondelpingPONGindependientementedelsistemadebajo.Inten-tamosintroducirunapausapara“motivar” el planificadorparaquecambieloshilos:

public class CD_PingThread extends Thread {public void run() {

while(true) {System.out.prin t( "p ing ");try {

sleep(10);}catch(Interrupt edExcep ti on e) {

return;}

}}

}

public class CD_PongThread extends Thread {public void run() {

while(true) {System.out.prin t( "P ONG");

Page 43: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 43

try {sleep(50);

}catch(Interrupt edExcep ti on e) {

return;}

}}

}

Resultado(observado):

seveun pocomaspingquePONG

inclusosi losdostiemposdeesperasonigualesno seveningunpingPONGperfecto

Existeel metodoyield() (cede)paraavisarexplıcitamenteal planificadordequedebecam-biar loshilos:

public class CD_PingThread extends Thread {public void run() {

while(true) {System.out.prin t( "p ing ");yield();

}}

}

public class CD_PongThread extends Thread {public void run() {

while(true) {System.out.prin t( "P ONG");yield();

}}

}

Resultado(observado):

seve un ping y un PONGalternativamente,perodevezencuandoaparecendospingsodosPONGs

parecequeel planificadorre-seleccioneel mismohilo quehalanzadoel yield()

Practicas:codificarlosejemplosy “jugar conel entorno”.

Page 44: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 44

16.2.5 Repaso de Java

16.2.1. Clases

Javausa(conla excepciondevariablesdetipossimples)exclusivamenteobjetos.Un tal objetosedefinecomounaclase(class ), y sepuedecrearvariasinstanciasdeobjetosdetal clase.Esdecir, la clasedefineel tipo delobjeto,y la instanciaesunavariablequerepresentaunobjeto.

Unaclasecontienecomomuchotrestiposdemiembros:

instanciasdeobjetos(o detipossimples)

metodos(funciones)

otrasclases

No existenvariablesglobalesy el programaprincipal no esnadamasqueun metodode unaclase.

Los objetosenJava siempretienenvaloresconocidos,esdecir, los objetos(y tambienlasvari-ablesde tipos simples)siempreestan inicializados.Si el programano da una inicializacionexplıcita,Javaasignael valorcero,esdecir, 0, 0.0 , 6 u0000 , false o null dependiendodeltipo dela variable.

JavaesmuyparecidoaC++,aunquetambienexistengrandesdiferencias.

class Hello {public static void main(String[] args) {

System.out.prin tl n( "Hell o world");}

}

El programaprincipal sellama main() y tienequeserdeclaradopublico y estatico.No de-vuelve ningun valor (por esosedeclaracomovoid ). Los parametrosde la lıneadecomandosepasacomounarreglo decadenasdeletras(String ).

Java exige unadisciplinaestrictacon sustipos, esdecir, el compiladorcontrolasiemprequepuedesi lasoperacionesusadasestanpermitidasconlostiposinvolucrados.Si la comprobacionnosepuederealizarduranteel tiempodecompilacion,seposponehastael tiempodeejecucion,esdecir, sepuedenprovocarexcepcionesquepuedenprovocarfallosdurantela ejecucion.

16.2.2. Modificadores de clases

Sepuededeclararclasesconunoovariosdelossiguientesmodificadoresparaespecificarciertaspropiedades(no existenenC++):

public la claseesvisible desdefueradel fichero

abstract la clasetodavıa no esta completa,esdecir, no sepuedeinstanciarobjetosantesdequesehayanimplementadoenunaclasederivadalos metodosquefaltan

Page 45: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 45

final no sepuedeextenderla clase

strictfp obligaa la maquinavirtual a cumplir el estandardeIEEE paralos numerosflotantes

CasitodoslosentornosdedesarrolloparaJavapermitensolamenteunaclasepublicadentrodelmismofichero.

Obviamenteunaclaseno puedeseral mismotiempofinal y abstracta.Tampocoesta permitidaunaclaseabstractaconstrictfp .

16.2.3. Comentarios

Existentresposibilidadesdeescribircomentarios:

/* ... */ comentariodebloque// comentariodelınea/** ... */ comentariodedocumentacion

16.2.4. Tipos simples

boolean o bientrue o bienfalsechar 16 bit Unicodeletrabyte 8 bit numeroenteroconsignoshort 16 bit numeroenteroconsignoint 32 bit numeroenteroconsignolong 64 bit numeroenteroconsignofloat 32 bit numeroflotantedouble 64 bit numeroflotante

Solofloat y double sonigual comoenC++.No existenenterossinsignos.

Los tipossimplesnosonclases,peroexistenparatodoslos tipossimplesclasesqueimplemen-tan el comportamientode ellos. Solo hacefalta escribirlescon mayuscula(con la excepcionde Integer ). Lasclasesparalos tipos simplesproporcionantambienvariasconstantesparatrabajarconlosnumeros(p.ej.,NEGATIVEINFINITY etc.).

16.2.5. Modificadores de miembr os

Modificadoresdeacceso:

private : accesiblesolamentedesdela propiaclase

package : (o ningunmodificador)accesiblesolamentedesdela propiaclaseo dentrodelmismopaquete

protected : accesiblesolamentedesdela propiaclase,dentrodel mismopaquete,odesdeclasesderivadas

Page 46: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 46

public : accesiblesiemprecuandola claseesvisible

(En C++, por defecto,los miembrossonprivados,mientrasenJava los miembrossonpor de-fectodelpaquete.)

Modificadoresdemiembrossiendoinstanciasdeobjetos:

final : declaraconstantes(diferenciaa C++ dondesedeclaraconstantesconconst ),aunquelasconstantesno sepuedenmodificarenel transcursodel programa,puedensercalculadasdurantesusconstrucciones;las variablesfinales,aun declaradassin inicial-izacion, tienenqueobtenersusvalorescomomuy tardeenla fasedeconstruccion deunobjetodela clase

static : declaramiembrosde la clasequepertenecena la clasey no a instanciasdeobjetos,esdecir, todoslosobjetosdela claseaccedena la mismacosa

transient : excluyeun miembrodel procesode conversion enun flujo de bytessi elobjetosesalvaal discoo setransmitepor unaconexion (no hayenC++)

volatile : ordenaa la maquinavirtual de Java queno useningun tipo de cacheparael miembro,ası esmasprobable(aunquenogarantizado)quevarioshilos veanel mismovalor deunavariable;declarandovariablesdel tipo long o double comovolatileaseguramosquelasoperacionesbasicasseanatomicas

Modificadoresdemiembrossiendometodos:

abstract : el metodotodavıa no esta completo,esdecir, no sepuedeinstanciarobje-tosantesdequesehayaimplementadoel metodoen unaclasederivada(parecidoa losmetodospurosdeC++)

static : el metodopertenecea la clasey no a un objetodela clase,un metodoestaticopuedeaccedersolamentemiembrosestaticos

final : no sepuedesobreescribirel metodoenunaclasederivada(no hayenC++)

synchronized : el metodoperteneceaunaregioncrıticadel objeto(no hayenC++)

native : proponeunainterfazparallamara metodosescritosenotroslenguajes,suusodependedela implementaciondela maquinavirtualdeJava(nohayenC++,ahı serealizaduranteel linkage)

strictfp : obligaa la maquinavirtual a cumplir el estandardeIEEE paralos numerosflotantes(no hayenC++,ahı dependedelasopcionesdel compilador)

Un metodoabstractono puedeser al mismo tiempo ni final, ni estatico, ni sincronizado,ninativo, ni estricto.

Un metodonativo nopuedeseral mismotiemponi abstractoni estricto.

Nota queel usode final y private puedemejorarlas posibilidadesde optimizacion delcompilador, esdecir, suusoderivaenprogramasmaseficientes.

Page 47: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 47

16.2.6. Estructuras de contr ol

Lasestructurasdecontrolsonigualesa lasdeC++:

if (cond) then expr;

if (cond) then expr else expr;

while (cond) expr;

do expr; while (cond);

for(expr; expr; expr) expr;

switch (expr) 7 case const: ... default: 8

Igual queen C++ sepuededeclararunavariableen la expresion condicionalo dentrode laexpresiondeinicio del buclefor .

AdicionalmenteJava proporcionabreak con unamarcaquesepuedeusarparasalir en unsaltodevariosbuclesintercalados.

mark:while(...) {

for(...) {break mark;

}}

Tambienexisteun continue conmarcaquepermitesaltaral principio deun buclemasalladelactual.

Noexisteelgoto , suusohabitualenC++sepuedeemular(mejor)conlosbreak sy continue sy conlassecuenciastry-catch-finally .

16.2.7. Operadores

JavausalosmismosoperadoresqueC++ conlassiguientesexcepciones:

existe adicionalmente>>> comodesplazamientoa la derechallenandocon cerosa laizquierda

existeel instanceof paracomparartipos

losoperadoresdeC++ relacionadosapunterosno existen

noexisteel delete deC++

noexisteel sizeof deC++

La prioridady la asociatividadsonlasmismasqueenC++.HaypequenasdiferenciasentreJavay C++ si ciertossımbolosestantratadoscomooperadoreso no (p.ej.,los [] ). AdemasJavanoproporcionala posibilidaddesobrecargaroperadores.

Page 48: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 48

16.2.8. Palabras reser vadas

LassiguientespalabrasestanreservadasenJava:

abstract default if private thisboolean do implements protected throwbreak double import public throwsbyte else instanceof return transientcase extends int short trycatch final interface static voidchar finally long strictfp volatileclass float native super whileconst for new switchcontinue goto package synchronized

Ademas las palabrasnull , false y true quesirven comoconstantesno sepuedenusarcomonombres.Aunquegoto y const aparecenenla listaarriba,noseusanenel lenguaje.

16.2.9. Objetos y referencias a objetos

No sepuededeclararinstanciasde clasesusandoel nombrede la clasey un nombreparaelobjeto(comosehaceenC++).La declaracion

ClassName ObjectName

creasolamenteunareferenciaa un objetode dicho tipo. Paracrearun objetodinamicoen elmontonseusael operadornew conel constructordelobjetodeseado.El operadordevuelveunareferenciaal objetocreado.

ClassName ObjectReference = new ClassName(...)

Solo si unaclaseno contieneningun constructorJava proponeun constructorpor defectoquetieneel mismomodificadorde accesoquela clase.Constructorespuedenlanzarexcepcionescomocualquierotrometodo.

Para facilitar la construccion de objetosaun mas,esposibleusarbloquesde codigo sin quepertenezcana constructores.Esosbloquesestanprepuestos(ensuordendeaparencia)delantedeloscodigosdetodoslos constructores.

El mismomecanismosepuedeusarparainicializar miembrosestaticosponiendoun staticdelantedel bloquedecodigo.Inicializacionesestaticasnopuedenlanzarexcepciones.

class ... {...static int[] powertwo=new int[10];static {

powertwo[0]=1;for(int i=1; i<powertwo.leng th ; i++)

powertwo[i]=pow er tw o[i -1 ]< <1;}...

}

Page 49: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 49

Si unaclase,p.ej.,X, construyeun miembroestaticodeotraclase,p.ej.,Y, y al reves,el bloquedeinicializaciondeX estaejecutadosolamentehastala aparenciadeY cuyosbloquesdeinicial-izacion recurrenal X construidoa medias.NotaquetodaslasvariablesenJava siempreestanencerosi todavıa noestaninicializadasexplıcitamente.

No existeunoperadorparaeliminarobjetosdelmonton,esoestareadel recolectordememoriaincorporadoen Java (diferenciacon C++ dondese tiene que liberar memoriacon deleteexplıcitamente).

Para dar pistasde ayudaal recolectorsepuedeasignarnull a una referenciaindicandoalrecolectorquenosevaa referenciardichoobjetonuncajamas.

Lasreferenciasquetodavıano accedenaningunobjetotienenel valornull .

Estapermitidala conversionexplıcitadeuntipo aotromedianteel “cast” contodassusposiblesconsecuencias.

El “cast” esimportanteespecialmenteensuvariantedel “downcast”,esdecir, cuandosesabequealgun objetoesdeciertotipo derivadoperosetienesolamenteunareferenciaa unadesussuper-clases.

Sepuedecomprobarel tipo actualdeunareferenciaconel operadorinstanceof .if( refX instanceof refY ) 7 ... 8

16.2.10. Parametr os

Sepuedepasarobjetoscomoparametrosametodos.

La listadeparametrosjuntoconelnombredelmetodocomponelasignaturadelmetodo.Puedenexistir variasfuncionesconel mismonombre,siemprey cuandosedistinganensussignaturas.La tecnicasellamasobrecargademetodos.

La listadeparametrossiempreesfija, noexisteel conceptodelistasdeparametrosvariablesdeC.

Javapasaparametrosexclusivamenteporvalor. Esosignificaencasodeobjetosquesiempresepasaunareferenciaal objetoconla consecuenciadequeel metodollamadopuedemodificarelobjeto.

Para evitar posiblesmodificacionesde un parametrose puededeclararel parametrocomofinal .

Entonces,no sepuedecambiarlos valoresdevariablesdetipossimplesllamandoa metodosypasarlescomoparametrosvariablesdetipossimples.

16.2.11. Valores de retorno

Un metodoterminasuejecucion entresocaciones:

sehallegadoal final desucodigo

sehaencontradounasentenciareturn

sehaproducidounaexcepcionno tratadaenel mismometodo

Un return conparametro(cuyotipo tienequecoincidir conel tipo delmetodo)devuelveunareferenciaaunavariablededichotipo (o el valorencasodetipossimples).

Page 50: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 50

16.2.12. Arreglos

Losarreglossedeclaransolamenteconsulımitesuperiordadoqueel lımite ınferiorsiempreescero(0).

El codigoint[] vector = new vector[15]

creaunvectordenumerosenterosdelongitud15.

Java compruebasi los accesosa arreglos con ındicesquedandentrode los lımitespermitidos(diferenciacon C++ dondeno hay unacomprobacion). Si sedetectaun accesofuerade loslımitesseproduceunaexcepcion IndexOutOfBoundsException .

Losarreglossonobjetosimplıcitosquesiempreconocensuspropiaslongitudes(values.length )(diferenciaconC++dondeunarreglo noesnadamasqueunpuntero)y quesecomportancomoclasesfinales.

No sepuededeclararloselementosdeunarreglo comoconstantes(comoesposibleenC++).

16.2.13. this and super

Cadaobjetotienepor defectounareferenciallamadathis queproporcionaaccesoal propioobjeto(diferenciaaC++ dondethis esun puntero).

Obviamente,la referenciathis no existeenmetodosestaticos.

Cadaobjeto(menosla claseobject ) tieneunareferenciaa suclasesuperiorllamadasuper(diferenciaaC++ dondeno existe,setieneaccesoa lasclasessuperiorespor otrosmedios).

this y super sepuedenusarespecialmenteparaaccedera variablesy metodosqueestanescondidospor nombreslocales.

Parafacilitar las definicionesde constructores,un constructorpuedellamaren suprimersen-tenciao bien a otro constructorcon this(...) o bien a un constructorde su super-clasecon super(...) (ambosno exiten en C++). El constructorde la super-clasesin paramet-ros esta llamadoen todoslos casosal final de la posiblecadenade llamadasa constructoresthis() encasoqueno hayaunallamadaexplıcita.

La construcciondeobjetossiguesiempreel siguienteorden:

construccion de la super-clase,notaqueno sellamaningun constructorpor defectoquenoseael constructorsinparametros

ejecuciondetodoslosbloquesdeinicializacion

ejecuciondel codigodel constructor

16.2.14. Extender clases

Sepuedecrearnuevasclasesa partir de la extencion de clasesya existentes(en casoquenoseanfinales).Lasnuevasclasessesuelenllamarsub-claseso clasesextendidas.

Unasub-claseheredara todaslaspropriedadesde la clasesuperior, aunquesetienesolamenteaccesodirectoa laspartesdela super-clasedeclaradaspor lo menosprotected .

Page 51: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 51

No sepuedeextenderal mismotiempodemasdeunaclasesuperior(diferenciaa C++ dondesepuedederivardemasdeunaclase).

Se puedesobreescribirmetodosde la super-clase.Si se ha sobreescritouna cierta funcion,automaticamentetodaslasfuncionesconel mismonombreaunconotrassignaturasyanoestanaccesiblesdemododirecto.

Si sequiereejecutardentrode un metodosobreescritoel codigo de la super-clase,sepuedeaccederel metodooriginal conla referenciasuper .

Sepuedecomomuchoextenderla accesibilidaddemetodossobreescritos.Sepuedecambiarlosmodificadoresdel metodo.Tambiensepuedecambiarsi los parametrosdel metodosonfinaleso no,esdecir, final no formapartedela signatura.

Los tiposde lasexcepcionesquelanzaun metodosobreescritotienenqueserun subconjuntodelos tiposdelasexcepcionesquelanzael metododela super-clase.Dichosubconjuntopuedeserel conjuntovacio.

Sesellama a un metododentrode unajerarquıa de clases,seejecutasiemprela version delmetodoquecorrespondeal objetocreado(y no necesariamenteal tipo dereferenciadado)re-spetandosuaccesibilidad.Esta tecnicasellamapolimorfismo.

16.2.15. Clases dentr o de clases

Sepuededeclararclasesdentrode otrasclases.Sin embargo, dichasclasesno puedentenermiembrosestaticosno-finales.

Todoslos miembrosde la clasecontenedoraestanvisiblesdesdela claseinterior (diferenciaaC++ dondehayquedeclararla claseinterior comofriend paraobtenerdichoefecto).

Extenderclasesınterioressehaceigualqueclasesnormales;solamentehayquetenerencuentaqueparaunaclaseınteriorsiemprehacefaltala existenciadeunobjetodesuclasecontenedoraantesdequesepuedaconstruir, esdecir, tienequeserclarodedondevienesusuper .

16.2.16. Clases locales

Dentrode cadabloquede codigo sepuededeclararclaseslocalesquesonvisiblessolamentedentrodedichobloque.

16.2.17. La clase Object

Todoslos objetosdeJava sonextensionesdela claseObject . Los metodospublicosy prote-gidosdeestaclaseson

public boolean equals(Object obj)comparasi dosobjetossoniguales,por defectoun objetoesigual solamenteasi mismo

public int hashCode() devuelve (con alta probabilidad)un valor distinto paracadaobjeto

protected Object clone() throws CloneNotSuportedException de-vuelveunacopiabinariadelobjeto(¡incluyendosusreferencias!)

Page 52: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 52

public final Class getClass() devuelve el objetodel tipo Class querep-resentadichaclasedurantela ejecucion

protected void finalize() throws Throwable seusaparafinalizarelob-jeto,esdecir, avisaral administradordela memoriaqueyano seusadichoobjeto

public String toString() devuelvo unacadenadescribiendoel objeto

Lasclasesderivadasdebensobreecribirlos metodosadecuadamente,p.ej.,el metodoequalssi serequiereunacomparacion binaria.

16.2.18. Clonar objetos

Lo veremoscuandonoshagafalta.

16.2.19. Interfaces

Usandointerface en vez de class sedefineuna interfaz a unaclasesin especificarelcodigodelosmetodos.

Unainterfazno esnadamasqueunaespecificacion decomoalgodebeserimplementadoparaquesepuedausarenotrocodigo.

Una interfaz no puedetenerdeclaracionesde objetosque no son ni constantes(final ) niestaticos(static ). Enotraspalabras,todaslasdeclaracionesdeobjetosautomaticamentesonfinalesy estaticos,aunqueno sehayadescritoexplıcitamente.

Igual que las clases,las interfacespuedenincorporarotrasclaseso interfaces.Tambien sepuedenextenderinterfaces.Nota queesposibleextenderunainterfaz a partir de masde unainterfaz:

interface ThisOne extends ThatOne, OtherOne 7 ... 8Todoslosmetodosdeunainterfazsonimplıcitamentepublicosy abstractos,aunquenosehayadescritoni public ni abstract explıcitamente(y esoesla convencion).

Losdemasmodificadoresnoestanpermitidosparametodoseninterfaces.

Paragenerarun programatodaslasinterfacesusadastienenquetenersusclasesquelasimple-menten.

Una clasepuedeimplementarvariasinterfacesal mismotiempo(aunqueunaclasepuedeex-tendercomomuchounaclase).Seidentificanlasinterfacesimplementadascon implementsdespuesdeunaposibleextension(extends ) dela clase.

Ejemplo:

public interface Comparable {int compareTo(Objec t o);

}

Page 53: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 53

class Something extends Anything implements Comparable {...public int compareTo(Objec t o) {

// cast to get a correct object// may throw exception ClassCastExcep ti on

Something s = (Something)o;... // code to compare to somethings

}

Lasinterfacessecomportancomoclasestotalmenteabstractas,esdecir, quenotienenni miem-brosno-estaticos,nadadiferenteapublico,y ninguncodigono-estatico.

16.2.20. Clases y paquetes

Javavieneconunaampliagamadeclasesy paquetespredefinidos,p.ej.,AWT, Swing . Aunqueno estan disponiblessiempreen todaslas plataformasen susultimas versionesy esopuedederivarencodigonoportable.

Java proporcionala claseString (cadenas)con muchosmetodosya implementados.Si serequieremuchasoperacionesde cadenasquemodificanel contenidode la cadena,mejorusarla claseStringBuffer .

16.2.21. Excepciones

Para facilitar la programacion de casosexcepcionalesJava usael conceptode lanzarexcep-ciones.

Unaexcepcionesunaclasepredefiniday seaccedeconla sentencia

try { ... }catch (SomeExceptionO bj ec t e) { ... }catch (AnotherExcepti onObjec t e) { ... }finally { ... }

El bloquetry contieneel codigonormalpor ejecutar.

Un bloquecatch(ExceptionObject) contieneel codigoexcepcionalpor ejecutarencasodequedurantela ejecucion del codigonormal(quecontieneel bloquetry ) seproduzcala excepcion del tipo adecuado.Puedenexistir masde un (o ningun) bloquecatch parareaccionardirectamentea masde un (ningun) tipo de excepcion. Hay quetenercuidadoen ordenarlas excepcionescorrectamente,es decir, las mas especıficasantesquelasmasgenerales.

El bloquefinally seejecutasiempreunavezterminadoo bienel bloquetry o bienun bloquecatch o bienunaexcepcion no tratadao bienantesdeseguir un break , uncontinue o un return haciafueradela try-catch-finally -sentencia.

Normalmentese extiende la claseException para implementarclasespropiasde excep-ciones,auntambiensepuedederivardirectamentedelaclaseThrowable queeslasuper-clase(interfaz)deException o dela claseRuntimeException .

Page 54: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 54

class MyException extends Exception {public MyException() { super(); }public MyException(St ri ng s) { super(s); }

}

Entonces,unaexcepcion no esnadamasqueun objetoquesecreaenel casodeaparicion delcasoexcepcional.La claseprincipaldeunaexcepcion esla interfazThrowable queincluyeunString paramostrarunalıneadeerrorleıble.

Paraqueun metodopuedalanzarexcepcionesconlas try-catch-finally -sentencias,esimprecindibledeclararlas excepcionesposiblesantesdel bloquede codigo del metodoconthrows ... .

public void myfunc(int arg) throws MyException 7 ... 8Durantela ejecucion deun programasepropaganlasexcepcionesdesdesupuntodeaparicionsubiendolasinvocacionesdelosmetodoshastaquesehayaencontradounbloquecatch queseocupaentratarla excepcion.Enel casodequenohayaningunbloqueresponsable,la excepcionsera tratadapor la maquinavirtual conel posibleresultadodeabortarel programa.

Sepuedenlanzarexcepcionesdirectamentecon la palabrathrow y la creacion de un nuevoobjetodeexcepcion,p.ej.,

throw new MyException("eso es una excepcion");

Tambienlosconstructorespuedenlanzarexcepcionesquetienenquesertratadosenlosmetodosqueusandichosobjetosconstruidos.

Ademasde lasexcepcionesası declaradasexistensiempreexcepcionesquepuedenocurrir enqualquiermomentode la ejecucion del programa,p.ej., RuntimeException o Error oIndexOutOfBoundException . La ocurrenciadedichasexcepcionesreflejanormalmenteun flujo decontrolerroneodel programaquesedebecorrigir antesdedistribuir el programaaposiblesusuarios.

Seusanexcepcionessolamenteparacasosexcepcionales,esdecir, si pasaalgonoesperado.

16.2.22. Paquetes

Siempreexiste la posibilidaddequediferentesfuentesusenel mismonombreparaunaclase.Paraproducirnombresunicossehaintroducidoel conceptodepaquetes.El nombredelpaquetesirvecomoprefijodel nombredela claseconla consecuenciadequecuandosediferencianlosnombresdelospaquetestambiensediferencianlosnombresdelasclases.

Porconvencion seusacomoprefijo el dominioeninternetenordeninversoparalos paquetes.Hay quetenercuidadoen distinguir los puntosen el nombredel paquetecon los puntosqueseparanlosmiembrosdeunaclase.

La pertenenciadeunaclasea un paqueteseindicaenla primerasentenciadeun ficherofuentecon

package Pack.Name;

16.2.23. Conversi on a flujos de bytes

Lo veremoscuandonoshagafalta.

Page 55: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 55

16.3.5 Reflexi on

Java proporcionaparacadaclaseun objeto de tipo Class que se puedeusarparaobtenerinformacionsobrela propiaclasey todossusmiembros.

Ası porejemplosepuedeaveriguartodossusmetodosy modificadores,cualessuclasesuperiory muchomas.

Veremosmascuandonoshagafalta.

16.4. Hilos

Seusanloshilos paraejecutarvariassecuenciasdeinstruccionesdemodocuasi-paralelo.

16.4.1. Crear un hilo

Secreaun hilo conThread worker = new Thread()

Despuesseinicializael hilo y sedefinesucomportamiento.

Selanzael hilo conworker.start()

Aunqueenestaversionsimplenohacenada.Hacefaltasobreescribirel metodorun() especi-ficandoalguncodigoutil.

Yavimosel usodelos hilosenla introduccionaJavaconel simpleejemplodel pingPONG.

16.4.2. La interfaz Runnable

A vecesno esconvenienteextenderla claseThread porquesepierdela posibilidaddeexten-derotro objeto.Esunade las razonespor queexiste la interfazRunnable quedeclaranadamasqueel metodopublic void run() y quesepuedeusarfacilmenteparacrearhilostrabajadores.

class RunPingPONG implements Runnable {private String word;private int delay;

RunPingPONG(Str in g whatToSay, int delayTime) {word =whatToSay;delay=delayTime ;

}

public void run() {try {

for(;;) {System.out.prin t( wor d+" ");Thread.sleep(de la y);

}

Page 56: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 56

}catch(Interrupt edExce pti on e) {

return;}

}

public static void main(String[] args) {Runnable ping = new RunPingPONG("pi ng", 40);Runnable PONG= new RunPingPONG("PO NG", 50);new Thread(ping).st ar t() ;new Thread(PONG).st ar t() ;

}}

Existencuatroconstructoresparacrearhilos usandola interfazRunnable .

public Thread(Runnable target)ası lo usamosen el ejemploarriba,sepasasolamentela implementacion de la interfazRunnable

public Thread(Runnable target, String name)sepasaadicionalmenteun nombreparael hilo

public Thread(ThreadGroup group, Runnable target)construyeunhilo dentrodeungrupodehilos

public Thread(ThreadGroup group, Runnable target, String name)construyeunhilo connombredentrodeungrupodehilos

La interfazRunnable exige solamenteel metodorun() , sin embargo, normalmenteseim-plementanmasmetodosparacrearun serviciocompletoqueestehilo debecumplir.

Aunqueno hemosguardadolasreferenciasdelos hilos enunasvariables,los hilos no caenenlasmanosdel recolectordememoria:siempresemantieneunareferenciaal hilo ensugrupoalcualpertenece.

El metodorun() espublico y enmuchoscasosimplementandoalgun tipo deserviciono sequieredar permisoa otrosejecutardirectamenteel metodorun() . Paraevitar esosepuederecurrira la siguienteconstruccion:

class Service {private Queue requests = new Queue();public Service() {

Runnable service = new Runnable() {public void run() {

for(;;) realService((J ob)r eques ts .t ak e( ));}

};new Thread(service) .s tar t( );

}public void AddJob(Job job) {

requests.add(jo b) ;}

Page 57: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 57

private void realService(Job job) {// do the real work

}}

Crearel servicioconService() lanzaunnuevo hilo queactuasobreunacolapararealizarsutrabajoconcadatareaqueencuentraahı. El trabajoporhacerseencuentraenel metodoprivadorealService() . Unanuevatareasepuedeanadira la colaconAddJob(...) .

Nota: la construccionarribausael conceptodeclasesanonimasdeJava,esdecir, sabiendoqueno seva a usarla claseen otro sitio queno seaqueen su puntode construccion, sedeclaradirectamentedondeseusa.

16.4.3. Sincr onizaci on

EsposibleenJava forzar la ejecucion decodigoenun bloqueenmodosincronizado,esdecir,comomuchoun hilo puedeejecutaralguncodigodentrodedichobloqueal mismotiempo.

synchronized (obj) 7 ... 8La expresionentreparentesisobj tienequeevaluaraunareferenciaaunobjetoo aunarreglo.

Declarandoun metodocon el modificadorsynchronized garantizaquedicho metodoseejecutaininterrumpidamentepor un solo hilo. La maquinavirtual instalaun cerrojo (mejordicho,un monitor)quesecierrade formaatomicaantesdeentraren la region crıtica y queseabreantesdesalir.

Declararunmetodocomosynchronized void f() 7 ... 8

esequivalenteausarunbloquesincronizadoensuinterior:void f() 7 synchronized(this) 7 ... 898

Losmonitorespermitenqueel mismohilo puedeaccederaotrosmetodoso bloquessincroniza-dosdelmismoobjetosinproblema.Seliberael objetodecualquiermodoquetermineel meto-do.

Losconstructoresno sepuedendeclararsynchronized .

No hacefaltamantenerel modosincronizadosobreescribiendometodossıncronosmientrasseextiendeunaclase.Sin embargo, una llamadaal metodode la clasesuperior (con super. )siguefuncionandodemodosıncrono.

Losmetodosestaticostambienpuedenserdeclaradossynchronized garantizandosuejecu-ciondemaneraexclusivaentrevarioshilos.

En ciertoscasosse tiene que proteger el accesoa miembrosestaticoscon un cerrojo.Paraconseguir esoesposiblesincronizarconun cerrojodela clase,por ejemplo:

class MyClass {static private int nextID;...MyClass() {

synchronized(My Cl as s. cla ss ) {idNum=nextID++;

Page 58: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 58

}}...

}

Nota: declararun bloqueo un metodocomosıncronosolopreveequeningun otro hilo puedaejecutaral mismotiempodicharegion crıtica, sin embargo, cualquierotro codigo asıncronopuedeserejecutadomientrastantoy su accesoa variablescrıticaspuededar comoresultadofallosenel programa.

16.4.4. Objetos sıncr onos

Seobtienenobjetostotalmentesincronizadossiguiendolasreglas:

todoslos metodossonsynchronized ,

nohaymiembros/atributospublicos,

todoslos metodossonfinal ,

seinicializasiempretodobien,

el estadodel objeto se mantienesiempreconsistenteincluyiendolos casosde excep-ciones.

16.4.5. Los monitores de Java

Aquı debe venir figura javamon.ps

16.5. Java y seguridad

Muchasvecesse oye queJava es un lenguajeseguro porquees tan estrictocon sustipos yla maquinavirtual de Java puedeprohibir ciertasacciones(como,p.ej.,escribiren el discooaccederaciertosrecursos).

Sin embargo, hayquetenerencuentaqueJava no esmasseguroquela implementacion delamaquinavirtual.

16.6. Atomicidad en Java

Solo lasasignacionesa variablesdetipossimplessonatomicas(long y doubleno sonsimplesenestecontexto, hayquedeclararlasvolatile paraobteneraccesoatomico).

17. Concurrencia en memoria distrib uida

Page 59: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 59

17.1.: Paso de mensajes

Un procesomandaun mensajequeesrecibidopor otro procesoquesueleesperardichomen-saje.El pasode mensajesesimprecindibleen sistemasdistribuidosdadoqueen estecasonoexistenrecursosdirectamentecompartidosparaintercambiarinformacion entrelos procesos.Sin embargo, tambiensi setrabajaconun soloprocesadorpasarmensajesentreprocesosesunbuenmetododesincronizarprocesoso trabajos,respectivamente.Existenmuchasvariantesdeimplementacionesdepasodemensajes.Destacamosunascaracterısticas.

17.1.1. Tipos de sincr onizaci on

El pasodemensajespuedesersıncronoo asıncronodependedelo quehagael remitenteantesdeseguir procesando,masconcretamente:

el remitentepuedeesperarhastaquesehayaejecutadola recepcion correspondientealotro lado;esel metododel rendezvoussimpleo dela comunicacion sıncrona

el remitentepuedeseguir procesandosin esperaral receptor;esel metododela comuni-cacon asıncrona

el remitentepuedeesperarhastaqueel receptorhayacontestadoal mensajerecibido;esel metododel rendezvousextendidoo dela involucracion remota

Bajociertascircunstanciaslosremitentesy losreceptorespuedenimplementarunaesperafinitaparano quedarbloqueadoeternamenteal no llegarinformacionnecesariadel otro lado.

Sobretodoporrazonesdeeficienciaesconvenientedistinguirentremensajeslocalesy mensajesaprocesadoresremotos.

17.1.2. Identificaci on del otr o lado

Sepuedendistinguirvariasposibilidadesencomodosprocesosenvıany recibensusmensajes:

seusannombresunicosparaidentificartantoel remitentecomoel receptorentoncesambaspartestienenqueespecificarexactamentecon queprocesoquierenco-municarse

soloel remitenteespecificael destino,al receptorno le importequienhaenviadoel men-saje(sistemacliente/servidor)

aningunadelasdospartesle interesacualserael procesoal otro lado,el remitenteenvıasumensajeaunbuzon demensajesy el receptorinspeccionasubuzon demensajes

17.1.3. Prioridades

Parael pasodemensajessuusamuchasvecesel conceptodeun canalentreel remitentey elreceptoro tambienentrelosbuzonesdemensajesy suslectores.

Los canalespuedensercapacesdedistinguirentremensajesdediferentesprioridades.Cuandollegaunmensajedealtaprioridad,esteseadelantaatodoslosmensajesquetodavıanosehayantraspasadoal receptor(p.ej.“out-of-band”mensajesenel protocoloftp ).

Page 60: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 60

18. Terminaci on de programas

¿Cualespuedenserlascausaspor lasqueseterminao no seterminaunprograma?

terminar con exito

terminar con excepcion

terminar con suicidio

terminar por asesinato

terminar por redundancia

terminar nunca a proposito

terminar nunca por fallo

Un programasecuencialterminacuandosehaejecutadosuultima instruccion.El sistemaoper-ativo suelesabercuandoocurreeso.

Sin embargo puedeserdifıcil detectarcuandoun programaconcurrenteha terminado,sobretodocuandotambienel sistemaoperativo seadistribuido.

Un programaconcurrenteterminacuandotodassuspartessecuencialeshanterminado.

Si el sistemadistribuido contieneun procesadorcentralquesiempreesta monitorizandoa losdemas,sepuedeimplementarla terminacion igualqueenunsistemasecuencial.

Si el sistemano disponede tal procesadorcentralesmasdifıcil porqueno sepuedeobservarfacilmenteel estadoexactodel sistemadadoqueen especiallos canalesde comunicacion seresistena la inspecciony puedencontenermensajesaun no recibidos.

18.1. Detecci on de terminaci on

Asumimosel siguientemodelodesistemadistribuido:

El sistemaesfiable,esdecir, ni losprocesos/procesadoresni el sistemadecomunicacionprovocanfallos.

Los procesosqueestan conectadosusanun canalbidireccionalparaintercambiarmen-sajes.

Existeun unicoprocesoqueinicia la computacion; todoslos demasprocesossoninicia-dospor unprocesoya iniciado.

Paradetectarla terminaciondetodoslosprocesosacordamoslo siguiente:

seenvıanmensajespararealizarlastareasdel programa

Page 61: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 61

si un procesorecibeunmensajelo tienequeprocesar

seenvıansenalespararealizarla deteccion determinacion

cuandosedecidela terminaciondeun proceso(por la razon quesea)no envıa masmen-sajesa los demas,sinembargo,si recibedenuevo un mensajereanudael trabajo

los canalesparalos mensajesy lassenalesexistensiempreenparesy los canalesde lassenalessiemprefuncionanindependientedelestadodelprocesoo delestadodelcanaldemensajes

Un ejemploparala detecciondeterminacionesel algoritmodeDijkstra-Scholten.

Asumimosprimero que el grafo de los procesos(es decir, el grafo que se establecepor losintercambiosde mensajesentre los procesos)forme un arbol. Estasituacion no es tan raraconsiderandolos muchosproblemasquese puedensolucionarcon estrategias tipo divide-y-venceras.

La deteccion de la terminacion resultafacil: una hija en el arbol manday su madrequehaterminadocuandohayarecibidoel mismomensajede todassushijas y cuandoseha decidoterminartambien.

El programaterminacuandola raız del arbolhaterminado,esdecir, cuandoharecibidotodaslassenalesdeterminaciondetodassushijasy noquedanadamasporhacer. La raız propagaladecisiondequetodospuedenterminardefinitivamentea lo largo del arbol.

Ampliamoselalgoritmoparaquefuncionetambiencongrafosacıclicos.Anadimosacadaaristaun campo“deficit” queseaumentasiemprequesehayapasadoun mensajeentrelos procesosaambosladosdela arista.Cuandosedeseaterminarunproceso,seenvıanpor todassusaristasentrantestantassenalescomoindica el valor “deficit” disminuendoası el campo.Un procesopuedeterminarcuandodeseaterminary todossusaristassalientestengandeficit cero.

El algoritmodeDijkstra-Scholtendesarrolladohastaahoraobviamentenofuncionaparagrafosquecontienencıclos.Sin embargo,sepuedeusarel siguientetruco:

Siemprey cuandoun procesoesiniciado por primeravez, el correspondientemensajecausaunaaristanueva enel grafoqueesla primeraqueconectaa dichoproceso.Si marcamosestasaristasespecialmente,seobservaqueformanun arbolabarcador(“spanningtree”)del grafo.

Aquı debe venir figura arbolabar.ps

El algoritmodedeterminaciondeterminacionprocedeentoncescomosigue:

cuandoun procesodecideterminar, envıa senalessegun los valoresdeficit de todassusaristaentrantesmenosdelasaristasqueformanpartedel arbolabarcador.

unavez obtenidotodoslos deficits (menoslos del arbol) igual a cero,seprocedeigualqueenel casodel arbolsencillo.

19. Tareas de programaci on

Page 62: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 62

Nuestrametaesprogramaruneditorconcurrente,esdecir, unaherramientadondevariosusuar-iospuedeneditarel mismoficheroa la vez.Todosloscambiosdetodoslosusuariossereflejancuantoantesenlasventanasdetodos.

Usamoscomobasedel editoralgunoscomandosdelVI:

1.

x borrala letradebajodel cursorh deplazael cursorunaletrahaciala izquierdaj deplazael cursorunaletrahaciaabajok deplazael cursorunaletrahaciaarribal deplazael cursorunaletrahaciala derechad borraunalineai cambiaamodoinsertarantesdela posiciondelcursorESC terminael modoinsertar

Nosinclinamossiemprea la solucionmasfacil, nuestropropositono eshacerunaherramientacompletay extendidasinoun programasimplequeseacorrectoy quesolucionelos problemasprincipalesdebidosa la concurrencia.

Poreso:

No grabamosel fichero,esdecir, el primerusuarioempiezaconuna“hoja enblanco”yel ultimo descartael texto.

No usamosunservidor, sinoimplementamosel protocolodecomunicacionsobreunanil-lo virtual.

Losusuariospermitidosenla ediciondel texto estanlistadosenunalibreta.

El ordendeprioridad(si noshacefaltaenalgunmomento)seobtienefacilmentea partirdela libreta.

Cuandoun nuevo usuarioseconectaa la sesion sepermiteunarondadesincronizaciontotal.

Existenvariasherramientasquerealizanunatareasimilar, p.ej.:

NetMeetinghttp://www.microsoft.com/netme etin g, comentariossobreas-pectosdeseguridaddeNetMeetingseencuentraporejemploen http://www.shenton.org/˜chris/nasa- hq/netmeeting

Network Text Editor (NTE)http://www- mice.cs.ucl.ac.uk/multimed ia/software/nte

¡Valela penaestudiarsuslimitacionesy problemas!

Page 63: Concurrencia y Distribucion´ · Concurrencia y Distribucion´ Dr. Arno Formella Universidad de Vigo Departamento de Informatica´ Ar´ ea de Lenguajes y Sistemas Informaticos´ E-32004Ourense

DepartamentodeInformatica June3, 2002 63

20. Bib liograf ıa

1. G.R.Andrews.ConcurrentProgramming:PrinciplesandPractice.Benjamin/Cummings,1991.

2. K. Arnold et.al.TheJavaProgrammingLanguage.Addison-Wesley, 3rd Edition,2000.

3. J.C.BaetenandW.P. Wiejland.ProcessAlgebra.CambridgeUniversityPress,1990.

4. M. Ben-Ari.Principlesof ConcurrentandDistributedProgramming.Prentice-Hall,1990.

5. A. BurnsandG. Davies.ConcurrentProgramming.Addison-Wesley, 1993.

6. C. Fencott.FormalMethodsfor Concurrency. ThomsonComputerPress,1996.

7. C.A.R.Hoare.CommunicatingSequentialProcesses.Prentice-Hall,1985.

8. D. Lea.ConcurrentProgrammingin Java. Addison-Wesley, 1997.(Programacion Con-currenteenJava,Addison-Wesley, 2001.)

9. R. Milner. Concurrency andCommunication.Prentice-Hall,1989.

10. R. Milner. Semanticsof ConcurrentProcesses.in J. van Leeuwen(ed.), HandbookofTheoreticalComputerScience.Elsevier andMIT Press,1990.

11. A.W. Roscoe.TheTheoryandPracticeof Concurrency. Prentice-Hall,1997.

12. D. Schmidt,M. Stal,H. Rohnert,F. Buschmann.Pattern-OrientedSoftwareArchitecture,Vol.2,Patternsfor ConcurrentandNetworkedObjects.Wiley, 2000.