El SO ocupa una posición intermedia entre los programas de aplicación
y el hardware. No se limita a utilizar el hardware a petición de las
aplicaciones ya que hay situaciones en las que es el hardware el que
necesita que se ejecute código del SO. En tales situaciones el hardware
debe poder llamar al sistema, pudiendo deberse estas llamadas a dos
condiciones:
- Algún dispositivo de E/S necesita atención.
- Se ha producido una situación de error al intentar ejecutar una instrucción del programa (normalmente de la aplicación).
En ambos casos, la acción realizada no está ordenada por el programa de aplicación, es decir, no figura en el programa.
Según los dos casos anteriores tenemos las interrupciones y la excepciones:
- Interrupción: señal que envía un dispositivo de E/S a la CPU para indicar que la operación de la que se estaba ocupando, ya ha terminado.
- Excepción: una situación de error detectada por la CPU mientras ejecutaba una instrucción, que requiere tratamiento por parte del SO.
Tratamiento de las interrupciones
Una interrupción se trata en todo caso, después de terminar la ejecución de la instrucción en curso.
El tratamiento depende de cuál sea el dispositivo de E/S que ha
causado la interrupción, ante la cual debe poder identificar el
dispositivo que la ha causado.
La ventaja de este procedimiento es que no se tiene que perder tiempo
ejecutando continuamente rutinas para consultar el estado del
periférico. El inconveniente es que el dispositivo debe tener los
circuitos electrónicos necesarios para acceder al sistema de
interrupciones del computador.
Importancia de las interrupciones
El mecanismo de tratamiento de las interrupciones permite al SO
utilizar la CPU en servicio de una aplicación, mientras otra permanece a
la espera de que concluya una operación en un dispositivo de E/S.
El hardware se encarga de avisar al SO cuando el dispositivo de E/S
ha terminado y el SO puede intervenir entonces, si es conveniente, para
hacer que el programa que estaba esperando por el dispositivo, se
continúe ejecutando.
En ciertos intervalos de tiempo puede convenir no aceptar señales de
interrupción. Por ello las interrupciones pueden inhibirse por programa
(aunque esto no deben poder hacerlo las mismas).
Un ejemplo de sincronismo por interrupción es el almacenamiento de
caracteres introducidos mediante el teclado. Cuando se introduce un
carácter, se codifica en el registro de datos del dispositivo y además
se activa un bit del registro de estado quien crea una interrupción en
el hardware. El procesador deja temporalmente la tarea que estaba
completando y ejecuta la rutina de atención a la interrupción
correspondiente. El teclado almacena el carácter en el vector de memoria
intermedia ( también llamado buffer) asociada al teclado y despierta el
proceso que había en el estado de espera de la operación de
entrada/salida.
Excepciones
Cuando la CPU
intenta ejecutar una instrucción incorrectamente construida, la unidad
de control lanza una excepción para permitir al SO ejecutar el
tratamiento adecuado. Al contrario que en una interrupción, la
instrucción en curso es abortada. Las excepciones al igual que las
interrupciones deben estar identificadas.
Clases de excepciones
Las instrucciones de un programa pueden estar mal construidas por diversas razones:
- El código de operación puede ser incorrecto.
- Se intenta realizar alguna operación no definida, como dividir por cero.
- La instrucción puede no estar permitida en el modo de ejecución actual.
- La dirección de algún operando puede ser incorrecta o se intenta violar alguno de sus permisos de uso.
Importancia de las excepciones
El mecanismo de tratamiento de las excepciones es esencial para
impedir, junto a los modos de ejecución de la CPU y los mecanismos de
protección de la memoria, que las aplicaciones realicen operaciones que
no les están permitidas. En cualquier caso, el tratamiento específico de
una excepción lo realiza el SO.
Como en el caso de las interrupciones, el hardware se limita a dejar
el control al SO, y éste es el que trata la situación como convenga.
Es bastante frecuente que el tratamiento de una excepción no retorne
al programa que se estaba ejecutando cuando se produjo la excepción,
sino que el SO aborte la ejecución de ese programa. Este factor depende
de la pericia del programador para controlar la excepción adecuadamente.
No hay comentarios:
Publicar un comentario