¿Puede alguien explicarme qué sucede dentro de una rutina de interrupción del servicio (aunque depende de una rutina específica, una explicación general es suficiente)? Esto siempre fue una caja negra para mí.¿Qué sucede en una rutina de servicio de interrupción?
Respuesta
Hay una buena página de wikipedia en interrupt handlers.
"un manejador de interrupciones, también conocido como una rutina de servicio de interrupción (ISR), es una subrutina de devolución de llamada en un sistema operativo o controlador de dispositivo cuya ejecución se desencadena por la recepción de una interrupción. Interrumpir manipuladores tienen una multitud de funciones, que varían en función del motivo por el que se generó la interrupción y la velocidad a la que el Manejador de interrupciones completa su tarea ".
Básicamente, cuando una pieza de hardware (una interrupción de hardware) o alguna tarea de SO (interrupción de software) necesita ejecutarse desencadena una interrupción. Si estas interrupciones no están enmascaradas (ignoradas), el sistema operativo detendrá lo que está haciendo y llamará a un código especial para manejar este nuevo evento.
Un buen ejemplo es leer desde un disco duro. La unidad es lenta y no desea que su sistema operativo espere a que los datos vuelvan; quieres que el SO vaya y haga otras cosas. Entonces configura el sistema para que cuando el disco tenga los datos solicitados, genere una interrupción. En la rutina de servicio de interrupción para el disco, la CPU tomará los datos que ahora están listos y los devolverá al solicitante.
Los ISR a menudo tienen que suceder rápidamente ya que el hardware puede tener un buffer limitado, que será sobrescrito con nuevos datos si ahora se quita lo suficientemente rápido. También es importante completar su ISR rápidamente, ya que mientras la CPU esté dando servicio a un ISR, se enmascararán otras interrupciones, lo que significa que si la CPU no puede acceder a ellos con la suficiente rapidez, los datos pueden perderse.
La mejor manera de entender es hacer algunos ejemplos mínimos usted mismo.
Mínimo ejemplo de 16 bits
En primer lugar aprender a crear un sistema operativo mínimo gestor de arranque y ejecutarlo en QEMU y hardware real como he explicado aquí: https://stackoverflow.com/a/32483545/895245
Ahora se puede ejecutar en 16 bits en modo real:
movw $handler0, 0x00
mov %cs, 0x02
movw $handler1, 0x04
mov %cs, 0x06
int $0
int $1
hlt
handler0:
/* Do 0. */
iret
handler1:
/* Do 1. */
iret
Esto haría en orden:
Do 0.
Do 1.
hlt
: detener la ejecución de
Nota cómo el procesador busca el primer controlador en la dirección 0
, y la segunda a 4
: que es una tabla de manejadores de llamada IVT, y cada entrada tiene 4 bytes.
Minimal example that does some IO para hacer que los controladores estén visibles.
modo protegido
sistemas operativos modernos funcionan en el llamado modo protegido.
El manejo tiene más opciones en este modo, por lo que es más complejo, pero el espíritu es el mismo.
Véase también
pregunta relacionada: What does "int 0x80" mean in assembly code?
- 1. ¿Qué sucede con el manejador de interrupción adelantado?
- 2. ¿Qué sucede en la arquitectura x86 cuando ocurre una interrupción?
- 3. ¿Qué sucede cuando invocas la interrupción de un hilo()?
- 4. ¿Qué es una rutina de stubs?
- 5. ¿Qué sucede si se produce otra interrupción antes de que se complete la primera acción de interrupción?
- 6. ¿Qué sucede si un servicio se inicia varias veces?
- 7. ¿Qué sucede si detengo mi servicio de Windows mientras procesa una solicitud de WCF?
- 8. ¿Qué sucede en una eliminación doble?
- 9. ¿Qué sucede cuando una actividad de Android inicia otra actividad?
- 10. ¿Qué sucede si deseo implementar una consulta complicada en REST
- 11. Rutina de rebote simple
- 12. Problema de rutina SetConsoleCtrlHandler
- 13. En Python, ¿qué sucede cuando importas dentro de una función?
- 14. Devolver la llamada de rutina
- 15. ¿Qué es una "interrupción del control deslizante" en Android
- 16. ¿Cómo depurar un servicio de Windows utilizando puntos de interrupción?
- 17. ¿Qué sucede cuando actualizamos una página web?
- 18. ¿Qué sucede si configuro HttpGetEnabled = false
- 19. longitud de nombre de rutina en fortran90
- 20. Llamada de rutina de parche en delphi
- 21. ¿Qué sucede cuando cierra una aplicación de consola de C++?
- 22. ¿Qué sucede cuando compilo?
- 23. ¿Por qué duplican mis puntos de interrupción en Visual Studio?
- 24. Interrupción del software
- 25. ¿Qué sucede cuando un subproceso de .NET arroja una excepción?
- 26. ¿Qué sucede si matas una consulta alternativa de larga ejecución?
- 27. Android: ¿qué sucede cuando caduca una clave de firma?
- 28. ¿Qué sucede si saltas de una instrucción Lock()?
- 29. ¿Qué sucede si necesito una identificación de autoincrement muy grande?
- 30. ¿Qué sucede cuando reinicio una instancia de EC2?