Publicado el 14 de Enero del 2017
857 visualizaciones desde el 14 de Enero del 2017
362,2 KB
18 paginas
Creado hace 16a (19/09/2008)
PROGRAMACION CONCURRENTE
I.2 Recursos para la concurrencia.
J.M. Drake
Notas:
1
Procesos Concurrentes
Concepto de proceso.
Estructura de los procesos.
Estados de un proceso.
Gestión de los procesos.
Procodis’08: I.2- Modelos en programación concurrente José M.Drake
2
Notas:
2
Plataforma de ejecución concurrente
Sistema/Aplicación concurrente
Lógica de la aplicación
Seq. Activity
Thread
Seq. Activity
Seq. Activity
Seq. Activity
Seq. Activity
Seq. Activity
Seq. Activity
Seq. Activity
Seq. Activity
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Proceso
Proceso
Proceso
Proceso
Proceso
Plataforma
de ejecución
Procesador
CPU
Procesador
CPU
Procesador
CPU
Procodis’08: I.2- Modelos en programación concurrente José M.Drake
3
Notas:
La concurrencia no es un término fácil de definir. Informalmente, un programa concurrente es un programa que
ejecuta mas de una actividad simultáneamente. Si embargo, en muchos casos esta simultaneidad es una ilusión.
En algunos sistemas concurrentes, las diferentes actividades son realizadas en diferentes CPU y la concurrencia
es real (concurrencia física). En otros sistemas, solo hay una CPU y las diferentes actividades se ejecutan
secuencialmente siguiendo una estrategia de entrelazamiento basada en repartir el tiempo de ejecución de la
CPU (concurrencia virtual).
Un sistema informático puede ser un único procesador, una máquina multiprocesadora o un grupo de máquinas
administradas como una sola unidad y que comparten un mecanismo de gestión común.
Un proceso es una abstracción de los sistemas operativos que hace posible que un sistema informático pueda
ejecutar simultáneamente diferentes actividades secuenciales. Un proceso es una abstracción lógica (no física).
Las ligaduras de los procesos a los procesadores pueden cambiar dinámicamente. A cada proceso se le garantiza
un cierto grado de independencia, de ausencia de interferencias y de seguridad. No se permite que un proceso
pueda acceder a la memoria local de otro, deben comunicarse entre ellos a través de utilidades de comunicación
proporcionadas por el entorno. La gestión de los procesos es pesada y requiere una gran capacidad de
procesamiento para crear, gestionar, comunicar y cancelar los proceso.
Los thread son abstracciones del sistema operativo que hace posible ejecutar de forma concurrente una actividad
secuencial. Los threads son ligeros y sólo disponen de los recursos necesarios para mantener
independientemente su hilo de control que ejecuta la actividad secuencial asignada. Los threads de un mismo
proceso comparten la memoria local y la utilizan para comunicarse entre ellas. La ejecución de la actividad que
se asocia a un threads se puede planificar de forma independiente, utilizando para ello diferentes protocolos. Los
threads se comunican entre sí de forma no segura a través de la memoria local que comparte, y de forma segura
a través de los mecanismos sincronizados que le ofrecen los sistemas operativos.
3
Programas concurrentes y procesos.
Un programa concurrente se concibe como un conjuntos de thread o
hilos de control
Cada thread ejecuta una única actividad secuencial.
Cada thread se ejecuta en su propio procesador virtual ejecutando
independientemente acciones de acuerdo con la actividad que tiene
asociada.
Los threads concurrentes intercambian entre sí mensajes con información
y mensajes de sincronismo.
Existen tres formas de implementar un programa concurrente:
Mediante un lenguaje concurrente (Ada, Java, etc.).
A través de un sistema operativo (UNIX, POSIX, Windows, etc).
Apoyándose en un software de comunicaciones (DIS-ADA, MMS, CORBA).
Procodis’08: I.2- Modelos en programación concurrente José M.Drake
4
Notas:
Un programa concurrente se suele [Dijkstra, 98] concebir como un conjunto de procesos.
Cada uno de los procesos se considera que es un programa secuencial, con una única
línea de flujo de control (thread).
Se considera que cada proceso se ejecuta en su propio procesador virtual, y progresa de
forma independiente a los otros procesos, ejecutando la secuencia de acciones que
corresponden a su propia línea de control de flujo.
En un programa concurrente se tienen que definir cada uno de los procesos que lo
componen, así como las acciones de intercambio de información, y de sincronismo que
deben tener lugar para que la ejecución concurrente de los procesos progrese
constructivamente en su conjunto.
Un programa concurrente se formula utilizando bien un lenguaje concurrente (como Ada),
o definiendo independientemente los procesos que constituyen el programa mediante un
lenguaje secuencial (como el lenguaje C), y haciendo uso de la capacidad de
multiprocesado que proporciona un sistema operativo multiprocesador (como UNIX) o un
software de comunicación (como MMS).
4
Programa secuencial y concurrente
Programa secuencial
Programa concurrente
P;
Q;
R;
cobegin
P; Q; R;
coend;
Se interpreta como:
Se interpreta como:
∀ Ejecución • P → Q → R
∃ Ejecución • {not(P→Q) and not(P→R)
and not(Q→P) and not(Q→R)
and not(R→P) and not(R→Q)}
Para todas las ejecuciones válidas P
debe terminar antes de empezar Q y
Q debe terminar antes de empezar R.
Existe al menos una ejecución válida
en la que los tres procesos se estén
ejecutando simultáneamente.
Procodis’08: I.2- Modelos en programación concurrente José M.Drake
5
Notas:
Un programa secuencial se puede considerar como un conjunto de procesos que se ejecutan
secuencialmente. Así, un programa secuencial constituido por los tres procesos P, Q y R, tal como
el siguiente:
P; Q; R;
equivale formalmente a establecer que
∀ Ejecución • P → Q → R
Expresión que debe leerse como: Para todas las ejecuciones válidas del programa, P debe
concluir antes que comience Q, y Q debe finalizar antes de que comience R.
Un programa concurrente se puede considerar como un conjunto de procesos que se pueden
ejecutar bien secuencialmente en cualquier orden o concurrentemente con su ejecución solapada
en el tiempo. Por ejemplo, un programa concurrente compuesto por tres procesos P, Q y R que se
ejecutan concurrentemente se puede expresar como,
cobegin P; Q; R; coend;
lo cual significa formalmente que
∃ Ejecución • {not(P→Q) and not(P→R) and not(Q→P) and not(Q→R) and not(R→P) and
not(R→Q)}
que debe leerse como, los procesos P, Q y R son concurrentes si existe al menos una ejecución
válida en la que durante algún intervalo de tiempo, los tres procesos se estén ejecutando
simultáneamente.
5
Aspectos de los procesos
Cada entorno de programación concurrente necesita establecer algunas
características sobre sus procesos:
Naturaleza de los procesos.
Jerarquía de los procesos.
Mecanismos de inicialización.
Mecanismos de finalización.
Formas de declaración.
Procodis’08: I.2- Modelos en programación concurrente José M.Drake
6
Notas:
6
Naturaleza de los procesos.
Los procesos pueden ser:
Procesos estáticos: son instanciados al comienzo del programa. El
programador los declara explícitamente.
Procesos dinámicos: Son creados durante la ejecución del programa, en
función de los datos.
En función de los procesos que pueden existir en un sistema, se clasifican:
Sistema cerrado: Se tiene un conocimiento en tiempo diseño (estático) sobre
los procesos que constituyen el sistema y su actividad.
Sistema abierto: El número de procesos que constituyen el sistema varia en el
tiempo de forma impredecible (en fase de diseño), bien porque crea
dinámicamente procesos, porque carga clases desconocidas potencialmente
activas, invoca procedimientos externos en otros subsistemas, etc.
Crear, instanciar y destruir un proceso son tareas complejas y costosas en
tiempo de procesador. Los procesos dinámicos no se pueden utilizar en
sistemas de tiempo real.
Mantener un proceso tiene un costo en recursos del sistema.
Procodis’08: I.2- Modelos en programación concurrente José M.Drake
7
Notas:
Los procesos que constituyen un programa concurrentes pueden ser:
•Procesos estáticos: Son aquellos que son creados e instanciados al comienzo
del programa. El número de procesos estáticos de un programa se mantiene fijo
durante la ejecución del programa y todos ellos han sido explícitamente declarados
por el programador.
•Procesos dinámicos: Los procesos dinámicos que son creados durante la
ejecución del programa, en función de los datos que están siendo manejados en
una ejecución.
La creación, instalación y dotación de recursos de un proceso es una tarea compleja y muy
costosa en tiempo. Esto conduce a que en los programas de tiempo real es muy poco
frecuente que se utilicen procesos de generación dinámica.
7
Jerarquía de los procesos.
Los procesos de un programa se pueden organizar en:
Estructura plana: Todos los procesos son equivalentes. Evolucionan y
terminan independientemente (procesos UNIX).
Estructura plana
Proceso A
Proceso B
Proceso C
Proceso D
Estructura jerarquizada: Entre los procesos existe unas relaciones de
dependencia con estructura de árbol. Un proceso no termina hasta que los
procesos que dependen de él terminan.
Proceso B
Entorno jerarquizado
Proceso A
Proceso C
Proceso D
Proceso E
Procodis’08: I.2- Modelos en programación concurrente José M.Drake
8
Notas:
Los procesos que constituyen un programa concurrente pueden organizarse de
acuerdo con dos estructuras básicas:
•Estructura plana: En este casos todos los procesos, que en cada
momento de la ejecución del programa concurrente han sido creados, son
equivalentes, pudiendo cada uno de ellos evolucionar y terminar de forma
independiente.
•Estructura jerarquizada:
En estos casos, entre los procesos que
constituyen el prog
Comentarios de: PROGRAMACION CONCURRENTE I.2 - Recursos para la concurrencia (0)
No hay comentarios