Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DepartamentodeIngenieraTelemtica
Centro de Tecnologa Mdica
http://www.ctm.ulpgc.es
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Conceptos Fundamentales
La idea de programacin concurrente siempre ha estado asociada a los sistemas operativos: Un slo procesador de gran capacidad deba repartir su tiempo entre muchos usuarios. La programacin de estos sistemas se haca a bajo nivel (ensamblador). Posteriormente apareceran lenguajes de alto nivel con soporte para este tipo de programacin. Su utilizacin y potencial utilidad se apoya en: threads o hilos, java e internet. Definicin: Se habla de concurrencia cuando ocurren varios sucesos de manera contempornea. En base a esto, la concurrencia en computacin est asociada a la ejecucin de varios procesos que coexisten temporalmente.
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Programacin Concurrente Para definirla correctamente, debemos diferencias entre programa y proceso. Programa: Conjunto de sentencias/instrucciones que se ejecutan secuencialmente. Se asemeja al concepto de clase dentro de la POO. Es por tanto un concepto esttico. Proceso: Bsicamente, se puede definir como un programa en ejecucin. Lneas de cdigo en ejecucin de manera dinmica. Se asemeja al concepto de objeto en POO.
P2(download) P1(mail)
S.O.
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Concurrencia La concurrencia aparece cuando dos o ms procesos son contemporneos. Un caso particular es el paralelismo (programacin paralela).
P1 P2 P3
tiempo
Los procesos pueden competir o colaborar entre s por los recursos del sistema. Por tanto, existen tareas de colaboracin y sincronizacin. La programacin concurrente se encarga del estudio de las nociones de ejecucin concurrente, as como sus problemas de comunicacin y sincronizacin.
Programacin Concurrente: Conceptos fundamentales
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Solucin a problemas de esta naturaleza. Existen algunos problemas cuya solucin es ms fcil utilizando esta metodologa. - Sistemas de control: Captura de datos, anlisis y actuacin (p.ej. sistemas de tiempo real). - Tecnologas web: Servidores web que son capaces de atender varias peticiones concurrentemente, servidores de chat, email, etc. - Aplicaciones basabas en GUI: El usuario hace varias peticiones a la aplicacin grfica (p.ej. Navegador web). - Simulacin: Programas que modelan sistemas fsicos con autono-ma. - Sistemas Gestores de Bases de Datos: Cada usuario un proceso.
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Concurrencia y hardware
Hasta ahora slo hemos hablado del software, aunque el hardware y su topologa es importante para abordar cualquier tipo de problema. Sistemas monoprocesador. Podemos tener concurrencia, gestionando el tiempo de procesador para cada proceso.
Tiempo en la CPU
Sistemas multiprocesador. Un proceso en cada procesador. stos pueden ser de memoria compartida (fuertemente acoplados) o con memoria local a cada procesador (dbilmente acoplados). Un ejemplo muy conocido y til son los sistemas distribuidos (p.ej. Beowulfs). En relacin a la concurrencia se pueden clasificar en aquellos que funcionan con variables/memoria compartida o paso de mensajes.
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
En resumen:
Qu se puede ejecutar concurrentemente? x=x+1; La primera instruccin se debe ejecutar antes de la y=x+1; segunda!! x=1;y=2;z=3; El orden no interviene en el resultado final!!
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Condiciones de Bernstein Para que dos conjuntos de instrucciones se puedan ejecutar concurrentemente se tiene que cumplir que: La interseccin entre el conjunto de variables leidas por uno, con el conjunto de variables que escribe el otro, debe ser nulo. Y viceversa. La interseccin del conjunto de variables que escribe uno y el conjunto que escribe el otro, debe ser nulo. Ejemplo: Denotamos por L(lectura) y E(escritura)
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Indeterminismo: El orden parcial produce consecuentemente un comportamiento indeterminista. Es decir, repetidas ejecuciones sobre un mismo conjunto de datos resultan diferentes resultados.
Cmara
Lector
buffer
Gestor
buffer
Impresin
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Procesos
Habamos definido un proceso como un programa en ejecucin. Pero, cmo se ejecuta?, cundo?, finaliza?, nace, crece y se reproduce?.
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Procesos
Habamos definido un proceso como un programa en ejecucin. Pero, cmo se ejecuta?, cundo?, finaliza?, nace, crece y se reproduce?. Ciclo de vidad de un proceso
nacimiento finalizado
listo/ready
ejecucin
CPU
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Espacio de usuario
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Cada proceso tiene sus propias caractersticas: cdigo, variables, id, contadores, pila, etc. Son monohilo.
P1
P2
P3
scheduler
Espacio del ncleo
La gestin y el cambio de contexto de cada proceso es muy costoso. Se debe actualizar los registros de uso de memoria, y controlar los estados en los que quedan los procesos.
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Procesos de procesos
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Threads/hilos
Definicin: Una secuencia de control dentro de un proceso que ejecuta sus instrucciones de forma independiente. Existe concurrencia a dos niveles: entre procesos y entre threads.
P1
Procesos: entidades pesadas h1 con espacio en el ncleo. Cambios de contexto costosos. Threads: entidades ligeras en el espacio de usuario. Cambios de contexto poco costosos.
h2 Threads
P2
hj
P3
Sistema Operativo
Espacio del ncleo Threads de sistema
CPU CPUs
Programacin Concurrente
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Los threads/hilos pueden estar en dos niveles: a nivel usuario (p.ej. java) o a nivel del sistema operativo (hilos del sistema). Los threads/hilos de sistema dan soporte a los threads/hilos de usuario mediante un API (Application Program Interface). Estndares Cada sistema operativo implementa los threads/hilos de sistema de manera diferente: win32, OS/2 y POSIX (pthreads). Implementacin A nivel usuario (librera) o a nivel de ncleo (llamadas al sistema). El estndar POSIX es del primer tipo. Planificacin Existen procesadores lgicos (los threads compiten por cada procesador lgico), y los procesadores lgicos compiten por los fsicos (SOLARIS).
Programacin Concurrente: Procesos de procesos
UniversidaddeLasPalmasdeGranCanaria
DepartamentodeIngenieraTelemtica
Threads/hilos en Java
Java proporciona un API para el uso de hilos: clase Thread dentro del paquete java.lang.Thread. Es de gran utilidad tener un lenguaje de alto nivel para programar concurrentemente utilizando threads/hilos, de ah el potencial y la fama de Java. Cuando arranca un programa existe un hilo principal (main), y luego se pueden generar nuevos hilos que ejecutan cdigo en objetos diferentes o el mismo. La clase Thread dispone de una serie de mtodos para caracterizar el thread/hilo en el programa: isAlive(), isDaemon(), setName(), setDaemon(), run(), etc.