PDF de programación - Tema 2. Programación concurrente

Imágen de pdf Tema 2. Programación concurrente

Tema 2. Programación concurrentegráfica de visualizaciones

Publicado el 11 de Diciembre del 2018
873 visualizaciones desde el 11 de Diciembre del 2018
1,5 MB
35 paginas
Creado hace 13a (23/02/2011)
Programación concurrente

1.1 CONCURRENCIA

Cuando hablamos de concurrencia nos referimos a la ejecución de varias acciones
de forma simultánea por parte del ordenador. Nuestro objetivo será crear programas
capaces de conseguir esta simultaneidad. Como vemos, este paradigma se enfrenta
directamente con el paradigma secuencial utilizado habitualmente en la creación de todos
los programas.

La actividad de creación de estos programas se denomina habitualmente

“programación concurrente” (PC en adelante) que se puede definir como:

“Notaciones y técnicas usadas para expresar en programas la
concurrencia potencial (posibilidad de ejecución simultánea) de
algoritmos y resolver los problemas de sincronización y
comunicación derivados de realizar dicha implementación.”

Esta definición es muy acertada y merece la pena analizar despacio cada una de las

afirmaciones que incluye:

• La PC son notaciones, ya que debe establecer la forma de representar los

conceptos para ser entendidos por programadores y máquinas.

• La PC son técnicas, ya que no es fácil crear este tipo de programas y puede ser

difícil descubrir o traducir la concurrencia potencial de los algoritmos.

• La PC se basa en algoritmos con concurrencia “latente” pero existente, es
decir, no añade paralelismo si este no es posible, tiene que existir la posibilidad
del concurrencia en el algoritmo.

• La PC debe conseguir que las acciones que se ejecutan simultáneamente lo
hagan de forma armoniosa. Esto se consigue mediante la comunicación y la
sincronización.

• La PC debe resolver los problemas planteados por la necesidad de
comunicación y sincronización y aportar las herramientas que permitan esta
resolución.

Para conseguir todo esto, crearemos programas concurrentes, pero éstos deben
ejecutarse sobre un sistema operativo, y éste sobre un HW. Así se crea una estratificación
en tres capas, todas responsables y necesarias para conseguir la ejecución de acciones
concurrentes. Para estas tres capas, debemos tener en cuenta las siguientes consideraciones:

Tema 2. Programación concurrente1 • La programación concurrente debe basarse en un entorno de abstracción en el

que estudiar la concurrencia sin preocuparse de detalles de implementación.

• La consecución de la concurrencia depende del sistema informático subyacente.
• La implementación de la concurrencia no depende de la Programación

Concurrente.

1.2 IMPLEMENTACIÓN DE LA CONCURRENCIA

Los programas concurrentes, como todos, deben ejecutarse sobre un ordenador y
éste debe ser capaz de realizar varias tareas simultáneamente. Esta posibilidad se nos antoja
extraña porque no estamos acostumbrados a pensar en programas que realicen varias tareas
simultáneamente, aunque en los sistemas actuales esto ocurre continuamente.

Pensemos en un ordenador de sobremesa con sistema operativo MS-Windows o
Linux, sobre el cual ejecutamos una serie de aplicaciones. Esto implica que el ordenador es
capaz de realizar varias tareas simultáneamente. Lo podemos comprobar si ejecutamos
el administrador de tareas de MS-Windows como se ve en las figuras 1 y 2.



Figura 6.1: Ejecución concurrente de procesos en MS-Windows.

Tema 2. Programación concurrente2 Figura 2: Administrador de tareas de MS-Windows con un procesador de dos núcleos.

Además de esta ejecución simultánea de programas, tenemos la posibilidad de
ejecutar programas que son capaces de realizar varias tareas internas simultáneamente.
Pensemos en un procesador de textos que es capaz de escribir lo que vamos pulsando en el
teclado y, a la vez, realizar la corrección ortográfica e imprimir una copia de lo escrito
mientras escribimos más.

Por tanto, está claro que los ordenadores son capaces de realizar varias tareas al
mismo tiempo, si tienen varios procesadores, mediante su uso simultáneo y si sólo
tienen uno mediante técnicas de reparto del mismo, todo con el objetivo de reducir el
tiempo global de ejecución, aprovechar al máximo los recursos y estar el mayor tiempo
posible disponibles para el usuario.

También es claro que la simultaneidad se da a varios niveles, los ya presentados y

algunos menos evidentes que ahora veremos.
1.2.1

Niveles de implementación de concurrencia

Los ordenadores son sistemas diseñados por capas, cada una de las capas se
superpone sobre las anteriores utilizando las posibilidades de la capa inferior para ofrecer
mejores servicios a las capas superiores.

Dentro de estas capas se puede implementar concurrencia en varias de ellas. Esta
concurrencia puede ser directamente utilizable para realizar programas, o ser transparente y
servir para mejorar el rendimiento del sistema o servir como medio para que las capas
superiores puedan implementar concurrencia.

