Читать книгу Desarrollo y optimización de componentes software para tareas administrativas de sistemas. IFCT0609 - José Luis Villada Romero - Страница 20
2.7.Gestión de errores
ОглавлениеCuando se ejecuta una aplicación en el sistema operativo, puede ocurrir que el proceso realice su trabajo correctamente o bien, que se produzca algún error. En la mayoría de los casos, un error incontrolado en un sistema puede ocasionar la pérdida de información e incluso la inestabilidad del sistema operativo si se está haciendo uso de recursos del mismo.
Los SS. OO. modernos incorporan mecanismos dirigidos fundamentalmente a minimizar el impacto que pueden ocasionar estos errores y, a la misma vez, proporcionan las herramientas necesarias para que los desarrolladores puedan probar y mejorar los programas que utilizará el resto de usuarios.
Cuando se produce un error, el resultado es una interrupción de la ejecución normal del programa que lo causa. A continuación, el SO otorga el control de ejecución a la rutina adecuada para que trate el error. Todo el tratamiento de estos errores se conoce como gestión de excepciones y existen sistemas operativos que lo soportan y otros que no.
Las excepciones se pueden clasificar en los siguientes tipos:
Fallos, que pueden ser corregidos y que retoman la ejecución normal del programa que las generó.
Traps, que son utilizadas por los programadores para depuración.
Aborts, que son errores graves que ocurren cuando hay un fallo de hardware.
La clasificación anterior se refiere a excepciones que son detectadas por el procesador. Sin embargo, también pueden ocasionarse de forma programada. Para ello, se usa la instrucción int o int3. Algunas de las excepciones más comunes en Linux aparecen en la siguiente tabla.
Tabla con algunas de las excepciones más comunes en Linux | |||
# | Exception | Exception handler | Signal |
0 | Divide error | divide_error( ) | SIGFPE |
1 | Debug | debug( ) | SIGTRAP |
2 | NMI | nail( ) | None |
3 | Breakpoint | int3( ) | SIGTRAP |
4 | Overflow | overflow( ) | SIGSEGV |
5 | Bounds check | bounds( ) | SIGSEGV |
6 | Invalid opcode | invalid_op( ) | SIGILL |
7 | Device not available | device_not_available( ) | None |
8 | Double fault | doublefault_fn( ) | None |
9 | Compressor segment overrun | copressor_segment_overrun( ) | SIGFPE |
10 | Invalid TSS | invalid_TSS( ) | SIGSEGV |
11 | Segment not present | segment_not_present( ) | SIGBUS |
12 | Stack segment fault | atack_segment( ) | SIGBUS |
13 | General protection | general_protection( ) | SIGSEGV |
14 | Page Fault | page_fault( ) | SIGSEGV |
15 | Intel-reserved | None | None |
16 | Floating-point error | coprocessor_error( ) | SIGFPE |
17 | Aligment check | alignment_check( ) | SIGBUS |
18 | Machine check | machine_check( ) | None |
19 | SIMD floating point | aimd_coproceasor_error( ) | SIGFPE |