Está en la página 1de 38

PROGRAMACION CONCURRENTE

La programacin concurrente es la simultaneidad en la ejecucin de mltiples tareas interactivas. Estas tareas pueden ser un conjunto de procesos o hilos de ejecucin creados por un nico programa. Las tareas se pueden ejecutar en un sola UCP (multiprogramacin), en varios procesadores o en una red de computadores distribuidos. La programacin concurrente est relacionada con la programacin paralela, pero enfatiza ms la interaccin entre tareas. As, la correcta secuencia de interacciones o comunicaciones entre los procesos y el acceso coordinado de recursos que se comparten por todos los procesos o tareas son las claves de esta disciplina.

Multitarea, Multiprogramacion, multiprocesos


La programacion concurrente tiene capacidad para realziar varias tareas al mismo tiempo o muchas tareas en una sola PC con un procesador o varios.

Multitareas
Es la capacidad de un sistema operativo para ejecutar varios procesos al mismo tiempo corriendo sobre un procesador. Con los sistemas operativos DOS esto era incapaz de realizarse. Existen varios tipos de multitareas y son :
* Multitarea Nula

* Multitarea Cooperativa * Multitarea Preferente * Multitarea Real

Multitarea Nula
aquel sistema operativo que carece de multitarea. An as puede simularla implementndola en un espacio de usuario o usando trucos como los TSR en MS-DOS. Justamente la familia DOS son ejemplos de sistemas operativos de multitarea nula.
ES

Multitarea Cooperativa
Tipo de multitarea en donde los procesos de usuario son quieres ceden la CPU al sistema operativo a intervalos regulares. Es sumamente problemtico porque si por algn motivo el proceso de usuario es interrumpido, no cede la CPU al sistema operativo que lo ejecuta y, por lo tanto, quedar trabado (tildado). Los sistemas operativos Windows antes de la versin 1995 implementaban este tipo de multitarea.

Multitarea Preferente
Multitarea en donde el SO se encarga de administrar uno o ms procesadores, repartiendo el tiempo de uso del mismo entre los distintos procesos que esperan utilizarlo (tareas en ejecucin). En el caso de un solo procesador, cada proceso o tarea lo utiliza en perodos cortsimos de tiempo, lo que, en la prctica, da la sensacin de que estuviesen ejecutndose al mismo tiempo. Los sistemas operativos que utilizan este tipo de multitareas son los UNIX y sus clones (Linux, etc), Windows NT, etc.

Multitarea Real
Multitarea en donde el SO ejecuta los procesos realmente al mismo tiempo haciendo uso de mltiples procesadores (ms de dos). La ejecucin realmente se realiza en distintos procesadores para cada proceso o tarea. Obviamente en el caso de que los procesos o tareas sean ms que la cantidad de procesadores, stos comienzan a ejecutarse en procesadores "en uso" en la forma de multitareas preferente Todos los sistemas operativos modernos soportan esta capacidad.

Multitarea Real

Multiprogramacion
MULTIPROGRAMACION Es la tcnica que permite que dos o mas programas ocupen la misma unidad de memoria principal y que sean ejecutados al mismo tiempo. La multiprogramacin se refiere a dos o mas programas corriendo o procesndose al mismo tiempo; La multiprogramacin se controla a travs del sistema operativo, el cual observa los programas y los vigila hasta que estn concluidos. El numero de programas que pueden multiprogramarse en forma efectiva, depende de una combinacin de la cantidad de memoria, de la velocidad de la CPU y del numero y velocidad de los recursos perifricos que tenga conectados, as como de la eficiencia del SISTEMA OPERATIVO.

Principios de Concurrencia
En un sistema multiprogramado con un nico procesador, los procesos se intercalan en el tiempo aparentando una ejecucin simultnea. Aunque no se logra un procesamiento paralelo y produce una sobrecarga en los intercambios de procesos, la ejecucin intercalada produce beneficios en la eficiencia del procesamiento y en la estructuracin de los programas.

Principios de Concurrencia
La concurrencia es el punto clave en los conceptos de multitarea, multiprogramacin y multiproceso, la concurrencia comprende un gran numero de cuestiones de diseo incluyendo la comunicacin entre procesos, la comparticin y competencia por los recursos, la sincronizacin de la ejecucin de varios procesos y la asignacin del procesador a los procesos, la concurrencia puede presentarse en tres contextos diferentes: Varias aplicaciones: Aplicaciones estructuradas: Estructura del sistema operativo:

Varias aplicaciones:
En este caso el tiempo de procesador de una mquina es compartido dinmicamente entre varios trabajos o aplicaciones activas.

