Errores. Los mensajes de error son comunes y varían dependiendo del tipo de dispositivo.
Para aislar de la complejidad que significaría tratar de comunicarse con el dispositivo por parte de la CPU a un nivel muy bajo, los proveedores del dispositivo proporcionan el software propio para acceder a todos sus servicios de una forma más cómoda y transparente al programador y/o SO. Este software se denomina controlador. El SO utilizará la interfaz proporcionada por el controlador para entenderse con el dispositivo.
Entre las principales funciones dentro del módulo de gestión de dispositivos de E/S, se encuentran:
Realizar la comunicación, mediante comandos, sobre los dispositivos. Gestionar las interrupciones que producen dichos dispositivos y saber interpretar los errores.
Proporcionar una interfaz simple y flexible para que los procesos del sistema puedan usar los dispositivos.
Proporcionar servicios para la emulación de dispositivos virtuales que permitan usar la interfaz de E/S como si se estuviera tratando con un dispositivo de E/S real.
Asegurar el funcionamiento de un dispositivo E/S cuando es conectado por primera vez.
Actividades
6.¿Qué mecanismo es usado por los dispositivos de E/S cuando requieren el uso del procesador en un momento determinado?
Todos los SS. OO. modernos ponen a disposición del usuario un conjunto de herramientas que permiten configurar el subsistema de red. La complejidad de este subsistema queda completamente oculta bajo la interfaz que proporcionan. En la mayoría de los casos, solo hacen falta conocimientos sobre el tipo y estructura de la red, ya que el sistema operativo se encargará del resto.
El subsistema de gestión de red permite que los procesos del sistema operativo interactúen a través de un canal de comunicación con el enfoque de una red de comunicación.
Suele estar dividido en dos partes:
En el kernel se implementan las tareas de bajo nivel para la comunicación entre sistemas, pila de protocolos TCP/IP, controladores de red, etc.
En el espacio de usuario, se encuentran programas y ficheros que configuran los parámetros relacionados con la red, dirección IP, tablas de enrutado, etc.
En Windows, algunos de estos programas son: Ping, Nslookup, Netstat, etc.
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 |
2.8.Gestión de la seguridad
La seguridad es importante en un sistema operativo, ya que se está hablando de un software que controla todo el sistema a nivel de hardware y de software. Sin embargo, el concepto de seguridad es muy amplio y dependiendo del ámbito puede significar una cosa u otra.
En términos informáticos, se dice que la seguridad es equivalente a garantizar una serie de propiedades. En el caso de un sistema operativo, esas propiedades se aplicarían sobre los usuarios del mismo:
Читать дальше