¿Cómo puedo programar la interrupción del software en C? Sé que necesito escribir una rutina de mantenimiento de interrupción y luego interrumpir la CPU para que se pueda llamar a la rutina, pero no sé cómo hacerlo en C. Además, no sé cómo registrar esa rutina con el descriptor de interrupción mesa. Tengo una CPU x86-64 (AMD Turion64 X2) y estoy usando el compilador gcc. Cualquier ayuda sería apreciada.Interrupción del software
Respuesta
Use sigaction
. Ver man 2 sigaction
.
Para causar la interrupción, use raise
o kill
.
No creo que esto es exactamente lo que OP está preguntando sobre ... –
Esto no hace el trabajo, no hace una interrupción real. En caso de que no esté claro, se supone que debo interrumpir la CPU, no la aplicación. – protector
El sistema operativo oculta las interrupciones reales de las aplicaciones. Por lo que yo sé, no es posible a menos que esté corriendo en la capa kernel (anillo 0?)
El concepto de interrupciones no está incluido en la especificación C (y también es algo específico del procesador). La mayoría de los compiladores, incluido GCC, le permiten escribir código ensamblador en línea (o puede vincular un archivo escrito en ensamblaje a su programa). Pero el gran problema es que los sistemas operativos comunes (especialmente los que se ejecutan en modo de 64 bits) no le permitirán alterar la tabla de interrupción. Supongo que su mejor opción es buscar un sistema operativo de código abierto simple e instalar su controlador de interrupción de un programa normal (si el sistema operativo lo permite) o agregar su código al kernel. La razón por la cual no se puede simplemente ejecutar una pequeña porción de código en un simulador de procesador (o máquina virtual) es que el procesador necesita bastante configuración para entrar en el modo de 64 bits. Y los detalles exactos sobre cómo alterar la tabla de interrupción dependen de esa configuración.
escribir ISR no es una cuestión de lenguaje. sí puede hacerlo en C.
Es una cuestión de comprensión de su Kernel OS, sobre las rutinas que se llaman para registrar su ISR en una determinada línea de interrupción con GIC u otros controladores de interrupción y hacer una entrada en la tabla Descriptor de interrupción . Me gusta con Linux en ARM ... request_irq() para registrar un ISR con un controlador de IRQ y hacer una entrada en la tabla IRQ_DESC.
Por lo tanto, le sugerimos que compruebe primero el marco ISR de su sistema operativo respectivo.
- 1. Economía del desarrollo de software
- 2. Estándares de seguridad del software
- 3. ¿Cuál es la diferencia entre los puntos de interrupción de hardware y software?
- 4. Linq: ejecución de interrupción del procedimiento almacenado
- 5. Modificación del descriptor de interrupción Tabla
- 6. java.net.SocketException: El software provocó la interrupción de la conexión: error de escritura de socket
- 7. Establecer el punto de observación del hardware GDB/cómo configurar el punto de observación del software
- 8. ¿Cómo configuro un punto de interrupción de software en un procesador ARM?
- 9. Métricas de la calidad del software
- 10. ¿Cómo validar el diseño del software?
- 11. Alternativas de representación del software OpenGL
- 12. Software del lado del servidor para traducir idiomas?
- 13. interrupción() no funciona
- 14. Crítica de software: software de código abierto
- 15. Software de seguimiento de software en línea
- 16. cygwin + console2 interrupción del teclado ctrl-c no funciona
- 17. ¿Qué es una "interrupción del control deslizante" en Android
- 18. Punto de interrupción del usuario de ninguna parte
- 19. ¿Cómo puedo anular la interrupción del teclado? (Python)
- 20. Los puntos de interrupción del proyecto iOS Framework no funcionan
- 21. Capistrano gzip: stdin: interrupción inesperada al final del archivo
- 22. ¿Cómo disparar o simular la interrupción del teclado?
- 23. Manejo de señales en C - Interrupción de interrupción
- 24. MATLAB excepción tiro interrupción
- 25. Interruptor sin interrupción
- 26. jQuery - ¿Animación de interrupción?
- 27. Paralelo.Para la interrupción
- 28. clojurescript puntos de interrupción
- 29. 8051 interrupción externa
- 30. Java ExecutorService invokeAll() interrupción
Las cosas que te preguntas cómo hacer son cosas que haces cuando escribes un sistema operativo, no una aplicación. ¿Podría explicar un poco más sobre lo que está tratando de lograr? –
En realidad, estoy trabajando en una tarea para mi facultad, necesito examinar la instrucción IRET, es por eso que necesito una rutina de servicio de interrupción. Después de que lo haya escrito, se supone que debo "jugar" con el código hexadecimal del archivo ejecutable y modificar el IRET (eliminarlo o algo así) para ver qué sucede. – protector
No puede escribir ISR en C, requiere (algunos) ensamblaje. No puede probar los ISR en un sistema operativo en modo protegido. Alterar el IRET simplemente bloqueará el código. Habla con tu educador sobre esta tarea. –