Aplicaciones estructuradas:
Como consecuencia del diseo modular de una aplicacin y la divisin de la misma en tareas explcitas estas pueden ser ejecutadas de forma concurrente. En programacin, un lenguaje estructurado es aquel que soporta la divisin en bloques (procedimientos y funciones) que pueden o no comunicarse entre s. Es contrario a inestructurado, de poco uso, que no tiene ninguna estructura, es simplemente un bloque, como por ejemplo, los archivos batch (.bat).

Estructura del sistema operativo:


Como resultado de la aplicacin de la estructuracin en el diseo del propio SO, de forma que este se implemente como un conjunto de procesos.

LABORES DEL SISTEMA OPERATIVO


Elementos de gestin y diseo que surgen por causa de la concurrencia: 1) El sistema operativo debe seguir a los distintos procesos activos 2) El sistema operativo debe asignar y retirar los distintos recursos a cada proceso activo, entre estos se incluyen: _Tiempo de procesador
_Memoria

_Archivos _Dispositivos de E/S 3) El sistema operativo debe proteger los datos y los recursos fsicos de cada proceso contra injerencias no intencionadas de otros procesos. 4) Los resultados de un proceso deben ser independientes de la velocidad a la que se realiza la ejecucin de otros procesos concurrentes.

Puede verse la concurrencia de procesos como una ejecucin simultnea de varios procesos. Si tenemos un multiprocesador la concurrencia parece clara, en un momento dado cada procesador ejecuta un proceso. Se puede ampliar el concepto de concurrencia si entendemos por procesado concurrente del sistema en conjunto, varios procesos se vean en un estado intermedio entre su estado inicial y final. Esta ltima definicin incluye los sistemas multiprogramados de un nico procesador que estudiamos en los temas anteriores.

Cooperacin entre Procesos


La velocidad de un proceso depende de la frecuencia de la interrupcin asociada a cada uno de ellos que un proceso se ejecuta asncronamente con respecto a otro, es decir, sus ejecuciones son independientes. Sin embargo, hay ciertos instantes en lo que los procesos deben sincronizar sus actividades. Son estos puntos a partir de los cuales un proceso no puede progresar hasta que otro haya completado algn tipo de actividad

Posibilidad de interaccion de procesos


Las posibilidadades de interaccion de los procesos pueden clasicarse en funcion del nivel de conocimiento que cada proceso requieren la existencia de los demas. Un proceso no tiene en absoluto conocimiento de la existencia de los demas Que los procesos tengan un conocimiento indirecto de los otros procesos. Tiene lugar cuando los procesos tienen conocimiento directo unos de otros por haber sido diseados para trabajar conjuntamente el alguna actividad

1.

1.

1.

Comunicacin y sincronisacion de proceso


1.

Necesidad de exclusion mutua. Es decir, los procesos deberan acceder de forma exclusiva a ciertos recursos o zonas de memoria considerados como crticos.
Interbloqueos: tienen lugar cuando ninguno de los procesos en competencia puede continuar su ejecucion normal por carecer de alguno de los recursos que necesita.

2.

3.

3. ejecucion incompleto: este problema tiene lugar cuando la ejecucion de un proceso queda siempre pospuesta a favor de algun otro de los procesos en competencia.

Necesidad de sincronizacion de los procesos: region crtica y exclusion mutua


La sincronizacin entre procesos puede definirse como la necesidad que tienen algunos procesos de bloquearse en determinadas circunstancias y ser despertados cuando ocurren ciertos eventos. Un caso tpico que muestra la necesidad de sincronizacin entre procesos es cuando un proceso inicia una lectura y va a utilizar en la siguiente instruccin la informacin leda. En este caso el proceso debe esperar a que se termine la operacin de Entrada/Salida para continuar.

Gestion de procesos
ejecucion

LA EXCLUSION MUTUA

La exclusin mutua la podramos definir como una operacin de control que permite la coordinacin de procesos concurrentes (Comunicacin requerida entre dos o mas procesos), y que tiene la capacidad de prohibir a los dems procesos realizar una accin cuando un proceso haya obtenido el permiso.

SOLUCIONES SOFTWARE PARA LA EXCLUSION MUTUA

Soluciones por Software. Una manera es dejar la responsabilidad a los procesos que deseen ejecutar concurrentemente, de esta manera los procesos deben coordinarse unos con otros para cumplir la exclusin mutua sin ayuda alguna, aunque estas soluciones son propensas a errores y a una fuerte carga de proceso (Algunos ejempl de estas son: Algoritmo de Dekker y Algoritmo de Peterson).

Algoritmo de Dekker
Algoritmo de Peterson Semforos

Monitores
Paso de Mensajes

Soluciones Hardware para la exclusin mutua

