PDF de programación - PROGRAMACION CONCURRENTE - I.4. Patologías en programas concurrentes

Imágen de pdf PROGRAMACION CONCURRENTE - I.4. Patologías en programas concurrentes

PROGRAMACION CONCURRENTE - I.4. Patologías en programas concurrentesgráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.021 visualizaciones desde el 14 de Enero del 2017
260,2 KB
17 paginas
Creado hace 15a (19/09/2008)
PROGRAMACION CONCURRENTE

I.4. Patologías en programas concurrentes

J.M. Drake

Notas:

1

Patologías de los programas concurrentes

Patologías características de los programa concurrente son:
Propiedades de seguridad: No debe ejecutar algo que conduzca a un error:

Ejecuta una operación imposible
Entra en una sección crítica cuando está otro proceso.
Un proceso no respeta un punto de sincronismo.
Un proceso permanece a la espera de un evento que nunca se producirá.

Propiedades de vivacidad: Las sentencias que se ejecuten deben contribuir a

un avance constructivo al objetivo del programa:

Bloqueos activos: Dos procesos ejecutan sentencias que no hacen avanzar al

programa.

Aplazamiento indefinido: Un programa se queda sin tiempo de procesador para

avanzar.

Las mejoras en seguridad y vivacidad suelen tener efectos contrapuestos:
La práctica de la ingeniería software pone énfasis en el diseño de la seguridad.

Se asegura que el código no hace nada imprevisto o peligroso.

El mayor tiempo en el diseño de una aplicación concurrente se emplea en

aspectos relacionados con la vivacidad. Evitar bloqueos, incrementar el
rendimientos, etc.

Procodis’08: I.4.- Patologías en programas concurrentes José M.Drake

2

Notas:

Todo programa concurrente debe satisfacer dos tipos de propiedades:

•Propiedades de seguridad ("safety"): estas propiedades son relativas a que en
cada instante de la ejecución no debe haberse producido algo que haga entrar al
programa en un estado erróneo.

•Dos procesos no deben entrar simultáneamente en una sección crítica.
•El consumidor no debe consumir el dato antes de que el productor los
haya producido.
•El productor no debe producir un dato mientras que el buffer de
comunicación esté lleno.

•Propiedades de vivacidad ("liveness"): esta propiedades son relativas de que cada
sentencia que se ejecute conduce en algún modo a un avance constructivo para
alcanzar el objetivo funcional del programa. Són en general muy dependientes de
la política de planificación que se utilice. Ejemplos de propiedades de vivacidad
son:

•No deben producirse bloqueos activos (livelock). Por bloqueos activos se
entienden conjuntos de procesos que ejecutan de forma continuada
sentencias que no conducen a un progreso constructivo.
•Aplazamiento indefinido (starvation): consiste en el estado al que puede
llegar un programa que aunque potencialmente puede avanzar de forma
constructiva, no lo hace como consecuencia de que no se le asigna tiempo
de procesador en la política de planificación.

2

Seguridad en sistemas concurrentes

Las prácticas seguras de programación concurrente son generalizaciones
de las practicas de programación secuencial segura.
La seguridad tiene un componente temporal: en los programas
concurrentes hay que garantizar que sólo se accede a los objetos cuando
tienen un estado coherente (consistente).
Un objeto es coherente si satisface todos los invariantes entre su atributos
que son inherentes a su naturaleza.
En los programas concurrentes hay que analizar todos los invariantes que
debe satisfacer.
Un objeto no debe ser utilizado mientras se encuentra en un estado
transitorio incoherente.
Un ejemplo son los conflictos de almacenamiento a bajo nivel:
Conflicto de lectura/escritura: Un thread no puede escribir un nuevo valor en

un atributo, mientras otro thread lo está leyendo.

Conflicto de escritura/escritura: Dos threads concurrentes no pueden escribir

un mismo atributo.

Procodis’08: I.4.- Patologías en programas concurrentes José M.Drake

3

Notas:

Las prácticas seguras de programación concurrente son generalizaciones de prácticas de
programación secuencial seguras y sólidas. La seguridad en diseños concurrentes agrega una
dimensión temporal a las nociones comunes de seguridad.
Una diferencia entre seguridad en programas secuenciales y concurrentes es que la mayoría de las
comprobaciones de seguridad no pueden ser comprobadas estáticamente por los compiladores. Esto
tiene consecuencias importantes: Un programa se comprueba incorrecto en la compilación no puede
ejecutarse, mientras que si el fallo solo es detectable en fase de ejecución, sólo puede ser previsto a
fin de evitar sus consecuencias.
La seguridad en programas concurrentes añade una dimensión temporal a las tecnicas de diseño
relativas a la seguridad. Se debe evitar el acceso a ciertas operaciones de objetos mientras estos
mantienen estados no coherentes. Un estado coherente es aquel en el que todos los atributos del
objeto posee valores legales y significativos. Para poder determinar los estados no coherentes de un
objeto y poder evitar el acceso a ellos en ese estado, deben establecerse a nivel conceptual todos los
invariantes asociados al objeto. Un así podrá comprobarse un estado como coherente si satisface
todos sus invariantes.
Ejemplos de conflictos de lectura y escritura que pueden ser causa de errores son:
•Un objeto se representagráficamente por un hilo mientras está siendo actualizado.
•Un thread realiza una operación de transferencia sobre un saldo bancario mientras otro está
haciendo un ingreso.
•Un elemento de una lista es utilizado mientras que aun no se ha establecifo su enlace al siguiente
elemento.

