Fallo - Universidad de Córdoba

Anuncio
SISTEMAS EN TIEMPO REAL
Fiabilidad y Tolerancia a Fallos en
Sistemas en Tiempo Real
Manuel Agustín Ortiz López
Área de Arquitectura y Tecnología de Computadores
Departamento de Arquitectura de Computadores,
Electrónica y Tecnología Electrónica
Universidad de Córdoba
Córdoba a 17 de enero de 2006
Índice
Fiabilidad y Tolerancia
Sistemas en Tiempo Real
a
Fallos
en
• Índice:
1. Introducción
2. Fiabilidad y fallos
2.1. Definiciones y clasificación de los fallos
2.2. Prevención de fallos
2.3. Tolerancia a fallos
2.4. Redundancia
3. Redundancia del software
3.1. Programación de N-versiones
3.2. Estrategia de bloques de recuperación en la tolerancia a fallos
software
4. Medición y predicción de la fiabilidad de software
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 1
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 2
Introducción
1. Introducción
• El tema que iniciamos está basado en los trabajos de Anderson
y Lee(1990) y en la bibliografía recomendada, la cual a su vez,
hace referencia continua a estos trabajos.
• Los requisitos de fiabilidad y seguridad de los sistemas de
tiempo real son mucho más estrictos que los de un sistema
informático de propósito general. Existen tres causas que
provocan un fallo un sistema en tiempo real:
Errores en una especificación inadecuada.
Defectos en alguno de los componentes, tanto componentes
hardware como software.
Por efectos del entorno.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 3
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 4
Fiabilidad y Fallos
2. Fiabilidad y Fallos.[Krisna,96][Burns, 03]
2.1. Definiciones y clasificación de los fallos
• Fiabilidad es una medida del éxito de que el sistema se
comporta de acuerdo a una especificación.
• Fallo. Cuando el comportamiento del sistema se desvía del
especificado, se dice que el sistema tiene un fallo.
• Las definiciones de fiabilidad y fallo están relacionadas con el
comportamiento externo del sistema. Los fallos son el
resultado
de
problemas
internos
que
se
manifiestan
externamente.
• Un error es la consecuencia de un fallo del sistema y una
avería es un efecto del error en un servicio que da el sistema.
• Los tipos de fallo se clasifican como:
Fallos transitorios. Un fallo transitorio comienza en un instante de
tiempo concreto se mantiene durante algún período y luego
desaparece. Ejemplo de este tipo de fallos suelen darse en los
componentes hardware debidos a alguna interferencia externa y se
mantiene mientras se mantiene la interferencia. Muchos de los fallos
de los sistemas de comunicaciones son transitorios.
Fallos permanentes. Son fallos que comienzan en un instante de
tiempo y permanece hasta que se repara el sistema.
Fallos intermitentes. Son fallos transitorios que ocurren de vez en
cuando. Ejemplo de este tipo de fallos suelen darse en componentes
hardware sensibles a la temperatura, cuando se calienta demasiado
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 5
fallan y cuando se enfrían vuelven a funcionar fallando de nuevo
cuando se calientan.
• Independientemente de la clasificación anterior los fallos se
suelen clasificar también de acuerdo a su comportamiento
temporal (fallos de tiempo) y su comportamiento de acuerdo a
las salidas que provocan (fallos de valor). La siguiente figura
muestra como se clasifican estos modos de fallo:
• Con la clasificación anterior un sistema puede fallar, en el
dominio del tiempo, de la siguiente manera:
Fallo descontrolado. El sistema produce errores descontrolados
tanto en el dominio de valor como del tiempo, incluido los fallos de
improvisación.
Fallo de retraso. El sistema produce servicios correctos en el
dominio de valor, pero sufre errores de retraso en el tiempo.
Fallo de silencio. El sistema deja de producir servicios debidos a
fallos de omisión provocando en el resto del sistema fallos de
omisión.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 6
Fallo de parada. Similar al fallos de silencio pero informa a otros
sistemas que tiene fallo de silencio.
Fallo controlado. El sistema falla según una forma especificada.
Sin fallos. El sistema produce servicios correctos tanto en el dominio
del valor como del tiempo.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 7
2.2. Prevención de fallos
• La prevención de fallos se refiere al intento de impedir
cualquier posibilidad de fallo antes de que el sistema esté
operativo. Para ello es necesario evitar y eliminar los fallos
durante la etapa de diseño. Para evitar los fallos se actúa tanto
en el hardware como en el software.
• Hardware:
Utilización de los componentes más fiables dentro de las
restricciones de coste/prestaciones.
Utilización de técnicas refinadas para la interconexión y ensamblado
de componentes.
Aislamiento del hardware para evitar interferencias.
• Software:
Especificaciones de requisitos rigurosas e incluso formales.
Utilización de probadas metodologías de diseño.
Utilización de lenguajes que faciliten la abstracción de datos y la
modularidad.
Uso de herramientas de ingeniería de software
para ayuda a la
manipulación de los componentes software.
• La segunda parte en la prevención de fallos consiste en su
intento de eliminación, para ello el sistema se somete a un
conjunto de pruebas lo más exhaustivas posibles.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 8
2.3. Tolerancia a Fallos
• A pesar de todas las técnicas y pruebas de verificación los
componentes hardware y software pueden fallar, y dado que
muchas veces no es posible su mantenimiento y reparación se
hace necesario recurrir a la idea de tolerancia a fallos.
• Un sistema puede proporcionar distintos niveles de tolerancia a
fallos:
Tolerancia total frente a fallos. El sistema continua en presencia de
fallos sin una pérdida significativa de funcionalidad o de
prestaciones, aunque por un período limitado.
Degradación controlada. El sistema continua en operación en
presencia de errores, aunque con una funcionalidad parcial durante la
reparación.
Fallo seguro. El sistema cuida de su integridad durante el fallo
aceptando una parada temporal de su funcionamiento.
• El nivel de tolerancia de un sistema dependerá de la aplicación,
y aunque teóricamente los sistemas críticos deben tener
tolerancia total frente a fallos, la realidad es que la mayoría
admiten una degradación controlada.
• La tolerancia a fallos consta de cuatro fases:
Detección de errores
Confinamiento y valoración de los daños
Recuperación del error
Tratamiento del fallo y continuación del servicio
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 9
• Detección de errores. Se pueden identificar dos clases
técnicas de detección de errores:
Detección por el entorno de ejecución del programa:
Detectados por el hardware próximo al procesador. Por ejemplo ,
“la detección de una instrucción ilegal”, “salto a una dirección
inválida”, ”violación de la protección”, etc.
Detectados por el sistema soporte del lenguaje de programación
de tiempo real. Por ejemplo “referencia a un apuntador nulo”,
“valor fuera de rango”, etc.
Detección por la aplicación. Los errores los detecta la propia
aplicación:
Comprobación de réplicas, como la programación de N-versiones
que se verá posteriormente.
Comprobaciones temporales. Por ejemplo a través del “watch-dog
timer”. El componente software debe resetear el contador antes de
que se desborde de forma continúa indicando así que funciona de
forma “correcta”. Estas comprobaciones temporales no aseguran
que esté funcionando correctamente desde el punto de vista
lógico pero si al menos “funciona a tiempo”.
Comprobaciones inversas. En aquellos componentes que tengan
una relación uno a uno con la salidas, se puede tomar la salida y
calcular la entrada que corresponde a esta salida y comprobarla
con la entrada del sistema.
Códigos de comprobación. Se utilizan sobre todo para comprobar
la integridad de los datos. Es lo que habitualmente llamamos
”CheckSum”.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 10
Comprobaciones estructurales. Se utilizan para comprobar la
integridad de los objetos como listas o colas. En este caso se trata
de comprobar si por ejemplo los punteros no está corruptos, o
comprobar si el número de elementos del objeto es el correcto.
• Confinamiento y valoración de los daños. Cuando ocurre un
error en un componente, este error puede transmitir una
información errónea a todo el sistema. Se trata de construir
cortafuegos para evitar la propagación del error.
• Recuperación del error. Una vez detectado el fallo y valorado
el daño que haya podido producir hay que recuperar el error.
Existe dos estrategias para la recuperación: recuperación hacia
delante y recuperación hacia atrás. Ejemplos de la recuperación
hacia delante son los códigos autocorrectores como el código
Hamming o la utilización de punteros redundantes en las listas
enlazadas. Un ejemplo de recuperación hacia atrás es la
estrategia de bloques de recuperación que se tratará más
adelante en este tema.
• Tratamiento del fallo y continuación del servicio. Aunque se
haya localizado el problema y recuperado el error, puede que el
fallo se vuelva a producir. El tratamiento de los fallos se divide
en dos fases: la localización del fallo y la recuperación del
sistema. En el caso del hardware puede bastar con cambiar el
componente, en el caso del software puede que baste con
instalar una nueva versión del software. Sin embargo existen
sistemas que no pueden parar y el programa deberá ser
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 11
modificado mientras se está ejecutando, este es un problema
bastante complejo que no estudiaremos en este tema.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 12
2.4. Redundancia
• Todas las técnicas que se utilizan para conseguir la tolerancia a
fallos se basan en añadir elementos redundantes que detecten y
recuperen los fallos. Estos elementos son innecesarios en el
funcionamiento normal del sistema, por lo que se trata de
minimizar la redundancia y maximizar la fiabilidad dentro de
los costes y tamaño del sistema.
• Existen varias clasificaciones de redundancia dependiendo de
los elementos hardware o software considerados y de la
terminología
utilizada.
A
continuación
repasaremos
brevemente la redundancia hardware dejando la redundancia
software para los siguientes capítulos.
Redundancia hardware
• En el caso de los elementos hardware, se distingue entre la
redundancia estática o enmascarada y la redundancia dinámica.
En el caso de la redundancia estática, los componentes se utilizan
dentro de un sistema para ocultar los efectos de los fallos. Un
ejemplo es la redundancia triple modular TMR (caso particular de la
N-modular redundancy en el que N=3). La TMR consiste en tener
tres componentes idénticos y unos circuitos que comparan
continuamente la salida y en el caso de que alguna difiera de las otras
dos, se bloquea la salida.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 13
En el caso de la redundancia dinámica es el mismo componente el
que indica si la salida es errónea. El sistema debe tener la capacidad
de detección de errores y debe ser otro sistema el que realice la
recuperación del error. Un ejemplo de ello es el detector de paridad
en el caso de memoria DRAM.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 14
Redundancia del software
3. Redundancia del software.[Krisna, 96][Burns, 03]
• La realización de software tolerante a fallos está emergiendo
actualmente y está en su fase inicial. Dado que el software no
se degrada, la tolerancia a fallos en el software está basada en
la búsqueda de errores de diseño. Como es sabido es imposible
escribir un programa largo sin cometer errores. La práctica
indica que la tasa de fallos software es mayor que la tasa de
fallos hardware en un aplicación compleja.
• La redundancia en software en la búsqueda de errores de
diseño tiene dos enfoques distintos. Uno de ellos es similar a la
redundancia
enmascarada
del
hardware
denominada
programación de N-versiones y el otro se basa en la detección
y recuperación de errores que es análogo a la redundancia
dinámica del hardware en el sentido de que se activan los
procedimientos de recuperación después de que se ha detectado
el error.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 15
Redundancia del software
3.1. Programación de N-versiones
• La programación de N-versiones se basa en la generación
independiente de N programas funcionalmente equivalentes.
Una vez diseñados los programas se ejecutan de forma
independiente
y un programa director va comparando los
resultados.
• En la programación de N-versiones se supone que se ha podido
especificar completamente y sin ambigüedad una aplicación y
que los programas se han escrito independientemente y por
tanto deben fallar de forma independiente. Esta suposición
supone que se deben utilizar lenguajes y entornos diferentes
para evitar errores debidos a la implementación el lenguaje. Si
se utiliza el mismo lenguaje deben utilizarse compiladores y
procesadores de distintos fabricantes. Por ejemplo para el
boeing 777 se escribió un único programa en ADA pero se
utilizaron tres compiladores y procesadores distintos.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 16
Redundancia del software
Cada versión realiza el calculo y comunica la programa director el
resultado (voto).
El programa director comunica el estatus de la comparación a cada
versión en función del resultado de la comparación o de si han sido
entregados a tiempo.
Los posibles resultados suelen ser: Continuación; terminación de una
o más versiones, continuación después de modificar uno o más votos
respecto al valor de la mayoría.
Comparación de votos
• Es crucial en la programación de N–versiones la eficacia y la
facilidad con que el programa director compara los votos. En
algunas aplicaciones donde los resultados del procesamiento de
cada versión son exactos, el programa director puede comparar
fácilmente
el
resultado
y
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 17
tomar
una
decisión.
Redundancia del software
Desafortunadamente en la mayoría de las aplicaciones dicha
comparación no resulta tan fácil. Para ahondar en este aspecto
de la comparación de votos se puede consultar la bibliografía
recomendada y los trabajos de Anderson y Lee del año 1990.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 18
Redundancia del software
3.2. Estrategia de bloques de recuperación en la
tolerancia a fallos software
• La programación N-versiones se le considera el equivalente
software a la redundancia estática en hardware ya que cada
versión tiene una relación fija con el director y siempre entra
en funcionamiento se hayan producidos fallos o no. En el caso
de la redundancia dinámica los componentes redundantes solo
entran en funcionamiento cuando se ha detectado un error
• Cabe decir que la estrategia de bloques de recuperación no está
implementada en ningún lenguaje de programación comercial
solo se han desarrollado algunos sistemas experimentales.
• Los bloques de recuperación (propuestos por Horning et al.,
1974) son bloques en el sentido habitual de los lenguajes de
programación, excepto
que en la entrada del bloque se
encuentra un punto de recuperación automático, y en la salida
se encuentra un test de aceptación.
• El test de aceptación se utiliza para comprobar que el sistema
se encuentra dentro de un estado aceptable después de la
ejecución del bloque. Si el test de aceptación falla, provoca que
el programa sea restaurado al punto de recuperación del
principio del bloque y se ejecuta otro módulo alternativo. Si de
nuevo falla el test de aceptación se ejecuta de nuevo otro
módulo y así alternativamente. Si falla todos los módulos
entonces el bloque falla. La siguiente figura muestra
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 19
Redundancia del software
esquemáticamente
como
funcionan
los
bloques
de
recuperación:
Test de aceptación
• El test de aceptación es crucial en la técnica de bloques de
recuperación ya que proporciona el mecanismo para la
detección de errores. Este test no debe sobrecargar al sistema
para que no influya en el rendimiento libre de errores del
sistema.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 20
Medición y predicción de la fiabilidad de software
4. Medición y predicción de la fiabilidad de
software. [Burns, 03]
• La fiabilidad del software se considera como la probabilidad de
que un programa funcione correctamente en un entorno
concreto y durante un periodo de tiempo. Se han propuesto
varios modelos para estimar la fiabilidad y calidad del
software, los cuales se pueden clasificar en:
Modelos de crecimiento de la fiabilidad del software. Estos modelos
intentan predecir la fiabilidad de un programa basándose en su
historial de errores
Modelos estadísticos. Estiman la fiabilidad del software mediante la
respuesta exitosa o fallida en determinados casos de prueba
aleatorios.
Sistemas en Tiempo Real
Manuel Ortiz. Universidad de Córdoba
Página 21
Descargar