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

La única diferencia es cómo se activan. Una interrupción de hardware se desencadena por el hardware (normalmente algún periférico externo 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, de forma muy parecida a 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 cualquier acción necesaria, y luego devolver el control al punto donde se produjo la interrupción. A menudo, el objetivo de la rutina de interrupción es hacer el mínimo trabajo necesario para devolver el control al programa anterior, aplazando las acciones más complejas para que sean manejadas más tarde durante el tiempo de inactividad de la CPU. Esto se conoce como una "llamada de procedimiento diferida", o DPC, y evita que las interrupciones de hardware degraden el rendimiento general del sistema de forma impredecible al priorizar siempre esas interrupciones sobre otros trabajos.

En los primeros días del PC, una variedad de control del sistema de bajo nivel era proporcionada por la BIOS a través de interrupciones de software. Por ejemplo, la salida de vídeo simple era proporcionada por una serie de funciones en int 10h, y los discos podían ser leídos, escritos o formateados a nivel de sector utilizando int 13h. Del mismo modo, MS-DOS proporcionaba servicios de sistema operativo de nivel superior, como la apertura, creación, lectura y escritura de archivos en int 21H. En cierto modo, estas fueron las primeras APIs residentes en memoria, antes de la llegada de APIs más complejas del sistema operativo utilizando DLLs 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 no son llamadas explícitamente por el programa en ejecución. Algunos ejemplos son los fallos de página causados por el acceso a la memoria que ha sido intercambiada a un almacenamiento externo, o las violaciones de acceso causadas por tocar la memoria que el programa no tiene permitido. En estos casos, el control es redirigido a una rutina del sistema operativo que maneja la situación, como el cierre del programa con gracia en el caso de la violación de acceso, o la carga de una página necesaria desde el almacenamiento externo y volver al punto de un fallo de página como si nada hubiera sucedido.