Sondeo vs Interrupción: ¿cuál es el primero en una pieza de hardware de huesos descubiertos?

3

En primer lugar, debo decir que tengo formación en informática y no tengo muchos conocimientos sobre hardware. Me gustaría hacer esta pregunta porque en el software, lo que a menudo veo es un bucle, por ejemplo: bucle while, para ... bucle ...

En mi opinión, el sondeo es como verificar que ocurra un evento cada una cierta cantidad de tiempo (¿podría requerir el uso del reloj?)

Interrumpir es como si no nos importara si se "enrolla" o no, cuando se produzca el evento, se "señalizará" ...

¿Qué pasa con el hardware? ¿Qué es realmente equivalente a un "bucle while" o "bucle for" en el hardware? Supongo que es una mezcla de sondeo e interrupciones ... pero me pregunto cuál es realmente el primero. ¿No es así que cuando comprobamos algo, debemos encuestarlo primero? (tal vez estoy un poco sesgado en las encuestas aquí).

    
pregunta hdn

3 respuestas

2

Algo que debe saber es que las interrupciones requieren un hardware especial para funcionar, y funcionan en una capa 'externa', lo que puede manejar únicamente con un lenguaje de programación como C. Normalmente, diferentes compiladores y diferentes chips exponen los controles de interrupción de diferentes maneras. Algunos tienen nombres de funciones mágicas, o macros de preprocesadores mágicos, que le indican al compilador que utilice las instrucciones especiales y los diseños de memoria necesarios para gestionar las interrupciones.

En el caso de sondeo, el software que se ejecuta tiene algunos bucles, verifica algún valor y luego se bifurca cuando se alcanza el estado de interés. Esta es la programación normal con la que estás familiarizado.

Con una interrupción, el chip tiene hardware para detener la ejecución del software y saltar a una ubicación especial para el controlador de interrupciones. El manejador de interrupciones a menudo necesita guardar el estado del software detenido, para que después de que el manejador haga su trabajo, pueda regresar al software y continuar donde lo dejó.

Ninguno de los métodos es "primero", y si bien el estilo de programación de interrupción puede hacer que algunas aplicaciones sean considerablemente más rápidas, prácticamente cualquier aplicación puede escribirse para usar cualquiera de los dos métodos. Las diferentes aplicaciones se adaptan mejor a una u otra.

    
respondido por el whatsisname
4

El sondeo en hardware es bastante similar a un bucle en software. Muchos dispositivos simples utilizan este método. Es posible que tenga un termostato en la pared que simplemente da vueltas y vueltas miles de veces por segundo y le hace la misma pregunta: "¿Hace suficiente frío para encender el calentador?"

Y una interrupción de hardware se conecta directamente con una interrupción de software. Normalmente, cuando empleamos un esquema de interrupción de hardware, activa directamente una rutina de manejo de interrupciones de software en el software del controlador.

Las interrupciones son más apropiadas para cosas con duraciones impredecibles. La temperatura de su habitación es bastante lenta, por lo que no importa si pregunta AHORA o en 10 segundos si hace suficiente frío para encender el calentador. Pero si está sintiendo algo transitorio, como un animal que pasa a través de un haz óptico o un humano presionando un botón, puede estar aquí y desaparecer antes de comenzar a sondearlo nuevamente. Por esa razón, usamos el pestillo de hardware y una interrupción para notificar al controlador que algo sucedió, tal vez mientras estaba haciendo otra cosa o incluso durmiendo.

    
respondido por el Richard Crowley
1

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.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas