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