Interrupciones y llamadas a servicios de sistema.
Interrupciones
Una
interrupción es un mecanismo que permite ejecutar un bloque de instrucciones
interrumpiendo la ejecución de un programa, y luego restablecer la ejecución del
mismo sin afectarlo directamente. De
este modo un programa puede ser interrumpido temporalmente para atender alguna
necesidad urgente de la computadora y luego continuar su ejecución de manera
normal y como si nada hubiera pasado.
Las
interrupciones son un método del que disponen los dispositivos e incluso los
procesos para hacer notar a la CPU la aparición de alguna circunstancia que
requiera su intervención. De este modo, los dispositivos pueden provocar que la
CPU deje por el momento la tarea que estaba realizando y atienda la
interrupción. Una vez atendida, seguirá con su labor anterior.
Cuando
no existían interrupciones, era el procesador el que tenía que estar
continuamente comprobando el estado del dispositivo cuando lo necesitaba. Todo
ese tiempo que el procesador estaba sondeando el estado de los dispositivos era
tiempo que no se podía dedicar a otros procesos, lo que significa esto una
afectación al rendimiento.
Por
todo ello se pensó que lo mejor era que existiera una línea especial entre el procesador
y los dispositivos, por la que los dispositivos indicaban al procesador que ya
estaban listos.
Cuando
al procesador le llega una interrupción, la atiende inmediatamente dejando de
hacer lo que estuviera haciendo, para poder atenderla de la forma correcta,
debe saber con anterioridad cómo tratarla. Las computadoras tienen en un sitio
conocido de memoria, las distintas rutinas de tratamiento para las diferentes
interrupciones, el procesador reconoce la interrupción de la que se trata y
busca en memoria la rutina correspondiente.
Una
vez terminado el tratamiento de la interrupción, es muy importante que el
procesador siga con lo que estaba haciendo, es importante que antes de tratar
la interrupción se guarde de alguna forma el estado en que se encuentra la
computadora, y al terminar la rutina de tratamiento se restaure el estado.
Se
pueden distinguir dos tipos de interrupciones: interrupciones software e
interrupciones hardware; Las interrupciones software son provocadas por los
programas usando una función especial del lenguaje, tienen como objetivo el que
la CPU ejecute algún tipo de función, al terminar de ejecutarse esta función,
se seguirá ejecutando el programa que provocó la interrupción.
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 revisa las banderas hardware para ver si algún dispositivo necesita atención.
Llamadas a servicios de Sistema
Las
llamadas son peticiones a ejecución de rutinas y proporcionan la interfaz entre
el sistema operativo y un programa en ejecución. Estas llamadas son
instrucciones de lenguaje ensamblador y se presentan en los manuales que
emplean los programadores de este lenguaje. Algunos sistemas permiten efectuar
llamadas al sistema directamente desde un programa realizado en el lenguaje de
mayor nivel, normalmente estas llamadas se asemejan a una función o sub-rutinas
predefinidas, que generan una llamada a una ruta en especial de tiempo de
ejecución, que realice efectivamente la llamada al sistema, o bien pueden
generarla directamente en la línea. Por ejemplo: En el procesador INTEL es INT
y en UNIX son rutinas en C.
Los
programadores de sistemas de aplicación invocan con frecuencia los servicios
del sistema operativo desde sus programas mediante llamadas del sistema. Las órdenes
del sistema emitidas por los usuarios que manejan el lenguaje de ordenes
(lenguaje de control JCL) normalmente se convierten a lenguaje de máquina y se
ejecutan como una serie de llamadas del sistema.
Además
de proporcionar la mayoría de la funcionalidad accesible a los usuarios del
lenguaje de órdenes, las llamadas del sistema usualmente permiten un control
más fino sobre las operaciones del sistema y un acceso más directo a las
facilidades del hardware especialmente el sistema de E/S. Pero para algunas
operaciones de entrada en comunicación y funciones de gestión del sistema, las
llamadas del sistema representan usualmente un súper conjunto de las funciones
accesibles a nivel de órdenes.
Las
llamadas al sistema para ejecución y el control de programas, usualmente
incluyen un conjunto completo de los servicios accesibles por la vía del
lenguajes de órdenes, tales como: RUN, EXECUTE, ABORT y planificación
relacionada con el tiempo, además los usuarios con las llamadas del sistema
pueden suspender, establecer o cambiar atributos del tiempo de ejecución de uno
ó más programas. También se proporcionan algunas facilidades muy extendidas en
sistemas de tiempo real, para comunicación entre programas y sincronización.
Por ejemplo los programas pueden cambiar datos y señales de tiempo para
sincronizar su ejecución con ciertos sucesos.
Las
llamadas del sistema para el gestor de recursos, proporcionan servicios para la
asignación, reserva y reclamación de los recursos del sistema. Por ejemplo,
existen llamadas del sistema para extender o reducir la cantidad de memoria
poseída por el programa que es llama. Las llamadas del sistema pueden asignar o
reservar otros tipos de objetos del sistema y después destruir o devolver su
custodia al sistema operativo.
El
siguiente diagrama ilustra la relación entre la Shell y el Kernel. Recordemos
que el Shell es lo que el sistema operativo nos muestra, la portada, el
intérprete de comandos, etc. El Kernel es el núcleo del sistema operativo.