jueves, 29 de agosto de 2013

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.