Está en la página 1de 10

ResumenTema1.

pdf

Raultl12

Sistemas Concurrentes y Distribuidos

2º Grado en Ingeniería Informática

Escuela Técnica Superior de Ingenierías Informática y de


Telecomunicación
Universidad de Granada

Reservados todos los derechos.


No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Tema1. Introducción
Conceptos básicos y motivación.
Conceptos básicos relacionados con la concurrencia
1. Programa secuencial: el de siempre, instrucciones una detrás de otra.
2. Programa concurrente: Conjunto de programas secuenciales que se ejecutan en
paralelo.
3. Concurrencia. Es el solapamiento de varias actividades en el tiempo.
4. Programación concurrente: Notaciones y técnicas para expresar el paralelismo y la
resolución de problemas de sincronización.
5. Programación paralela: Usar el procesamiento en paralelo para resolver problemas
concretos.
6. Programación distribuida: Hace que dispositivos en distintas localizaciones trabajen
juntos.
7. Programación en tiempo real: Son sistemas que están funcionando continuamente,
por ejemplo, un sensor. Tienes restricciones sobre el tiempo de respuesta. Pueden ser
críticos(como un sensor de una central nuclear), o no, como la actualización de los
frames a la hora de reproducir un video.

Motivación de la Programación Concurrente


La Programación Concurrente(PC) es más compleja, pero mejora la eficiencia y la calidad de los
programas.

La PC aprovecha mejor los recursos de sistemas tanto de un procesador como de varios. En


sistemas de un procesador cuando un proceso espera un E/S, se pasa a realizar otra tarea en
vez de dejar al procesador esperando dicha E/S. Cuando hay varios procesadores, se reparten
las tareas, bajando el tiempo de ejecución.

Como ejemplos tenemos sistemas de gestión de vuelos, control de una central nuclear, gestión
de una gasolinera, etc.

Modelo abstracto y consideraciones sobre el hardware


Consideraciones sobre el hardware
1. Sistemas monoprocesador: En la multiprogramación el SO gestiona los múltiples
procesos repartiéndolos en ciclos de CPU.
a. Se gestiona mejor la CPU
b. Permite concurrencia
c. Se usan variables compartidas.
2. Sistemas multiprocesador con memoria compartida: Un claro ejemplo de estos son los
ordenadores de hoy día o los móviles., Tienen varias CPU, que comparten la misma
memoria.
a. Los procesos interaccionan por variables compartidas en la memoria.
3. Sistemas distribuidos: No hay una memoria común. Los procesadores se comunican
por una red de interconexión.
a. Programación distribuida: Trata concurrencia y además, fallos, transparencia,
etc.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4839722

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Modelo abstracto de concurrencia
Sentencias atómicas
Una sentencia es atómica si se ejecuta de principio a fin sin interrumpirse por otras sentencias.
Nunca se va a ver afectada si el funcionamiento de esta instrucción no depende de otras.

Un ejemplo de sentencias atómicas es:

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Leer un registro de una celda de memoria, incrementar el valor de un registro, o escribir el
valor de un registro en memoria.

El estado final de una instrucción atómica se puede determinar sabiendo el estado de inicio.

Normalmente las sentencias de un programa son no atómicas, como por ejemplo la sentencia
x = x + 1;

El compilador divide esta sentencia en 3 sentencias atómicas:

1. Cargar en un registro el valor de x.


2. Aumentar un 1 el valor del registro.
3. Escribir el valor del registro en x.

En las sentencias no atómicas aparece una indeterminación ya que no sabemos con certeza
que valor va a tener x al acabar la sentencia anterior. El valor dependerá de si hay o no otra
sentencia modificando el valor de x a la vez.

Interfoliación en sentencias atómicas


Supongamos un programa concurrente que va a ejecutar dos procesos, cada uno de ellos con 5
sentencias atómicas. El número de interfoliaciones posible a la hora de que se ejecuten esas
sentencias atómicas es bastante elevado. Se calcula de la siguiente manera:

Abstracción
Para el estudio de las posibles interfoliaciones de los procesos, se consideran solo las
características relevantes que determinan el resultado del cálculo, simplificando el análisis y
diseño de programas concurrentes. Se ignora todo lo demás como los registros que se usan, la
memoria asignada a los procesos, la asignación de CPU por el SO, etc.

El entrelazamiento preserva la consistencia: El resultado de una instrucción sobre un dato no


depende de las circunstancias de la ejecución.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4839722

si lees esto me debes un besito


Sistemas Concurrentes y Dist...
Banco de apuntes de la
En un programa con dos instrucciones atómicas ejecutadas concurrentemente, si las
instrucciones no acceden a la misma posición de memoria, no se verá afectado el resultado
final, pero si acceden a la misma variable, el resultado varía en función del entrelazamiento
que se haya dado entre las instrucciones.

La propiedad de Consistencia Secuencial Estricta

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Una instrucción atómica de lectura de una variable siempre leerá el valor que ha escrito una
instrucción atómica de escritura que sea anterior a dicha instrucción de lectura. Esto hace más
sencillo el análisis de las interfoliaciones.

Hipótesis del progreso finito


No se pueden hacer suposiciones de la velocidad de ejecución de los procesos, solo que es
mayor a cero.

Al hacer un programa concurrente no se puede diseñar pensando en que un proceso va a


