¿Qué son las interrupciones de software y hardware y cómo se procesan?

43

No estoy seguro si entiendo el concepto de interrupciones de hardware y software.

Si entiendo correctamente, el propósito de una interrupción de hardware es llamar la atención de la CPU, parte de la implementación de la multitarea de la CPU.

  1. Entonces, ¿qué emite una interrupción de hardware? ¿Es el proceso del controlador de hardware?
  2. En caso afirmativo, ¿dónde se ejecuta el proceso del controlador de hardware? Si se está ejecutando en la CPU, entonces no tendrá que llamar la atención de la CPU por interrupción de hardware, ¿verdad? Entonces, ¿se está ejecutando en otro lugar?
  3. ¿Una interrupción de hardware interrumpe la CPU directamente, o primero se pone en contacto con el proceso del kernel y el proceso del kernel luego contacta / interrumpe la CPU?

Por otro lado, creo que el propósito de una interrupción de software es que un proceso que se ejecuta actualmente en una CPU solicite algunos recursos.

  1. ¿Cuáles son los recursos? ¿Están todos en forma de procesos en ejecución? Por ejemplo, ¿el proceso del controlador de CPU y los procesos del controlador de memoria representan recursos de CPU y memoria? ¿El proceso del controlador de los dispositivos de E / S representa los recursos de E / S? ¿Hay otros procesos en ejecución que el proceso quisiera comunicar también con recursos?
  2. En caso afirmativo, ¿una interrupción de software contacta los procesos (que representan los recursos) indirectamente a través del proceso del kernel? ¿Es cierto que, a diferencia de una interrupción de hardware, una interrupción de software nunca interrumpe directamente la CPU, sino que interrumpe / contacta el proceso del kernel?
Tim
fuente

Respuestas:

55

Una interrupción de hardware no es realmente parte de la multitarea de la CPU, pero puede impulsarla.

  1. Las interrupciones de hardware son emitidas por dispositivos de hardware como discos, tarjetas de red, teclados, relojes, etc. Cada dispositivo o conjunto de dispositivos tendrá su propia línea IRQ (Interrupt ReQuest). Según la IRQ, la CPU enviará la solicitud al controlador de hardware apropiado. (Los controladores de hardware suelen ser subrutinas dentro del núcleo en lugar de un proceso separado).

  2. El controlador que maneja la interrupción se ejecuta en la CPU. La CPU se interrumpe de lo que estaba haciendo para manejar la interrupción, por lo que no se requiere nada adicional para llamar la atención de la CPU. En los sistemas multiprocesador, una interrupción generalmente solo interrumpirá una de las CPU. (Como casos especiales, los mainframes tienen canales de hardware que pueden manejar múltiples interrupciones sin soporte de la CPU principal).

  3. La interrupción de hardware interrumpe la CPU directamente. Esto hará que se active el código relevante en el proceso del kernel. Para los procesos que tardan un tiempo en procesarse, el código de interrupción puede permitirse ser interrumpido por otras interrupciones de hardware.

    En el caso de interrupción del temporizador, el código del planificador del núcleo puede suspender el proceso que se estaba ejecutando y permitir que se ejecute otro proceso. Es la presencia del código del planificador lo que permite la multitarea.

Las interrupciones de software se procesan de manera similar a las interrupciones de hardware. Sin embargo, solo pueden ser generados por procesos que se están ejecutando actualmente.

  1. Por lo general, las interrupciones de software son solicitudes de E / S (entrada o salida). Estos llamarán rutinas del núcleo que programarán la E / S para que ocurra. Para algunos dispositivos, la E / S se realizará de inmediato, pero la E / S de disco generalmente se pone en cola y se realiza más adelante. Dependiendo de la E / S que se esté realizando, el proceso puede suspenderse hasta que se complete la E / S, haciendo que el planificador del núcleo seleccione otro proceso para ejecutar. La E / S puede ocurrir entre procesos y el procesamiento generalmente se programa de la misma manera que la E / S de disco.

  2. La interrupción del software solo habla con el núcleo. Es responsabilidad del núcleo programar cualquier otro proceso que deba ejecutarse. Este podría ser otro proceso al final de una tubería. Algunos núcleos permiten que algunas partes de un controlador de dispositivo existan en el espacio del usuario, y el núcleo programará este proceso para que se ejecute cuando sea necesario.

    Es correcto que una interrupción de software no interrumpa directamente la CPU. Solo el código que se está ejecutando actualmente puede generar una interrupción de software. La interrupción es una solicitud para que el núcleo haga algo (generalmente E / S) para ejecutar el proceso. Una interrupción de software especial es una llamada Yield, que solicita al planificador del núcleo que verifique si se puede ejecutar algún otro proceso.

Respuesta al comentario:

  1. Para las solicitudes de E / S, el núcleo delega el trabajo al controlador del núcleo apropiado. La rutina puede poner en cola la E / S para un procesamiento posterior (común para E / S de disco) o ejecutarla inmediatamente si es posible. El controlador maneja la cola, a menudo cuando responde a interrupciones de hardware. Cuando se completa una E / S, el siguiente elemento de la cola se envía al dispositivo.

  2. Sí, las interrupciones de software evitan el paso de señalización de hardware. El proceso que genera la solicitud de software debe ser un proceso actualmente en ejecución, para que no interrumpan la CPU. Sin embargo, interrumpen el flujo del código de llamada.

    Si el hardware necesita que la CPU haga algo, hace que la CPU interrumpa su atención al código que está ejecutando. La CPU empujará su estado actual en una pila para que luego pueda volver a lo que estaba haciendo. La interrupción podría detenerse: un programa en ejecución; el código del núcleo maneja otra interrupción; o el proceso inactivo.

BillThor
fuente
¡Gracias! (1) En la interrupción del software, ¿las operaciones de E / S las realiza la rutina del controlador del dispositivo de E / S dentro del proceso del kernel? (2) ¿es correcto que la ruta por la que pasa la interrupción de software es un paso más corta que la ruta de interrupción de hardware? En otras palabras, para interrupción de software: programa de software -> rutina de controlador de dispositivo dentro del proceso del núcleo; para interrupción de hardware: hardware -> CPU -> rutina de controlador de dispositivo dentro del proceso del kernel?
Tim
¡Gracias! ¿Es correcto que la interrupción del hardware provoque que la CPU empuje su estado actual en una pila para que el controlador de hardware pueda ejecutarse en la CPU y luego devolver el proceso interrumpido en la CPU? ¿La interrupción del software también hace que el proceso que se ejecuta en la CPU se inserte en una pila para que el servicio solicitado se pueda ejecutar en la CPU?
Tim
Cualquiera de las interrupciones hará que el estado sea empujado en la pila. Esto permite que el sistema vuelva a cargar el estado cuando termina con la interrupción.
BillThor
¡Gracias! si el servicio solicitado no se ejecutará en la CPU, como las operaciones de E / S que se ejecutan en los dispositivos de E / S en lugar de la CPU, y el proceso de solicitud puede continuar ejecutándose sin esperar a que finalice el servicio solicitado, el proceso de solicitud aún se colocará en una pila ?
Tim
Normalmente, la lectura de E / S se llama sincrónicamente y el proceso no se ejecutará hasta que se complete la E / S. Para las lecturas, casi siempre quieres esto. Las escrituras generalmente ocurren de forma asíncrona permitiendo que el proceso continúe ejecutándose.
BillThor