No hay otra respuesta que no sea "depende".
En primer lugar, ¿cuál es el equivalente en hardware del sondeo? Es el reloj, la lógica generalmente se evalúa en cada ciclo de reloj, por lo que la línea de interrupción será examinada por la lógica en cada ciclo. Eso no quiere decir que la señal de interrupción sea generada por el ciclo de un ciclo y se evalúe en el ciclo siguiente. "Depende" del diseño, puede ser unos pocos o muchos o docenas de ciclos.
Como usted sabe que está en el software, primero el procesador debe esperar para finalizar la instrucción actual o cancelar la instrucción actual, luego tiene que buscar la tabla vectorial, tal vez haya una tabla mmu que tenga que leer en Para encontrar eso, tal vez no. Tal vez tuvo que pasar del modo de usuario a supervisor en el camino, depende de su código y diseño. También estás limpiando el tubo, encontrando el isr, recogiendo esos, llenando el tubo. Entonces, el software necesita guardar el estado, por lo que está presionando registros y banderas en la pila, esto podría llevar una eternidad, con las capas de memoria que pueda tener, o esperar estados en la velocidad del ariete, etc.
Luego, dependiendo del diseño de su sistema, es posible que tenga que vagar por los periféricos o al menos preguntar al controlador de interrupciones que causó la interrupción. Luego ve al periférico y pregúntale por qué. Eventualmente descubriendo eso y ahora
Puedes reparar la interrupción.
Entonces es posible que tenga que volver a activar la interrupción, o eliminarla en el periférico y tal vez en otros lugares intermedios. Luego restaure el estado de la máquina, leyendo desde el ram que puede o no estar guardado en la memoria caché o puede estar en una memoria lenta, puede estar vagando por un mmu nuevamente.
Y finalmente regresar de la interrupción.
Sondeo, ahora el sondeo no es necesariamente cada unidad fija de tiempo, es donde quiera que esté en el código que elija para sondear, es posible que tenga cada otra línea de verificación de código, que tenga una vez a través de su verificación de bucle principal, y el tiempo a través del bucle principal puede variar según lo que esté haciendo en ese bucle y las tangentes que pueda tomar.
Pero para comparar, o superar el rendimiento de la interrupción, uno podría crear un ejemplo que no haga más que sondear en un circuito cerrado, sondeando el estado de los periféricos directamente, si en una memoria caché el código se busca en la memoria caché rápidamente, dependiendo del diseño del core, y lo que ha habilitado puede tener la predicción de bifurcación activada y, dado que no es un bucle condicional, siempre debe predecir correctamente y ahorrar unos cuantos ciclos al vaciar la tubería para pasar nuevamente por el bucle. cuando vea el cambio de estado, salga del bucle y comience a darle servicio de inmediato. es posible que aún tenga el hit mmu, el caché y otros, pero no necesita guardar el estado de la máquina, no necesita hablar con un controlador de interrupción ni preguntar al periférico qué sucedió, ya sabe, básicamente se bifurca directamente en el
mantener el evento.
y luego puedes volver a tu bucle principal.
Por lo tanto, es bastante sencillo elaborar un experimento donde el sondeo supera las interrupciones por un amplio margen. Así como donde las interrupciones superan el sondeo. Como se mencionó, podría tener un gran bucle principal, pero sondear un periférico en particular cada otra línea o algo, aunque el despilfarro obtenga un buen tiempo de respuesta. Probablemente sea mejor usar una interrupción.
se trata de hacer la ingeniería de su sistema, entender y cronometrar las peores rutas de ejecución de casos. muchos sistemas en tiempo real se han realizado solo con sondeo y sin interrupciones. Asimismo, se ha creado un sistema que es estrictamente interrumpido.