tardar menos que otro, porque puede darse el caso en el que esto no ocurra. No hay que tener
en cuenta el entorno de ejecución.

Si esta hipótesis se cumple, llegamos a dos consecuencias:

1. En un programa secuencial siempre hay al menos un proceso preparado para


ejecutarse.
2. Cuando un proceso de un programa concurrente comienza su ejecución de una
sentencia, siempre la acabará en un tiempo finito.

Un programa concurrente comienza en un estado de inicio y los procesos van modificando ese
estado.

La secuencia de estados producida por una secuencia concreta de interfoliación se llama


historia o traza de un programa concurrente.

Grafo de Sincronización(Grafo dirigido acíclico)


Es un grafo donde cada nodo representa una secuencia de sentencias del programa.

Si en el grafo tenemos A -> B, esto significa que B no puede ejecutarse hasta que A haya
acabado.

Estos grafos muestran las restricciones de precedencia.

En pseudo-código, cada proceso tiene la palabra reservada process. También se pueden


denotar vectores de procesos.

Ejemplos:

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4839722

si lees esto me debes un besito


Creación de procesos con fork y join
Fork: Es una bifurcación, la rutina nombrada empieza a ejecutarse a la vez que la siguiente
sentencia al fork.

Join: Espera a que termina la rutina lanzada por fork.

Son procesos no estructurados

Creación de procesos con cobegin y coend


Cobegin: Comienza la ejecución de varias sentencias.

Coend: Espera la finalización de todas las sentencias.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4839722

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Exclusión mutua y sincronización
Concepto de exclusión mutua
En procesos cooperativos, hay algunas interfoliaciones que no son válidas. Hay una condición
de sincronización, habiendo restricciones sobre el orden en el que se pueden mezclar las
instrucciones de los procesos.

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Un caso es la exclusión mutua. Son secuencias que se deben ejecutar de inicio a fin por un solo
proceso, sin que otro proceso las esté ejecutando a la vez.

El conjunto de estas instrucciones se llama sección crítica. Ocurre exclusión mutua cuando solo
un proceso ejecuta las instrucciones de la sección crítica.

Como ejemplos tenemos la entrada por texto del teclado, o enviar datos a una impresora.

Si varios procesos ejecutan instrucciones de la sección crítica, se produce un resultado


indeterminado, es decir, no sabemos que valores tendrá una variable al acabar el programa.

Supongamos que una sección critica esta formada por la instrucción x = x + 1. En código
máquina esto se traduce en 3 instrucciones:

Si tenemos dos procesos que ejecutan esta instrucción, los dos accederán a la misma variable.

Dependiendo de la interfoliación de las sentencias atómicas de esta instrucción, el resultado


puede variar al final de la ejecución del programa que contiene los dos procesos,
produciéndose una indeterminación.

Al final X puede valer 1 o 2.

En pseudo-código, vamos a denotar las instrucciones que queremos que se ejecuten en


exclusión mutua encerrándolas en <>

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4839722

si lees esto me debes un besito


Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Condición de sincronización
La condición de sincronización establece que no son correctas todas las posibles
interfoliaciones de las instrucciones atómicas de los procesos.

Esto ocurre cuando uno o varios procesos deben esperar a que se cumpla una condición global
para poder ejecutarse.

Por ejemplo, en el problema del productor consumidor, la única posible interfoliación es: E, L,
E, L, E, L, E, L. Donde E = escritura en la variable global y L = lectura de la variable global.

No será correcta otra interfoliación en la que, por ejemplo, se escriba o se lea 2 veces seguidas,
o se lea antes de escribir, etc.

En el problema, el consumidor no lee hasta que el productor haya producido un dato, y el


productor no produce otro dato hasta que el consumidor haya leído el dato anterior.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4839722

si lees esto me debes un besito


Propiedades de los sistemas concurrentes
Hay dos tipos, propiedades de seguridad y de vivacidad.

Propiedades de seguridad
Deben cumplirse siempre para que nada malo suceda. Ejemplos:

1. Exclusión mutua: Dos procesos nunca entrelazan sus operaciones de la sección critica
2. Ausencia de interbloqueo: Un proceso nunca va a espera algo que nunca va a ocurrir.

Propiedades de vivacidad
Deben cumplirse eventualmente. Ejemplos:

1. Ausencia de inanición: Un proceso no puede ser pospuesto indefinidamente, en algún


momento debe ejecutarse.
2. Equidad: Un proceso de alta prioridad no puede estar bloqueado esperando a otro de
menor prioridad.

Verificación en programas concurrentes


Para comprobar que un programa cumple una propiedad podemos, por ejemplo, realizar
muchas ejecuciones del programa y ver si se cumple, aunque solo se comprobarían un número
limitado de interfoliaciones. Por ejemplo, para comprobar que en este programa al final el
valor de x es 3:

Tenemos dos enfoques:

1. Operacional: Se examinan todos los casos, pero esta limitado porque el numero de
interfoliaciones de algunos programas puede ser enorme.
2. Enfoque axiomático.

Enfoque axiomático
Se define un sistema lógico formal que contiene fórmulas lógicas (asertos). Las sentencias
atómicas transforman esos asertos. Los teoremas tienen esta forma:

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4839722

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.

También podría gustarte