lunes, 18 de febrero de 2013

Interrupciones y llamadas al sistema


Interrupciones

Interrupción (también conocida como interrupción de hardware o petición de interrupción) es una señal recibida por el procesador de un ordenador, indicando que debe "interrumpir" el curso de ejecución actual y pasar a ejecutar código específico para tratar esta situación.
Una interrupción es una suspensión temporal de la ejecución de un proceso, para pasar a ejecutar una subrutina de servicio de interrupción, la cual, por lo general, no forma parte del programa (generalmente perteneciente al sistema operativo, o al BIOS). Luego de finalizada dicha subrutina, se reanuda la ejecución del programa.
Las interrupciones surgen de las necesidades que tienen los dispositivos periféricos de enviar información al procesador principal de un sistema de computación. La primera técnica que se empleó fue que el propio procesador se encargara de sondear (polling) los dispositivos cada cierto tiempo para averiguar si tenía pendiente alguna comunicación para él. Este método presentaba el inconveniente de ser muy ineficiente, ya que el procesador constantemente consumía tiempo en realizar todas las instrucciones de sondeo.
El mecanismo de interrupciones fue la solución que permitió al procesador desentenderse de esta problemática, y delegar en el dispositivo la responsabilidad de comunicarse con el procesador cuando lo necesitara. El procesador, en este caso, no sondea a ningún dispositivo, sino que queda a la espera de que estos le avisen (le "interrumpan") cuando tengan algo que comunicarle (ya sea un evento, una transferencia de información, una condición de error, etc.).

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 hw para ver si algún dispositivo necesita atención.

Las interrupciones generadas por los dispositivos periféricos son generalmente asíncronos 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 pare implementer 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 Counter pare ejecutar 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.

Un 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 tambien 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 Hw son producidas por un dispositivo y viajan por el mismo bus del sistema.
Las interrupciones por Sw 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 hw 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. Cada diseño de computador tiene su propio mecanismo de interrupciones. Una forma de manejar las interrupciones es invocando una rutina general que examine la información de la interrupción y determine el tipo de interrupción ocurrida, y de alli llama a la rutina que se encarga de atender dicha interrupción. Por lo general se maneja mediante un vector de interrupciones, indexado por el tipo de interrupción. En este vector se encuentra la dirección de comienzo de la rutina que da servicio a dicho tipo. Se le conoce como vector de interrupción. Otra forma de localizar la rutina apropiada es mediante el pooling, es decir, preguntando a cada dispositivo pare ver quien requirió el servicio.
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.

Los sistemas de operación modernos operan por interrupciones (interrupt driven). Es decir, el sistema de operación estará ocioso esperando a que algún evento ocurra (proceso a ejecutar, servicio de E/S, etc). Los eventos son indicados por la ocurrencia de una interrupción o trap. Un trap es una excepción causada por software.

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 ordenes 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 ordenes, 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.

11 comentarios:

  1. ey culero desbloquea la opcion de copiar y pegar PUTOOOO!

    ResponderEliminar
    Respuestas
    1. una disculpa estaba esperando que alguien lo pidiera no lo había pensado antes que desconsiderado soy

      Eliminar
    2. Y ya abusando de tu confianza igual as funcionar las teclas de navegación, y la tecla función F5.

      Esperamos su pronta solución amablemente.

      Eliminar
    3. o si claro que si con gusto gusta un cafe o un te tambien?

      Eliminar
    4. solo seleciona y arrastra a tu word amigo

      Eliminar
  2. Interrupciones

    Una interrupción es una suspensión temporal de la ejecución de un proceso, para pasar a ejecutar una subrutina de servicio de interrupción, la cual, por lo general, no forma parte del programa (generalmente perteneciente al sistema operativo, o al BIOS). Luego de finalizada dicha subrutina, se reanuda la ejecución del programa.

    Las interrupciones surgen de las necesidades que tienen los dispositivos periféricos de enviar información al procesador principal de un sistema de computación. La primera técnica que se empleó fue que el propio procesador se encargara de sondear (polling) los dispositivos cada cierto tiempo para averiguar si tenía pendiente alguna comunicación para él. Este método presentaba el inconveniente de ser muy ineficiente, ya que el procesador constantemente consumía tiempo en realizar todas las instrucciones de sondeo.


    El mecanismo de interrupciones fue la solución que permitió al procesador desentenderse de esta problemática, y delegar en el dispositivo la responsabilidad de comunicarse con el procesador cuando lo necesitara. El procesador, en este caso, no sondea a ningún dispositivo, sino que queda a la espera de que estos le avisen (le "interrumpan") cuando tengan algo que comunicarle (ya sea un evento, una transferencia de información, una condición de error, etc.).


    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 hw para ver si algún dispositivo necesita atención.


    Las interrupciones generadas por los dispositivos periféricos son generalmente asíncronos 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 pare implementer 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 Counter pare ejecutar 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.


    Un 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 tambien 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 Hw son producidas por un dispositivo y viajan por el mismo bus del sistema.
    Las interrupciones por Sw 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.

    ResponderEliminar
    Respuestas
    1. Pasos durante una interrupción

      El CPU suspende lo que estaba realizando. El hw 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. Cada diseño de computador tiene su propio mecanismo de interrupciones. Una forma de manejar las interrupciones es invocando una rutina general que examine la información de la interrupción y determine el tipo de interrupción ocurrida, y de alli llama a la rutina que se encarga de atender dicha interrupción. Por lo general se maneja mediante un vector de interrupciones, indexado por el tipo de interrupción. En este vector se encuentra la dirección de comienzo de la rutina que da servicio a dicho tipo. Se le conoce como vector de interrupción. Otra forma de localizar la rutina apropiada es mediante el pooling, es decir, preguntando a cada dispositivo pare ver quien requirió el servicio.

      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.


      Los sistemas de operación modernos operan por interrupciones (interrupt driven). Es decir, el sistema de operación estará ocioso esperando a que algún evento ocurra (proceso a ejecutar, servicio de E/S, etc). Los eventos son indicados por la ocurrencia de una interrupción o trap. Un trap es una excepción causada por software.

      Eliminar
    2. 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 ordenes 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 ordenes, 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.

      Eliminar