concurrencia y distribucion´ · concurrencia y distribucion´ dr. arno formella universidad de...
Post on 01-May-2020
28 Views
Preview:
TRANSCRIPT
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: formella@ei.uvigo.es
3 dejunio de2002
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
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
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
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
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
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.
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
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
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: )
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.
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:
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,
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
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:
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
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
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:
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).
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:
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.
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� ...
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
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
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).
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):
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:
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.
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:
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:
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.
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
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
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.
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:
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:
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)
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
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)
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
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 ");
}}
}
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");
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”.
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
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
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.
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.
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;}...
}
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).
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 .
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!)
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);
}
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 .
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.
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);
}
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) ;}
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++;
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
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 ).
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
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
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!
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.
top related