Conceptos de interrupciones y
llamadas a servicios del sistema
Interrupciones
Un dispositivo periférico puede generar una señal eléctrica llamada interrupción que modifica ciertas banderas
que se encuentran en el CPU. La detección de una interrupción es parte del
ciclo de instrucción. En cada ciclo de instrucción, el CPU chequea las banderas
hardware para ver si algún dispositivo necesita atención.
Las interrupciones generadas por los dispositivos periféricos
son generalmente asíncronas con respecto al programa que se está ejecutando. Un
evento es asíncrono a una entidad si el momento cuando ocurre no está
determinado por la entidad. Las interrupciones no siempre ocurren en el mismo
punto dentro de la ejecución de un programa. En contraste, un evento de error
como la división por cero es síncrono en el sentido de que siempre
ocurre durante la ejecución de una instrucción particular si el mismo dato es
presentado a la instrucción.
Las rutinas del Sistema de Operación llamadas manejadores de
dispositivos usualmente manejan las interrupciones generadas por el
dispositivo. Los Sistemas de Operación usan interrupciones para implementar el
tiempo compartido. Tienen un dispositivo llamado timer que
genera una interrupción después de un intervalo específico de tiempo. El
Sistema de Operación inicializa el timer antes de actualizar el Program
Counterpareejecutar un programa de un usuario. Cuando el timer expira,
genera una interrupción causando que el CPU ejecute la rutina de servicio de la
interrupción timer.
Una señal o signal es la notificación
por software de que un evento ocurrió. Por lo general es la respuesta del
Sistema de Operación. Por ejemplo, ctrl-C genera una
interrupción para el manejador de dispositivo que maneja el teclado. El
manejador notifica al proceso apropiado mandando un signal. El Sistema
de Operación también puede enviar signals a un proceso para notificar la
finalización de una E/S o de un error.
- Las interrupciones pueden
ser producidas por Hardware o por Software
- Las interrupciones por
Hardware son producidas por un dispositivo y viajan por el mismo bus del
sistema.
- Las interrupciones por
Software son producidas por medio de la ejecución de una operación
especial que se conoce como "llamada al sistema" (system call) o
por errores producidos dentro de un proceso, también conocidas como
excepciones.
Hay muchos tipos
de interrupciones y pare cada uno de estas existe una rutina en el sistema de
operación que le da servicio. Los sistemas de operación actuales permiten a los
dispositivos tales como E/S o reloj del sistema interrumpir el CPU
asíncronamente.
Pasos
durante una interrupción
- El CPU suspende lo que
estaba realizando. El hardware transfiere el control al sistema de
operación.
- Deshabilita las
interrupciones. Mientras se atiende una interrupción no se puede atender
otra que llegue. Algunas arquitecturas con manejo de interrupciones
sofisticadas permiten, mediante un esquema de prioridades, interrumpir un
servicio de interrupción para atender otra de mayor prioridad. Aquellas
interrupciones de menor o igual prioridad son deshabilitadas.
- El kernel del sistema de
operación salva el estado actual del proceso interrumpido
- Transfiere su ejecución a
una dirección fija. Esta dirección por lo general contiene la dirección de
comienzo donde la rutina de servicio de la interrupción se encuentra.
- Se ejecuta la rutina de
interrupción
- Se restaura el estado
anterior
- Se habilitan las
interrupciones.
- La arquitectura de
interrupciones debe también almacenar la dirección de la instrucción
interrumpida.
Interrupciones
software
Son aquellas programadas por el usuario, es decir, el usuario
decide cuando y donde ejecutarlas, generalmente son usadas para realizar
entrada y salida.
Interrupciones por hardware
Son aquellas que son provocadas por dispositivos externos al
procesador su característica principal es que no son programadas, esto es,
pueden ocurrir en cualquier momento en el programa. Existen dos clases de
interrupciones de este tipo
Interrupciones por hardware enmascarables: Aquellas en las
que el usuario decide si quiere o no ser interrumpido.
Interrupciones por hardware no enmascarables (NMI): Aquellas que
siempre interrumpen al programa.
Llamadas al Sistema
Definición
de llamada al sistema
Una llamada al sistema es un método o función que puede invocar
un proceso para solicitar un cierto servicio al sistema operativo. Dado que el
acceso a ciertos recursos del sistema requieren la ejecución de código en modo
privilegiado, el sistema operativo ofrece un conjunto de métodos o funciones
que el programa puede emplear para acceder a dichos recursos. En otras
palabras, el sistema operativo actúa como intermediario, ofreciendo una
interfaz de programación (API) que el programa puede usar en cualquier momento
para solicitar recursos gestionados por el sistema operativo
Algunos ejemplos de llamadas al sistema son las siguientes:
< !--[if
!supportLists]-->· <!--[endif]-->time, que permite
obtener la fecha y hora del sistema.
< !--[if
!supportLists]-->· <!--[endif]-->write, que se
emplea para escribir un dato en un cierto dispositivo de salida, tales como una
pantalla o un disco magnético.
< !--[if
!supportLists]-->· <!--[endif]-->read, que es usada
para leer de un dispositivo de entrada, tales como un teclado o un disco
magnético.
< !--[if
!supportLists]-->· <!--[endif]-->open, que es usada
para obtener un descriptor de un fichero del sistema, ese fichero suele pasarse
a write.
Las llamadas al sistema proveen una interfaz entre los procesos y el Sistema de Operación. Por lo general estas llamadas se encuentran disponibles como instrucciones en lenguaje ensamblable. En algunos sistemas podemos realizar llamadas al sistema desde programas en lenguajes de alto nivel, en cuyo caso se asemejan a llamadas a funciones o procedimientos.
Las llamadas al
sistema y las excepciones funcionan como interrupciones del software: se
gestionan igual que las interrupciones del hardware, pero las provoca la propia
CPU.
Para provocar una interrupción software, existe una instrucción
de máquina específica:
< !--[if !supportLists]-->· <!--[endif]-->INT (Intel)
< !--[if !supportLists]-->· <!--[endif]-->TRAP (Motorola)
< !--[if !supportLists]-->· <!--[endif]-->SYSCALL (MIPS)
Referencias
No hay comentarios:
Publicar un comentario