Академический Документы
Профессиональный Документы
Культура Документы
Nota importante:
Este documento no pretende reemplazar al material propuesto por la UNED para
la asignatura Sistemas en Tiempo Real. Cualquier sugerencia, comentario o
corrección sobre este documento, envíelo a rafpalvarez@gmail.com para poder
realizar los cambios necesarios.
1
5 Fiabilidad, tolerancia a fallos.
Los requisitos de fiabilidad y seguridad de los sistemas de tiempo real y embebidos
habitualmente son mucho más estrictos que los de otros sistemas informáticos. Un
computador de control de procesos, por ejemplo, un sistema de navegación aérea debería
posibilitar que el piloto saltase fuera del avión antes de permitir que el avión se estrellara.
A medida que la sociedad siga confiando el control de sus funciones vitales a los
computadores, más necesario será que estos sistemas no fallen. Sin pretender definir de
forma precisa que significa un fallo de un sistema o un defecto, existen, en general, cuatro
causas de defectos que pueden propiciar el fallo de un sistema embebido.
• Especificación inadecuada.
• Defectos provocados por fallos en uno o más componentes del procesador de los
sistemas embebidos.
La fiabilidad es una medida del éxito con el que el sistema se ajusta a alguna
especificación definitiva de su comportamiento.
Los fallos son el resultado de problemas internos no esperados que el sistema manifiesta
eventualmente en su comportamiento externo. Estos problemas se llaman errores, y sin
causas mecánicas o algorítmicas se denominan defectos.
2
• Fallos intermitentes Son fallos transitorios que ocurren de vez en cuando. Un
ejemplo es un componente hardware sensible al calor, que funciona durante un rato,
deja de funcionar, se enfría, y entonces comienza a funcionar de nuevo.
Para crear sistemas fiables, se deben tener en cuenta todos estos tipos de fallos
Un sistema proporciona servicios, Resulta posible, por lo tanto, clasificar los modos de
fallo de un sistema de acuerdo con el impacto que tendrán en los servicios que se proporciona.
En general, un error de valor podría estar aún dentro del rango correcto de valores, o
podría encontrarse fuera del rango esperado para ese servicio. Esto ultimo equivale a un
error de escritura en los lenguajes de programación, y se denomina error de límites.
Normalmente, estos tipos de fallos se reconocen fácilmente.
Los fallos en el dominio del tiempo pueden hacer que el servicio sea entregado:
• Fallo de retraso: un sistema que produce servicios correctos en el dominio del valor,
pero que sufre errores de retraso en el tiempo.
• Fallo de silencio: un sistema que produce servicios correctos tanto en el dominio del
valor como en el del tiempo, hasta que falla. El único fallo posible es un fallo de
omisión, y cuando ocurre todos los servicios siguientes también sufrirán fallos de
omisión.
3
• Fallo de parada: un sistema que tiene todas las propiedades de un fallo silencioso,
pero que permite que otros sistemas puedan detectar que ha entrado en el estado de
fallo de silencio.
• Sin fallos: un sistema que siempre produce los servicios correctos, tanto en el
dominio del valor como en el del tiempo.
Los componentes software de los grandes sistemas embebidos actualmente son mucho
más complejos que sus correspondientes elementos hardware. Aunque el software no se
deteriora con el tiempo, resulta en cualquier caso virtualmente imposible escribir programas
libres de fallos. Sin embargo, la calidad del software se puede mejorar mediante:
4
Fallos, por lo tanto, es la eliminación de fallos. Esto consiste normalmente en procedimientos
para encontrar y eliminar las causas de los errores. Aunque se pueden utilizar técnicas como
los revisores de diseño, la verificación de programas y las inspecciones del código,
normalmente se pone mas énfasis en la prueba del sistema. Desafortunadamente, la prueba
del sistema nunca puede ser exhaustiva y eliminar todos los potenciales fallos. En concreto,
existen los siguientes problemas:
5
Sin embargo, la creciente complejidad del software y la introducción de componentes
hardware han hecho que no se puedan seguir haciendo esas suposiciones.
5.3.3 Redundancia.
Todas las técnicas utilizadas para conseguir tolerancia a fallos se basan en añadir
elementos extra al sistema para que detecte y se recupere de los fallos. Estos
componentes son redundantes, en el sentido de que no son necesarios para el normal
funcionamiento del sistema. Esto se llama a menudo redundancia protectora. La intención
ultima de la tolerancia a fallos es minimizar la redundancia maximizando la fiabilidad
proporcionada, siempre bajo las restricciones de coste y tamaño del sistema. Se debe tener
cuidado al estructurar los sistemas tolerantes a fallos, ya que los distintos componentes
incrementan inevitablemente la complejidad de todo el sistema. Esto, en si mismo, puede
conducir a sistemas menos fiables.
6
Esto es, que no existe relación entre los fallos de una versión y los fallos de otra. Esta
suposición puede no resultar valida si cada versión ha sido escrita en el mismo lenguaje de
programación, ya que los errores asociados con la implementación del lenguaje son comunes
a las distintas versiones. Consecuentemente, se debe utilizar lenguajes y entornos de
programación diferentes. Si se utiliza el mismo lenguaje, los compiladores y los entornos
utilizados deberían ser de distintos fabricantes. En cualquier caso, para protegernos de
fallos físicos, las N-Versiones deben ser distribuidas entre diferentes maquinas con
líneas de comunicación tolerantes a fallos.
• Vectores de comparación.
• Indicadores de estatus de la comparación,
• Puntos de comparación.
Los vectores de comparación son las estructuras de datos que representan las salidas de
los votos) producidos por las versiones, además de cualquier atributo asociado con su
calculo; es-tos deben ser comparados por el director. Por ejemplo, en un sistema de control
de una aeronave, si los valores que se están comparando son las posiciones de la aeronave,
un atributo puede indicar si los valores son el resultado de una lectura de radar reciente o
han sido calculados a partir de lecturas anteriores. Los indicadores de estatus de la
comparación son comunicados por el director a las versiones, e indican las acciones que
cada versión debe ejecutar como resultado de la comparación realizada por el director.
Tales acciones dependerán del resultado de la comparación: si los votos coinciden o si han
sido entregados a tiempo. Los posibles resultados son:
• Continuación.
• Terminación de una o más versiones
• Continuación después de modificar uno o mas votos respecto al valor de la mayoría.
7
Los puntos de comparación son puntos dentro de las versiones donde deben
comunicar sus votos al proceso director, destacan, la frecuencia con la cual se realizan las
comparaciones es una decisión de diseño importante. Esta es la granularidad de la tolerancia
a fallos proporcionada. La tolerancia a fallos de gran granularidad (esto es, con
comparaciones infrecuentes) minimizara la penalización de las prestaciones inherente a las
estrategias de comparación, y permitirá una gran independencia en el diseño de las versiones.
Sin embargo, una granularidad grande probablemente producirá una gran divergencia en los
resultados obtenidos, debido al gran numero de pasos ejecutados entre comparaciones. La
tolerancia a fallos de granularidad pequeña requiere una semejanza en los detalles de la
estructura de los programas, y por lo tanto reduce el grado de independencia entre las
versiones. Un numero frecuente de comparaciones también incrementa la sobrecarga
asociada con esta técnica.
8
cuadrática puede tener mis de una solución. De nuevo el desacuerdo es posible, incluso
cuando no se haya producido fallo alguno.
9
5.5.1 Detección de errores.
10
o Comprobaciones de racionalidad dinámica. En la salida producida por
algunos controladores digitales, habitualmente existe una relación entre
cualesquiera dos salidas consecutivas. Por lo tanto, se podrá detectar un
error si el valor de una salida nueva difiere considerablemente del valor
de la salida anterior.
Hay que destacar que muchas de las técnicas anteriores se pueden aplicar también
en el nivel hardware, y que por lo tanto pueden ser consideradas dentro de los «errores en el
entorno».
Como puede ocurrir que transcurra un tiempo entre que se produce un defecto y se
detecta el error, será necesario valorar cualquier daño que se haya podido producir en
ese intervalo de tiempo, Aunque el tipo de error detectado dará alguna idea sobre el daño a la
rutina de tratamiento del error, podrían haber sido diseminadas informaciones erróneas por el
sistema y por su entorno. Por lo tanto, la valoración de los daños estará estrechamente
relacionada con las precauciones que hayan sido tomadas por los diseñadores del sistema
para el confinamiento del daño. El confinamiento del daño se refiere a la estructuración del
sistema de modo que se minimicen los danos causados por un componente defectuoso.
también se conoce como construcción de cortafuegos.
Se pueden utilizar dos técnicas para estructurar los sistemas de modo que se facilite
el confinamiento del daño: descomposición modular y acciones atómicas.
Se dice que la actividad de un componente es atómica sino existe interacciones entre la actividad
y el sistema durante el transcurso de la acción,
Esto es, para el resto del sistema una acción atómica aparece como indivisible, y se
lleva a cabo de modo instantáneo. No se puede pasar información desde la acción atómica
hacia el resto del sistema y viceversa. Las acciones atómicas a menudo reciben el nombre
de transacciones o de-transacciones atómicas. Se utilizan para mover el sistema de un
estado consistente a otro, y para restringir el flujo de información entre componentes.
11
recurso se puede comparar la operación deseada con sus permisos de acceso, y, si fuera
necesario, se le denegara el acceso.
Una vez que ha sido detectada una situación de error y el daño ha sido valorado, se
deben iniciar los procedimientos de recuperación de errores. Probablemente, esta es la
fase mas importante de cualquier técnica de tolerancia a fallos. Se debe transformar un
estado erróneo del sistema en otro desde el cual el sistema pueda continuar con su
funcionamiento normal, aunque quizás con una cierta degradación en el servicio.
Respecto a la recuperación de errores, se han propuesto dos estrategias: recuperación
hacia delante (forward) y hacia atrás (backward).
12
Un error es una manifestación de un defecto, y aunque la fase de recuperación del
error puede haber llevado al sistema a un estado libre de error, el error se puede volver a
producir. Por lo tanto, la fase final de la tolerancia a fallos es erradicar el fallo del
sistema, de forma que se pueda continuar con el servicio normal.
El tratamiento de fallos se divide en dos fases: la localización del fallo y la reparación del
sistema. Las técnicas de detección de errores pueden ayudar a realizar un seguimiento del
fallo de un componente. En el caso de componentes hardware, esto puede ser
suficientemente preciso, y el componente puede ser simplemente reemplazado. Un fallo
software puede ser eliminado en una nueva versión del código.
En relación con las cuatro fases de la tolerancia a fallos software, tenemos que: la
detección de errores es asumida por el test de aceptación; la evaluación de daños no es
necesaria, ya que se supone que la recuperación hacia atrás limpia los estados erróneos ;
y el tratamiento del fallo es realizado utilizando un recambio que estaba a la espera.
Como los bloques ordinarios, los bloques de recuperación se pueden anidar. Si un bloque
anidado en un bloque de recuperación falla, su test de aceptación y todas sus alternativas
también fallen; en este caso, se restaurara el punto de recuperación del nivel exterior y se
ejecutara el modulo alternativo de dicho modulo.
13
la ejecución normal libre de errores se vea afectada lo menos posible. Hay que destacar
que se utiliza el termino aceptación, y no el termino corrección, lo que permite que un
componente pueda proporcionar un servicio degradado.
• Sobrecargas asociadas
• Diversidad en el diseño
• Detección de errores
• Atomicidad
14
totalmente posible estructurar un pro-grama de forma que las operaciones no
recuperables no aparezcan en los bloques de recuperación.
15
A pesar de lo anterior. las excepciones y sus gestores se utilizaran inevitablemente como
un mecanismo de gestión de errores de propósito general. Para concluir, las excepciones y la
gestión de excepciones se pueden utilizar para:
En un componente ideal se pueden dar dos tipos de fallos: aquellos debidos a una
petición de servicio ilegal, llamados excepciones de interfaz, y aquellos debidos a un
mal funcionamiento del componente mismo, o de los componentes necesarios para
servir la petición original. Cuando los componentes no pueden tolerar estos fallos
mediante una recuperación de errores hacia adelante o hacia atrás, se lanzan excep-
ciones de fallo en el componente invocador. Antes de lanzar cualquier excepción, el
componente debe volver, si es posible, a un estado consistente, de forma que pueda servir
una petición futura.
Las métricas de fiabilidad en los componentes hardware han sido establecidas hace
tiempo. Tradicionalmente, cada componente es considerado como un representante de la
población de miembros idénticos cuya fiabilidad es estimada como la proporción de una
muestra que falla durante una prueba. Por ejemplo, se ha observado que, después de un
periodo inicial de establecimiento, ciertos componentes electrónicos fallan en una tasa
constante
Aún es común la visión del software como correcto o no. Si no es correcto, la prueba de un
pro-grama indicara la localización de los defectos, que entonces podrán ser corregidos. Este
capitulo ha intentado ilustrar que el enfoque tradicional de la prueba del software, aunque
resulte indispensable, nunca puede asegurar que los programas se encuentren libres de
errores, especialmente en el caso de sistemas muy grandes y complejos donde existirán
especificaciones residuales o errores de diseño. Por todas estas razones es por lo que se
16
aboga por los métodos que incrementen la fiabilidad a partir del uso de la redundancia.
Desafortunadamente, incluso con este enfoque no se puede garantizar que los sistemas que
contengan software no vayan a fallar. Por lo tanto, resulta esencial que se desarrollen técnicas
para predecir o medir su fiabilidad.
De la misma manera que sucede con la fiabilidad, para cumplir con los requisitos de
seguridad de un sistema embebido se debe realizar un análisis de seguridad a lo largo de
todas las etapas de desarrollo de su ciclo de vida.
5.10.1 Confiabilidad.
17
el concepto de seguridad son ejemplos de esta nueva terminología. Llegados a este
punto, se ha producido un intento de obtener definiciones claras y ampliamente
aceptadas para los conceptos básicos en este campo. Por ello, se ha introducido la noción
de confiabilidad, La confiabilidad de un sistema es la propiedad del sistema que permite
calificar, justificadamente, como fiable al servicio que proporciona. La confiabilidad,
por lo tanto, incluye como casos especiales las nociones de fiabilidad y seguridad. La
confiabilidad puede ser descrita en relación con tres componentes.
18