¿Cuál es la diferencia entre las interrupciones de hardware y software?

La única diferencia es cómo se activan. El hardware desencadena una interrupción de hardware (por lo general, algunos periféricos externos a la CPU, como un adaptador de red, un chip de sonido, etc.), mientras que una interrupción de software es causada por el propio software, al igual que una llamada de función.

En ambos casos de interrupciones HW y SW, el control se redirige a una rutina de servicio de interrupción cuyo trabajo es tomar las medidas necesarias y luego devolver el control al punto donde tuvo lugar la interrupción. A menudo, el objetivo en la rutina de interrupción es hacer el trabajo mínimo necesario para devolver el control al programa anterior, aplazando acciones más complejas que se manejarán más tarde durante el tiempo de inactividad de la CPU. Esto se conoce como una “llamada de procedimiento diferido”, o DPC, y evita que las interrupciones de hardware degraden el rendimiento general del sistema de forma impredecible al priorizar siempre esas interrupciones sobre otro trabajo.

En los primeros días de la PC, el BIOS proporcionó una variedad de control de sistema de bajo nivel a través de interrupciones de software. Por ejemplo, una serie de funciones proporcionó una salida de video simple en int 10h, y los discos se podían leer, escribir o formatear a nivel de sector usando int 13h. Del mismo modo, MS-DOS proporcionó servicios de sistema operativo de nivel superior, como apertura de archivos, creación, lectura y escritura en int 21H. En cierto modo, estas fueron las primeras API residentes en la memoria, antes del advenimiento de las API de sistemas operativos más complejas que usan DLL en Windows o bibliotecas dinámicas en Linux.

También hay una clase de interrupciones de software (“excepciones”) que están bajo el control de la CPU pero que el programa en ejecución no llama explícitamente. Los ejemplos serían fallas de página causadas por el acceso a la memoria que se ha cambiado a almacenamiento externo, o violaciones de acceso causadas por tocar la memoria que el programa no tiene permitido. En tales casos, el control se redirige a una rutina del sistema operativo que maneja la situación, como bloquear el programa con gracia en caso de violación de acceso, o cargar una página necesaria desde el almacenamiento externo y volver al punto de una falla de la página como si nada sucediera .

La interrupción de hardware se desencadena por una señal física de hardware que sube o baja y esta señal se puede capturar utilizando CRO o el analizador lógico. Habrá pines en el procesador correspondientes a estas señales de interrupción. En general, las interrupciones de hardware se activan por nivel o por flanco. Cuando se activan estas interrupciones, el contador del programa se carga con la dirección del vector del ISR correspondiente a esta interrupción y ejecuta el ISR.

Las interrupciones de software son básicamente una instrucción especial que desencadena una trampa. Las llamadas del sistema utilizan las trampas para interactuar con el núcleo desde la aplicación y también durante la depuración de código. No tiene ninguna señal física correspondiente a interrupciones de software.

Las entradas HW pueden ocurrir sin previo aviso en cualquier punto del código, a menos que el código haya ejecutado una instrucción CLI (deshabilitar interrupciones). Las entradas SW ocurren exactamente donde el codificador las puso en su programa.

Una GRAN diferencia que nadie menciona es que los ISR de hardware no deben alterar el estado de la CPU de ninguna manera sin haberlo guardado y restaurado. Por el contrario, hay muchos SWI (interrupciones de software) que devuelven su estado a través de carry o zero flags y / o datos en uno o más registros. Un SWI para el programador simplemente guarda cualquier vinculación de código para hacer llamadas os o bios a medida que el programador simplemente ejecuta digamos un int 10h con AH establecido en 0 para hacer un Modo Establecer Video. Aunque la ejecución del SWI guarda y restaura el código inteligente del registro FLAGS en la BIOS o el sistema operativo, es capaz de establecer / aferrar bits de bandera que se “guardan” en la pila.