Guia Didactica Programacion Concurrente
Guia Didactica Programacion Concurrente
Gua Didactica
Programacion Concurrente
(Ingeniera Tecnica Informatica de Sistemas)
Equipo docente:
David Fernandez Amoros
c
2008
David Fernandez Amoros. Todos los derechos reservados.
INDICE
Indice
1. Informacion general
1.1. Presentacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
8
3. Requisitos previos
4. Materiales
10
12
7. Evaluacion
12
12
13
8. Programa
13
13
8.1.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
15
17
8.2.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
19
INDICE
23
8.4.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
23
9. Actividades
24
1 Informacion general
1.
1.1.
Informacion general
Presentacion
1.2.
Introduccion a la asignatura
1.2
Introduccion a la asignatura
con una curva de aprendizaje alta, poca variedad de compiladores y pocas posibilidades
de uso fuera del departamento de defensa de los Estados Unidos de America, donde fue
desarrollado originalmente.
La PC se ha restringido tradicionalmente a unas a reas de aplicacion muy concretas, pero
de una importancia incuestionable:
Sistemas empotrados: Sistemas sencillos, habitualmente sin sistema operativo, en un
hardware especfico, en los que unos programas que se ejecutan concurrentemente leen
unos sensores y toman decisiones como activar o desactivar otros componentes electronicos. Un ejemplo sencillo sera un termostato.
Sistemas operativos: En un sistema operativo multiprogramado lo normal es que haya
varios procesos ejecutandose en paralelo (ya se trate de paralelismo real o simulado). Es
necesario sincronizar dichos procesos para que los programas del sistema y los de los
usuarios puedan compartir los recursos de la maquina. Un caso particular pero especialmente relevante sera el de los sistemas operativos distribuidos.
Sistemas de Gestion de Bases de Datos: Los SS.GG.BB.DD tienen entre sus objetivos
de diseno el proporcionar un acceso eficiente a los datos manteniendo la consistencia
de los mismos. Para permitir el acceso simultaneo de varios programas y mantener al
mismo tiempo la consistencia de los datos entre las transacciones, se aplican tecnicas de
PC.
Computacion en malla: Se utilizan muchos ordenadores, conectados en red, para realizar
un calculo entre todos. El ejemplo mas conocido quiza sea el del proyecto SETI@Home,
en el que ordenadores situados a lo largo de todo el planeta buscan coordinadamente
indicios de vida extraterrestre.
Pese a sus comienzos especializados, en la informatica de consumo se ha popularizado en
los u ltimos tiempos el uso de sistemas multiprocesador. En estas CPUs con dos, tres o cuatro
nucleos, las ventajas de la PC son incluso mas claras que en un entorno monoprocesador, lo
que hace previsible un aumento de la demanda de profesionales con conocimientos solidos en
este campo.
2.
2.1
Objetivos generales
de sincronizacion de procesos concurrentes en el a mbito de la memoria compartida: semaforos, regiones crticas, regiones crticas condicionales y monitores. En los temas siguientes se
introducen los conceptos asociados al paso de mensajes y algunas de las herramientas correspondientes, en concreto buzones e invocacion remota. En todos los temas referentes a herramientas concretas se estudian soluciones a los dos problemas-tipo de la PC, que pueden verse
como esquemas algortmicos: El problema de los lectores y escritores y el problema de los
productores y consumidores. Otro aspecto transversal es el de la equivalencia de las distintas
herramientas; el comportamiento de cualquier herramienta puede simularse mediante otra, a
pesar de lo cual todas ellas poseen caractersticas distintivas que hacen que unas sean mas
apropiadas que otras frente a un problema concreto.
2.1.
Objetivos generales
Presentar los problemas derivados de la ejecucion simultanea de tareas
Introducir esquemas algortmicos generales aplicables a numerosos problemas
Adiestrar al estudiante en el empleo de diversas herramientas de sincronizacion de procesos
Desarrollar la capacidad de analisis y diseno de soluciones a un problema de simulacion
mediante el uso de tecnicas aprendidas en la asignatura
3.
Requisitos previos
4 Materiales
resulta conveniente. Con esta asignatura hay un cierto grado de solapamiento, puesto que en
ella se dedica un tema de estudio a la PC. Evidentemente, el enfoque de aquella resulta mas
ligero, por lo que su estudio podra proporcionar una introduccion a los temas desarrollados
en esta asignatura.
Dejando de lado algunas cuestiones de estilo de programacion, los problemas habituales
de la asignatura no suelen estar relacionados con un aprendizaje deficiente de asignaturas anteriores, por lo que no se considera necesario reforzar capacidades anteriores. Se recomienda
que se implementen y se prueben los problemas de los ejercicios y de la practica obligatoria,
por lo que se asume cierta destreza en la instalacion y utilizacion de entornos de compilacion
y desarrollo.
4.
Materiales
Los contenidos de la asignatura se desarrollan completamente en el texto base:
Programacion Concurrente, Palma et al., Editorial Thomson, 2003.
En el texto base se discuten los conceptos fundamentales de la asignatura, as como numerosos ejemplos de aplicacion y ejercicios resueltos. Tambien se proponen problemas por
resolver, de modo que resulta un texto adecuado para el aprendizaje a distancia. Es cierto que
en algunas de sus consideraciones practicas, como la implementacion en Java de algunas de
las tecnicas, ya esta obsoleto debido al rapido avance de la tecnica, pero afortunadamente, la
presentacion de los conceptos y tecnicas es completamente actual.
El alumno encontrara en el curso virtual materiales adicionales para el seguimiento de la
asignatura. Entre ellos, enunciados de examenes anteriores, examenes resueltos, demostraciones de simulaciones realizadas aplicando las tecnicas objeto de estudio, as como compiladores
y documentacion sobre lenguajes de programacion con posibilidades de concurrencia. Como
resultado de un seguimiento de las dificultades de los alumnos en relacion con la asignatura, se
ha realizado un lista de preguntas frecuentes para optimizar el proceso de aprendizaje y evitar
la sobrecarga del equipo docente, que redunda en unos tiempos de respuesta mas largos a las
dudas del alumnado. Una parte del mismo material se ha incluido en el DVD de la Escuela Superior de Ingeniera Informatica, para aquellos alumnos a los que les resulte mas conveniente
este medio.
La bibliografa complementaria consta de las siguientes obras:
Programacion concurrente. 2a edicion corregida, Perez Martnez, J. E., Madrid, Editorial Rueda, 1990.
9
Durante algunos anos, esta obra fue el texto base de la asignatura. Esta obra peca quizas
de un enfoque un tanto teorico para una disciplina aplicada como es la programacion,
pero supone un excelente contrapunto al estudio del texto base, ya que, a menudo, la
bibliografa basica menciona rapidamente aspectos vitales, como pueden ser la necesidad absoluta de la exclusion mutua en los accesos no compatibles, o las causas de los
interbloqueos y las polticas para evitarlo, pero no los subraya. Este libro profundiza
teoricamente y ejemplifica los conceptos. El analisis de los puntos fuertes y debiles de
cada una estas obras en relacion con la otra permite obtener una vision de conjunto de
la disciplina mucho mas completa, y altamente recomendable, que la proporcionada por
cada una de ellas individualmente.
Principles of Concurrent and Distributed Programming. 2o Edicion, Ben-Ari, M., AddisonWesley, 2006
Mordechai Ben-Ari es una de las figuras de referencia de la PC actual. Este matematico
israel, premiado por sus contribuciones a la ensenanza de la informatica ha sido un
activo colaborador en el desarrollo del lenguaje Ada. Una prueba de lo influyente de
esta obra, desde la primera edicion en 1990, la da la mera comparacion de su ndice con
el de las dos obras citadas anteriormente.
Ada for Software Engineers, Ben-Ari, M., John Wiley & Sons, 1998.
Este libro proporciona una introduccion al lenguaje Ada de la mano de unos los expertos en el campo de la computacion distribuida. Las caractersticas concurrentes forman
parte de los principios de diseno de Ada, hecho este que lo diferencia de la mayora de
los lenguajes de programacion con posibilidades de concurrencia, en las que estas no
suponen mas que un anadido a posteriori.
5.
Una primera lectura rapida del libro puede proporcionar una adecuada vision de conjunto
de los problemas que se van a tratar. En esta primera lectura se pueden ignorar los apartados
relativos a la puesta en practica de la teora en los diversos lenguajes considerados (PASCALFC, Java y Ada). La primera unidad didactica se corresponde con parte de los tres primeros
captulos del texto base, que pueden considerarse como una introduccion extendida a los conceptos fundamentales de la PC. La informacion relevante de estos captulos puede ser extrada
en la primera lectura, de forma que no se precise una relectura mas adelante.
La segunda unidad didactica trata las diversas herramientas para manejar la concurrencia.
La tercera consiste en las soluciones a problemas de aplicacion. Estas dos unidades estan
entremezcladas en el texto. Esta parte del libro puede estudiarse siguiendo el esquema de
distribucion del tiempo de la siguiente seccion, o bien leerse en orden ya que, despues de
10
11
Unidad
Didactica
I
II
III
Temario
Horas de estudio
Teora Practica
Tema 1. Introduccion
2
Tema 2. Procesos vs. hilos
1
Tema 3. Exclusion mutua
2
Tema 4. Semaforos
3
Tema 5. Regiones Crticas Condicionales
2
Tema 6. Monitores
3
20
Tema 7. Buzones
3
Tema 8. Invocacion Remota
3
Tema 9. Equivalencia de Herramientas
3
Tema 10. Problemas de aplicacion
5
Figura 1: Temporizacion de la asignatura
6.
7.
7.1.
Evaluacion
Pruebas de evaluacion
7.2
Criterios de calificacion
tutor pueden consultar sus dudas sobre la practica en el foro correspondiente del curso virtual.
La no superacion de la practica en una convocatoria conlleva el suspenso en dicha convocatoria, por lo que si las nota de la practica esta disponible antes de los examenes y no ha sido
superada, no tiene sentido realizar la prueba presencial.
7.2.
Criterios de calificacion
8.
Programa
La asignatura se articula a traves de tres bloques tematicos:
Bloque tematico 1: Introduccion y conceptos basicos
Bloque tematico 2: Herramientas para manejar la concurrencia
Bloque tematico 3: Problemas de aplicacion
Estos bloque tematicos se describen en detalle a continuacion.
8.1.
8.1
8.1.1.
Objetivos
Tras estudiar este bloque tematico, el estudiante debera haber comprendido las diferencias
esenciales entre la PC y la secuencial, as como ser consciente de las diferentes arquitecturas
fsicas de los sistemas en los que puede emplearse la PC. Una de estas caractersticas anadidas
es el concepto de estado del de un proceso. En programacion clasica los estados de un programa son limitados; el sistema operativo carga y lanza el programa, que se ejecuta hasta su
finalizacion. En PC cada proceso o hilo es un correlato del programa secuencial, pero puede
encontrarse en un conjunto de estados mayor. Estos estados adicionales se derivan del hecho
de que los procesos tienen que sincronizarse entre ellos, lo que a menudo significa que algunos
de ellos deben esperar a que otros hayan realizado parte de su tarea. El otro gran problema de
la PC es el de la exclusion mutua. Dos procesos no deben acceder concurrente a un mismo
recurso (como una variable compartida o un periferico) de forma no compatible. Una vez que
un programa concurrente se sincroniza en sus diversas partes correctamente y preserva la exclusion mutua a los recursos no compartibles, se puede considerar correcto. Sin embargo, hay
otros problemas graves que pueden hacer poco aceptable un programa concurrente correcto.
Algunos de estos problemas son la inanicion, el establecimiento de turnos, la baja concurrencia, la espera activa y el interbloqueo. El interbloqueo se trata extensamente en el libro de
Perez Garca, donde se discuten tecnicas diferenciadas para detectarlo, evitarlo y prevenirlo.
El estudiante debera ser capaz de identificar estas situaciones para poder evitarlas empleando las herramientas descritas en el segundo bloque tematico.
Temas
1. INTRODUCCION
Conceptos fundamentales de la programacion concurrente
Concepto de programacion concurrente
Beneficios de la programacion concurrente
Concurrencia y arquitecturas hardware
Especificacion de ejecucion concurrente
Caractersticas de los sistemas concurrentes
Problemas inherentes a la programacion concurrente
2. PROCESOS vs. HILOS
Procesos
Hilos
14
8.1
8.1.2.
Tema 1 Introduccion
La introduccion a la Programacion Concurrente, como toda la asignatura, puede estudiarse por el libro de Palma et al., en adelante texto base. La secciones que proporcionan
una introduccion a los conceptos fundamentales de la PC, son la 1.1 (introduccion) junto
con la 1.2 (concepto de PC), 1.3 (beneficios de la PC), 1.4 (concurrencia e arquitecturas
hardware), 1.5 (especificacion de ejecucion concurrente), 1.6 (caractersticas de los sistemas concurrentes), 1.7 (problemas inherentes a la PC) y 1.8 (correccion de programas
concurrentes).
El estudio de este tema debe proporcionar al estudiante una vision de conjunto de la problematica de la PC y de algunas caractersticas diferenciales respecto a la programacion
secuencial. En particular, las diferentes arquitecturas hardware posibles, el concepto de
traza de ejecucion y el indeterminismo tienen una influencia determinante en PC. Junto a
los beneficios presentados de la PC, hay que ser consciente de los problemas asociados,
que pueden ser de diversos tipos.
Lo mas importante que hay retener de este tema es que un programa concurrente no
debe hacer ninguna suposicion sobre la arquitectura del sistema en el que se ejecuta. Un
programa concurrente se puede ejecutar en un entorno monoprocesador multiprogramado, en el cual no se produce concurrencia real sino que se simula. Sin embargo, tambien
es frecuente (quiza lo mas frecuente en nuestros das) que la maquina cuente con varios
procesadores, de manera que, de hecho, haya varios procesos ejecutandose en el mismo
momento.
El programador, en principio, solo debera preocuparse de saber si la arquitectura admite
memoria compartida o, por el contrario, se trata de un sistema distribuido. En el primer
caso, todas las primitivas de sincronizacion pueden ser consideradas, en el segundo, solo
las herramientas basadas en paso de mensaje son admisibles.
15
8.1
Las condiciones de Bernstein pueden ayudar a determinar que es lo que se puede ejecutar
de forma concurrente y lo que no, aunque como resumen, se puede decir que cualquier
numero de procesos puede leer de un determinado recurso de forma concurrente. Sin
embargo, el que haya un proceso escribiendo en el recurso lo hace incompatible tanto
con otros procesos escritores como con procesos lectores.
Esta cuestion esta estrechamente relacionada con la del indeterminismo. Si bien el indeterminismo en programacion no es negativo per se (imaginemos, por ejemplo, un
generador de numeros pseudoaleatorios) un programa concurrente querra en la mayora
de los casos mantener cierta coherencia en los datos. En el ejemplo de la subseccion
1.6.2, vemos como un acceso no controlado a una variable hace que el valor de la misma
sea impredecible. Pensemos ahora en un programa que controle el funcionamiento de
una red de cajeros automaticos. Podemos querer cierta concurrencia, pero seguramente
no queremos que se cree ni se destruya dinero en el proceso. La forma correcta de enfocar el problema tiene que garantizar el acceso en exclusion mutua a las cuentas en los
accesos incompatibles con las condiciones de Bernstein.
Esta cuestion es lo suficiente importante como para repetirla una vez mas: Una variable
compartida debe ser accedida siempre en exclusion mutua, salvo en los casos en los que
se asegure que no hay ningun otro proceso intentando modificar dicha variable al mismo
tiempo. En la practica, esto significa que las variables compartidas deben accedidas (ya
sea para leer o para modificar sus valores) en exclusion mutua, salvo que se desarrolle
un esquema de lectores y escritores, objeto de estudio del tercer bloque tematico.
Tema 2 Procesos vs. hilos
En el segundo captulo del libro de Palma et al. se profundiza en las diferencias entre
procesos e hilos en las secciones 2.1 (procesos) y 2.3 (hilos) Los conceptos mas importantes de este tema son:
La distincion entre programa, proceso e hilo.
El concepto de estados de un proceso o hilo y su ciclo de vida.
Los grafos y diagramas de precedencia.
Los problemas de la PC, en particular la exclusion mutua y la condicion de sincronizacion.
Excepcion hecha de las dos secciones mencionadas, el resto de este captulo del libro no
esta muy relacionado con el contenido de la asignatura. Contiene multitud de detalles
tecnicos que son a la vez demasiado avanzados y relativamente irrelevantes a la hora de
comprender conceptualmente la asignatura. En algun caso la informacion all expuesta
puede servir para el estudiante a la hora de codificar y ejecutar sus programas concurrentes.
Tema 3 Exclusion mutua
16
8.2
En la seccion 3.1 se hace una introduccion al problema. En la 3.2 (tipos de sincronizacion y su solucion) se plantea el problema de la exclusion mutua y su division entre
soluciones con espera activa y sin espera activa. Tambien se plantea el problema de la
condicion de sincronizacion. En la seccion 3.3 (soluciones con espera ocupada) excepto
3.3.5 (algoritmo de Eisenberg-McGuire) y 3.3.6 (algoritmo de Lamport) se estudian varios algoritmos, algunos de ellos incorrectos, otros correctos pero con problemas inaceptables y finalmente algunas soluciones aceptables desde el punto de vista teorico basadas
en espera activa. Al terminar de estudiar este tema, los conocimientos mnimos que se
deben haber adquirido son:
Las diferencias principales entre las soluciones con espera activa y sin esperada
activa.
Ser capaz de distinguir una solucion con espera activa correcta al problema de
la exclusion mutua de una incorrecta. Tambien distinguir, entre las correctas, las
aceptables de las inaceptables y poder explicar por que (alternancia, espera infinita,. . . ).
Las soluciones hardware explicadas en el texto base quedan fuera del a mbito de la asignatura. Lo u nico que el estudiante requiere saber es que todas las soluciones software
al problema de la exclusion mutua son de una ineficiencia tal que resulta evidente que
la exclusion mutua debe implementarse a nivel de hardware. La forma concreta de estas soluciones hardware de bajo nivel es irrelevante para nosotros, que nos centraremos
en como aprovechar las posibilidades para la exclusion mutua de las herramientas para
manejar la concurrencia que son el objeto del siguiente bloque tematico.
8.2.
En este bloque se discuten diversos conjuntos de herramientas que se han propuesto teoricamente para manejar la concurrencia. Dichas herramientas estan implementadas en proporcion desigual en los lenguajes de programacion. Mientras algunas de ellas, como los semaforos, han sido aceptadas de forma casi universal, otras han retenido su condicion de propuestas
mas teoricas. Es digno de mencion sin embargo, que otras han superado este status en fechas
relativamente recientes, como es el caso de la programacion orientada a sucesos o eventos,
popularizada con el uso de las interfaces graficas de usuario y la programacion orientada a
objetos. El proceso inverso, conjuntos de herramientas diferentes de los clasicos, pero implementados por los lenguajes de uso frecuente, como podra ser el objeto protegido de Ada y las
primitivas wait y notify de Java, tambien son frecuentes. En este bloque tematico se estudia
tambien como superar esta separacion entre propuestas teoricas y lo que de verdad esta disponible a la hora de programar. La PC es un campo que evoluciona rapidamente, por lo que
el estudiante comprobara que es difcil establecer cuales son dichas diferencias. El caso de
17
8.2
Java es paradigmatico en este sentido, ya que implementa de forma nativa primitivas de concurrencia no disponibles anteriormente en dicho lenguaje a una velocidad sorprendente, que
convierte en obsoletas algunas de las recomendaciones del texto base.
Todas las herramientas para manejar la concurrencia tienen la misma potencia y expresividad. No hay nada que pueda hacerse con una de ellas que no pueda hacerse con otra. Sin
embargo, los distintos planteamientos pueden producir resultados muy diferentes en cada problema concreto. La eleccion de una de ellas para un problema concreto puede venir forzada por
el planteamiento o por el lenguaje, ser una cuestion de preferencias personales o el resultado
de un compromiso entre elegancia y eficiencia.
8.2.1.
Objetivos
El estudiante debera familiarizarse con estas herramientas y ser consciente de sus diferencias. Las caractersticas de una herramienta concreta, o la simulacion de una de ellas mediante
la otra suelen ser objeto de evaluacion por parte del equipo docente.
Temas
4. SEMAFOROS
Introduccion
Definicion de un semaforo
Inconvenientes de los semaforos
5. REGIONES CRITICAS CONDICIONALES (RCC)
Introduccion
Definicion de RCC
Inconvenientes de las RCC
6. MONITORES
Introduccion
Definicion de monitor
Condicion de sincronizacion
Semantica de la operacion resume
7. BUZONES
18
8.3
Introduccion
Identificacion en el proceso de comunicacion
Sincronizacion
Canal de comunicacion y mensajes
Espera selectiva
Funcionamiento de los buzones
REMOTA
8. INVOCACION
Introduccion
Funcionamiento de la invocacion remota
9. EQUIVALENCIA DE HERRAMIENTAS
8.3.
Tema 4 Semaforos.
Los semaforos pueden estudiarse en el captulo 4 del texto base, en concreto en las
secciones 4.1 (introduccion), 4.2 (definicion de un semaforo), y 4.6 (inconvenientes del
mecanismo de los semaforos).
Los semaforos son indiscutiblemente la herramienta de PC mas popular y mas extendida.
Todos los sistemas operativos multiprogramados estan programados usando semaforos
como herramienta de sincronizacion entre procesos. Las razones son claras: Se trata de
una herramienta de bajo nivel que se puede implementar de forma casi inmediata por
hardware en cualquier arquitectura que lo admita y ademas permite un grado de control y flexibilidad que no es posible con ninguna otra herramienta de sincronizacion.
Ademas, practicamente todos los lenguajes de programacion con posiblidades de concurrencia los implementan de forma nativa, as que un programa concurrente concebido
con semaforos sera facilmente portable a cualquier lenguaje y cualquier plataforma, al
menos en lo que se refiere a los aspectos concurrentes.
Por otro lado, las desventajas de los semaforos son considerables. Se trata de una herramienta de muy bajo nivel logico. Un programa concurrente con unos pocos semaforos
puede ir desde lo difcil de seguir por parte de un eventual lector a lo directamente incomprensible. Es facil cometer errores y puede resultar complejo encontrarlos. En PC,
el mero hecho de que un programa se ejecute sin problemas durante un buen rato, no es
o bice para que falle al instante siguiente. Los fallos pueden ser de una sutileza desconocida en la programacion secuencial.
Un error frecuente con respecto a los semaforos, es pensar que despues de ejecutar la
sentencia signal sobre un semaforo, un proceso cede la ejecucion a otro. Eso no solo no
19
8.3
es as, sino que raras veces ocurre. Basta releer la semantica de la operacion signal para
comprenderlo. Como explicacion adicional de por que no hay motivo para que ocurra
esto, basta pensar en un ordenador con dos procesadores y dos procesos. Si uno de ellos
ejecuta un signal, no hay ninguna razon para que el proceso ceda la CPU al otro proceso,
ya que ambos pueden seguir en ejecucion de forma concurrente.
Es un hecho digno de mencion que las secciones del libro dedicadas a la simulacion
de semaforos mediante las primitivas de Java son tanto obsoletas como posiblemente
incorrectas. Desde hace algunas versiones de Java existe la clase semaphore de forma
nativa. Por otro lado, la simulacion basada en las antiguas primitivas de Java; wait,
notify y notifyall tienen el inconveniente de que al llamar a notify o notifyall, el hilo
que sale del estado bloqueado (del llamado waiting set) se elige de manera aleatoria, lo
cual es contradictorio con la definicion de los semaforos que implica la existencia de
una cola, es decir, que el primero en entrar es el primero en salir. Hay que notar que esta
diferencia de funcionamiento es lo bastante sutil como no afectar de forma perceptible el
comportamiento de los programas, por lo que la simulacion puede usarse en la practica
sin problemas, pese a que ya no hay razon para no usar la implementacion nativa de los
semaforos.
Tema 5 Regiones crticas condicionales
Las regiones crticas condicionales (RCC) se explican en el captulo 5 del texto base,
en particular en las secciones 5.1 (introduccion), 5.2 (definicion de RCC) y 5.5 (inconvenientes del mecanismo de RCC). Las regiones crticas a secas se pueden considerar
como un caso particular de region crtica condicional en la que la condicion siempre es
cierta.
Las regiones crticas condicionales son una herramienta de nivel conceptual superior a
los semaforos. Por algun motivo, es raro que esten implementadas de forma nativa en
lenguajes reales. En cualquier caso, permiten soluciones bastante elegantes para algunos
problemas de PC que resultaran enrevesadas con semaforos. Una diferencia interesante
es el uso de dos colas para bloquear los procesos. Ademas de la cola principal, existe una segunda cola, llamada cola de eventos, que permite que aquellos procesos que
obtuvieron la exclusion mutua y despues la devolvieron por no cumplir la condicion,
tengan preferencia a la hora de reevaluarla ante los procesos que llegan al comienzo de
la region.
Tema 6 Monitores
El temario sobre los monitores se ajusta a lo explicado en el captulo 6 del texto base,
concretamente las secciones 6.1 (introduccion), 6.2 (definicion de monitor), 6.3 (condicion de sincronizacion en monitores), y 6.6 (semantica de la operacion resume).
Los monitores representan el nivel mas elevado en terminos de abstraccion conceptual
en lo que respecta a herramientas de sincronizacion de memoria compartida. Esto los
20
8.3
situa en el extremo opuesto a los semaforos, lo que puede observarse en lo complicado que resulta simular un monitor mediante semaforos. Los monitores no han gozado
historicamente de un gran apoyo en terminos de implementacion en lenguajes populares.
El mecanismo de la exclusion mutua es automatico en los procedimientos del monitor,
por lo que el e nfasis se situa logicamente en la sincronizacion. A este respecto, la operacion resume admite cuatro semanticas operacionales distintas. Nosotros adoptaremos
la misma que el texto base, la denominada desbloquear y espera urgente. Con esta
semantica, el proceso que ejecuta una operacion resume sale del monitor y va inmediatamente a una cola llamada cola de cortesa.
Probablemente este comportamiento es que el despista a muchos estudiantes cuando
piensan que un proceso que ejecuta un signal sobre un semaforo tambien se bloquea, lo
que, como ya hemos mencionado, no es cierto. La situacion es completamente diferente.
Aunque tengamos muchos procesadores, la caracterstica principal del monitor es que
solo un proceso puede estar activo dentro de un procedimiento del monitor, de modo
que si se quiere despertar a otro proceso que se quedo bloqueado cuando estaba dentro
del monitor, hay que tomar una decision, pero no pueden estar ejecutandose los dos al
mismo tiempo.
Cuando un proceso ejecuta resume dentro de un monitor pueden pasar dos cosas. La
primera es que no haya ningun proceso bloqueado en la cola de cortesa asociada a
la variable de condicion. En ese caso la sentencia resume no tiene efecto. La otra es
que s haya procesos. Un comentario incorrecto, pero frecuente, es que el proceso que
ejecuta el resume sale del monitor y entra en la cola de cortesa hasta que algun proceso
ejecute resume, momento en el cual el proceso volvera al monitor. La cola de cortesa
es, en efecto, una cola, por lo que si se ejecutan varios resume seguidos, un proceso que
ejecuto resume despues que otros puede tardar bastante en volver a entrar en el monitor;
es decir, no volvera al monitor al primer resume, sino cuando le toque.
La seccion del libro sobre monitores en Java esta totalmente desfasada, ya que desde
hace unas pocas versiones los monitores estan implementados en Java de forma casi
nativa. Una forma sencilla de implementarlos es utilizando las clases Lock y Condition.
Los equivalentes de delay y resume seran los metodos await y signal de Condition.
Un error frecuente con los monitores es usarlos para simular semaforos, definiendo unos
procedimientos exportados wait y signal, para despues utilizar estos wait y signal para
enmarcar una region crtica. Es obvio que resulta mucho mas logico aprovechar el hecho
de que los procedimientos del monitor se ejecutan en exclusion mutua para hacer un
procedimiento que implemente la region crtica. Por otra parte, es un error que demuestra
poca familiaridad con el funcionamiento de los monitores.
Tema 7 Buzones
Los buzones corresponden a los captulos 7 y 8 del texto base. En el captulo 7 se siembran las bases para la comprension de la herramienta buzones, explicando los mecanismos de paso de mensaje. Entran en el temario las secciones 7.1 (introduccion), 7.2
21
8.3
(identificacion en el proceso de comunicacion), 7.3 (sincronizacion), 7.4 (canal de comunicacion y mensajes) y 7.6 (espera selectiva). Los buzones propiamente dichos se
explican en el captulo 8, en la seccion 8.1 (introduccion).
En este tema se entra en el campo de las herramientas basadas en paso de mensajes, en
contraposicion a las herramientas basadas en memoria compartida. Las herramientas de
paso de mensajes son las u nicas que se pueden utilizar en arquitecturas distribuidas.
Aunque nada evita en principio utilizar variables compartidas, no es recomendable, ya
que supone una restriccion innecesaria y que priva al programa de la posibilidad de
ejecutarse en sistemas distribuidos. Los buzones en s se suelen declarar en el programa
principal, es decir, estan declarados de forma global, pero no se considera que sean
variables globales, sino mecanismos de comunicacion. Por esa razon, el mero hecho de
usar buzones no significa utilizar memoria compartida.
Conviene recordar que los buzones son herramientas bloqueantes. Si un proceso intenta leer de un buzon vaco, quedara bloqueado hasta que otro proceso escriba en dicho
buzon. Una forma de evitar esta situacion es usar adecuadamente la funcion EMPTY. Si
el buffer es de tamano finito, las operaciones de escritura en el buzon tambien provocan
bloqueo cuando el buffer asociado este lleno. Una excepcion a ambas situaciones es el
uso de la sentencia SELECT.
Otro error comun, quizas influencia de la herramienta canales, es usar un buzon distinto
por cada dos procesos que quieran comunicarse entre ellos. Un mismo buzon puede ser
utilizado por todos los procesos. Un u ltimo error comun es olvidar que la comunicacion
en los buzones puede ser bidireccional. Un proceso puede utilizar un mismo buzon tanto
para leer como para escribir en e l.
Tema 8 Invocacion remota
La herramienta conocida como rendez-vous, cita de Ada o invocacion remota se explica
en el captulo 10 del texto base, en las secciones 10.1 (introduccion) y 10.2 (invocacion
remota).
La invocacion remota es la herramienta de mas alto nivel conceptual de todas las herramientas de sincronizacion basadas en paso de mensajes. Mediante la invocacion remota,
un proceso puede ejecutar un procedimiento de otro proceso que ademas puede (y suele)
estar ejecutandose en otra maquina. La invocacion remota es la herramienta concurrente
mas claramente enfocada al desarrollo de aplicaciones cliente-servidor.
Una diferencia sustancial de la invocacion remota respecto a cualquier otra herramienta
de PC, es que el que uso de invocacion remota suele llevar parejo el uso de procesos adicionales que actuan como servidor o controlador. En particular, la simulacion de otras
herramientas de sincronizacion mediante invocacion remota implica la creacion de nuevos procesos. A este respecto, la simulacion de un semaforo mediante invocacion remota
en la pagina 332 del texto base es bastante clarificadora.
22
8.4
8.4.
8.4.1.
Objetivos
Reflexionar sobre el uso de cada herramienta y despejar dudas sobre su funcionamiento.
Al completar este bloque tematico, se espera que el estudiante sea capaz de identificar
un problema-tipo si se enfrenta a uno en alguna de las pruebas de la asignatura.
8.5.
9 Actividades
9.
Actividades
24