Algoritmo de Dekker
es un algoritmo de programacin concurrente para exclusin mutua, que permite a dos procesos o hilos de ejecusion compartir un recurso sin conflictos. Fue uno de los primeros algoritmos de exclusin mutua inventados, implementado por Edsger Diikstra.

Si ambos procesos intentan acceder a la seccin crtica simultneamen el algoritmo elige un proceso segn una variable turno. Si el otro proce est ejecutando en su seccin crtica, deber esperar su finalizacin.

Existen cinco versiones del algoritmo Dekker, teniendo ciertos fallos lo primeros cuatro. La versin 5 es la que trabaja ms eficientemente, sie una combinacin de la 1 y la 4.

Versin 1: Alternancia estricta. Garantiza la exclusin mutua, pero su desventaja es que acopla los procesos fuertemente, esto significa que los procesos lentos atrasan a los procesos rpidos. Versin 2: Problema interbloqueo. No existe la alternancia, aunque ambos procesos caen a un mismo estado y nunca salen de ah. Versin 3: Colisin regin crtica no garantiza la exclusin mutua. Este algoritmo no evita que dos procesos puedan acceder al mismo tiempo a la regin critica. Versin 4: Postergacin indefinida. Aunque los procesos no estn en interbloqueo, un proceso o varios se quedan esperando a que suceda un evento que tal vez nunca suceda.

Peterson desarroll el primer algoritmo (1981) para dos procesos que fue una simplificacin del algoritmo de Dekker para dos procesos. Posteriormente este algoritmo fue generalizado para que funcione para N procesos .En el algoritmo para N procesos las variables c[i] adems de valer "verdadero" y "falso", pueden valer "en seccin critica" y turno desde 1 hasta N. El procedimiento es una generalizacin de este .c[i], que es un array y turno, que solo puede valer 1o 2 . .Este algoritmo garantiza la exclusin mutua debido al uso de una variable compartida , turno, que se chequea cada vez.

Inicialmente, c[0]=c[1]= falso, y el valor de turno no tiene relevancia (pero de be ser 0 o 1). Para entrar en la seccin crtica, el proceso Pi primero asigna el valor verdadero a c[i] y luego afirma que es el turno del otro proceso para entrar si as lo desea (turno = j). Si ambos procesos tratan de entrar a la vez, se asignar turno como i y j aproximadamente al mismo tiempo. Slo una de estas asignaciones durar; la otra ocurrir, pero ser reemplazada de inmediato. El valor eventual de turno decide a cul de los dos procesos se le permitir entrar primero en su seccin crtica.

Los semforos pueden contemplarse como variables que tienen un valor entero sobre las que se definen las tres operaciones siguientes: Un semforo puede inicializarse con un valor no negativo. Un semforo puede inicializarse con un valor no negativo. La operacin WAIT decremento el valor del semforo. Si el valor se hace negativo, el proceso que ejecuta WAIT queda bloqueado. La operacin SIGNAL incrementa el valor del semforo. Si el valor no es positivo, se desbloquea a un proceso bloqueado previamente por una operacin WAIT. Veamos cual sera la implementacin de un semforo.

Un monitor es, esencialmente, una coleccin de datos y de procedimientos para su manipulacin junto con una secuencia de inicializacin. Las variables de datos globales son generalmente privadas al monitor por lo que solo son accesibles a los procedimientos de este. Los procedimientos del monitor podrn ser pblicos o privados. Un monitor puede considerarse como una estructura esttica que se activa nicamente cuando alguno de sus procedimientos pblicos es llamado por un proceso en ejecucin y se dice, entonces, que el proceso en cuestin entra o tiene acceso al monitor. Solamente un proceso puede estar ejecutndose en el monitor en un instante determinado. Una estructura de datos compartida puede as protegerse situndola dentro de un monitor que ofrecer un servicio de exclusin mutua para dicha estructura. Para que resulten tiles en el procesamiento concurrente, los monitores deben incluir alguna herramienta de sincronizacin de forma que se impida el acceso al monitor a un proceso cuando otro esta ejecutando dentro de el. Esta sincronizacin se consigue por medio

PASO
DE MENSAJES

Los mensajes constituyen relativamente sencillo y adecuado para la comunicacin y para la sincronizacin entre procesos que trabajan en entornos

LA CABECERA

EL CUERPO DEL MENSAJE

Denominacin o direccionamiento

Copia
Intercambio sincrono vs. intercambio asncrono Longitud

SOLUCIONES HADWARE PARA LA EXCLUSION MUTUA


Estrategias pesimistas
Estrategias obtimistas

Habilitacin / deshabilitacion de interrupciones


instruccin comprobar y fijar (test and set)

instruccin comparar e intercambiar (compare and swap)

el problema de la cena de los filsofos