3

Atributos y seguridad

Los problemas de consistencia que comprometen la seguridad de un objeto
provienen de definiciones de los atributos realizados a alto nivel y hechas
sin tener en consideración su representación física.
Deben introducirse algunas restricciones de representación para
incrementar la seguridad:
Representaciones directas de valor.
Representaciones de valores derivados.
Representaciones lógicas de estado.
Variables sobre el estado de ejecución.
Variables históricas.
Variables de seguimiento de evolución
Referencias a relaciones.
Referencias a representaciones de objetos.

Procodis’08: I.4.- Patologías en programas concurrentes José M.Drake

4

Notas:

Las categorías de campos y restricciones que deben tomarse en cualquier clase para mejorar el
rendimiento e incrementar la seguridad son:

•Representaciones directas de valor: Hay veces que se introducen atributos que resumen
propiedades globales de un objeto. Ej: Longitud de una lista.
•Representaciones de valores derivados: Los campos que se utilizan para eliminar o reducir
al mínimo la necesidad de cálculos o invocaciones de métodos.
•Representaciones lógicas de estado: Reflejos del estado de control lógico de un objeto.
•Variables sobre el estado de ejecución: Campos que registran el estado dinámico de bajo
nivel de un objeto. Ej: variable que representa un mensaje recibido y pendiente de ser
tratado.
•Variables históricas: Representación de los estados previos que ha seguido un objeto. Ej:
Registro histórico de mensajes recibidos.
•Variables de seguimiento de evolución: Un identificador, una referencia a objeto o marca
de tiempo que caracteriza la evolución de un objeto.
•Referencias a relaciones: Campos que apuntan a otros objetos que interaccionan con el
objeto anfitrión..
•Referencias a representaciones de objetos: Punteros que son almacenados por un objeto,
para que a través de él se acceda a otros objetos relacionados con él.

4

Vivacidad y sistemas concurrentes

En un programa concurrente hay muchas causas por las que un thread en
estado de ejecución, no se ejecuta:
Bloqueo: La ejecución se suspende porque se requiere un recurso que está

siendo utilizado por otro thread.

Espera: La ejecución se suspende a la espera de un evento, bien de

temporización o bien procedente de otro thread.

Entrada: La suspensión se suspende en espera de un evento de entrada o

salida

Suspensión: Se suspende la ejecución porque otro thread de mayor prioridad

se está ejecutando.

Fallo: Se suspende porque se ha producido una excepción en el propio thread.

Procodis’08: I.4.- Patologías en programas concurrentes José M.Drake

5

Notas:

5

Fallos de vivacidad

Generalmente una falta temporal de ejecución es normal y aceptable. Sin
embargo una falta permanente o ilimitada de ejecución es un problema que
impide el correcto funcionamiento del programa:
Interbloqueo: Dependencia circular entre threads, en el que cada uno requiere

para ejecutarse un recurso que posee otro.

Perdida de señales: Un thread permanece inactivo porque comenzó a esperar

a un evento después de que el evento se haya producido.

Mutex anidados: Un thread permanece suspendido en un mutex que es

requerido por otro thread que debe tomarlo para activar su ejecución.

Fallo continuado: Una actividad falla repetidamente.
Inanición: La CPU que tiene que ejecutar el thread está permanente ocupada

por la ejecución de otros threads que tienen mayor prioridad de jecución.

Falta de recursos: El sistema no dispone de los recursos que se necesitan el

threads para su ejecución.

Fallo distribuido: El thread requiere para ejecutarse el acceso a una maquina

remota que nos está accesible.

Procodis’08: I.4.- Patologías en programas concurrentes José M.Drake

6

Notas:

6

Interbloqueos

Los bloqueos están relacionados con la reserva no ordenada de recursos a
los que se acceden con exclusión mutua.

Ejemplo:
Un proceso P1 requiere para avanzar disponer de los recursos RA y RB.
Otro proceso P2 requiere también los recursos RA y RB.
El proceso P1 toma RA y queda a la espera de RB.
El proceso P2 toma RB y queda a la espera de RA.
Los procesos P1 y P2 permanecen indefinidamente bloqueados.

Proceso 1

?

?

Proceso 2

Recurso A

Recurso B

Procodis
  • Links de descarga
http://lwp-l.com/pdf1016

Comentarios de: PROGRAMACION CONCURRENTE - I.4. Patologías en programas concurrentes (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