Los niveles en los que se implementa concurrencia son:
• Nivel de operación


(dentro de la CPU) (en el Hardware): Este nivel de
concurrencia se refiere al procesamiento simultáneo de varios bits por
operaciones aritméticas o lógicas dentro del procesador. Es implementado en la
actualidad en todos los sistemas mediante la duplicidad de los componentes
internos de los procesadores. En la actualidad (2006) los procesadores de los

Tema 2. Programación concurrente3 • Nivel de instrucción

ordenadores de sobremesa implementan paralelismo de 64 bits simultáneos, lo
que significa que cuando se realiza una operación OR, AND, NOT y otras más
complejas, se aplica de 64 con 64 bits de una sola vez. Este nivel de
concurrencia es transparente para nosotros.

(dentro de la CPU) (en el Hardware): Este nivel refleja la
posibilidad que un ordenador tiene de ejecutar varias instrucciones
simultáneamente. Esto lo conseguirá el ordenador mediante el uso de varios
procesadores (si dispone de ellos) o mediante el uso de un procesador
especialmente diseñado para ejecutar varias instrucciones mediante la técnica
denominada solapamiento o pipelining que permite comenzar la ejecución de una
instrucción antes de terminar con la anterior. El solapamiento o encauzamiento
implica la división de la ejecución de una instrucción en varios pasos que se
independizan así cuando una instrucción supera el primer paso y pasa al
segundo, una nueva instrucción entra a ejecutarse en el primer paso y así
sucesivamente.

ESQUEMA DE EJECUCIÓN SEGMENTADA

1

2

3

4

5

6

1

2

3

4

5

1

2

3

4

Tiempo de ejecución con segmentación:

instrucción 1 = 6 * t
instrucción 1 y 2 = 7 * t
...
instrucción 1.. n = (5 + n) * t

1

2

1

3 2

1

Tiempo de ejecución sin segmentación:

instrucción 1 = 6 * t
instrucción 1 y 2 = 12 * t
...
instrucción 1.. n = (n * 6) * t

Figura 6.2: Ejecución de instrucciones en un procesador segmentado

Este sistema no es siempre tan eficiente pero se obtienen resultados muy

buenos. Este nivel de concurrencia es transparente para nosotros.

• Nivel de programa


(cooperación) (en el software): Este nivel se ha introducido
anteriormente, ya que es el representado por el procesador de textos capacitado
para realizar varias de sus subtareas simultáneamente. Esta posibilidad debe
estar soportada por un software de nivel inferior, el sistema operativo, que se
encargue de la gestión de la ejecución simultánea garantizando la corrección de
las operaciones. El tipo de programación que se trata en este libro pretende
precisamente explotar este nivel de concurrencia en los computadores. ES
NUESTRO OBJETIVO.

(competencia) (en el software): Este último nivel también se
ha comentado anteriormente en la presentación de este apartado ya que se
corresponde con la posibilidad de ciertos sistemas operativos de tener en
marcha varios programas a la vez. Este nivel de paralelismo lo soportaban
únicamente lo grandes sistemas pero ahora también los equipos personales.
Este nivel de paralelismo no es de interés para nosotros ya que nuestra

• Nivel de aplicaciones

Tema 2. Programación concurrente4 intención es crear programas de ejecución concurrente interna, el hecho de que
se ejecuten concurrentemente con otros no es relevante.

1.2.2

Tipos de hardware concurrente

Como hemos visto en los niveles de implementación, la base última de la ejecución
simultánea es un hardware que permita, de forma directa o indirecta, conseguir esta
concurrencia temporal. Existen enfoques que pueden ser de interés en la tarea de clasificar
o estudiar el hardware que permite la concurrencia, pero ya en 1972 se propuso una
clasificación de arquitecturas de computadores (Flynn’s Taxonomy) que se sigue usando y
puede ayudarnos a organizar los tipos de hardware disponible.

Esta clasificación nos va a permitir establecer los grandes grupos disponibles de
sistemas concurrentes (decimos sistemas ya que pueden existir categoría donde se agrupen
varios ordenadores como una entidad) de los cuales obtendremos los tipos de
programación concurrente que admiten y cuáles de estos tipos vamos a estudiar.

Los tipos de programación concurrente se derivan directamente de los tipos de
hardware disponibles con capacidad de ejecución simultánea de instrucciones.



La clasificación de Flynn crea cuatro grupos de ordenadores, basándose en la
estructura de los procesadores donde tenemos como componentes fundamentales la
unidad de control que ejecuta las tareas globales de un tipo de instrucción y la unidad de
cálculo donde se realizan las tareas en sí. La clasificación tiene en cuenta la unicidad o
duplicidad de cada una de estas dos partes en el componente procesador de un sistema
informático. Si el sistema informático tiene varios procesadores, como cada uno
  • Links de descarga
http://lwp-l.com/pdf14503

Comentarios de: Tema 2. Programación concurrente (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad