¿Por qué deshabilitar la interrupción requiere mucho tiempo en una computadora con varios procesadores?

0

Tengo una declaración de libro:

  

La desactivación de la interrupción requiere mucho tiempo en el sistema multiprocesador.

Sospecho que esto está relacionado con la implementación de hardware de cómo se habilita / deshabilita la interrupción. Entonces, ¿cuál es el mecanismo detrás de esto?

    
pregunta ptr_user7813604

1 respuesta

1

[Nota: Leí su pregunta demasiado rápido cuando comencé a responder, y no noté que especificó "sistema multiprocesador". Me voy en la primera parte, que también es relevante para los sistemas de un solo procesador, en caso de que sea interesante. :-)]

Los procesadores modernos están 'pipelined', lo que significa que tienen más de una instrucción ejecutándose al mismo tiempo. Deshabilitar las interrupciones es un cambio en la forma en que el procesador maneja las instrucciones, por lo que no puede ocurrir mientras se ejecutan las instrucciones. Por lo tanto, la tubería debe ser "lavada", completando todas las instrucciones en vuelo, antes de que el procesador pueda apagar las interrupciones. Cuanto más profundo es el gasoducto, más tiempo lleva; las tuberías modernas son muy profundas (hasta 25 etapas según enlace .)

Hay una discusión interesante aquí que vale la pena leer, aunque tiene aproximadamente 15 años: enlace .

Según enlace , se deshabilitan las interrupciones en todas las CPU en un sistema multiprocesador Normalmente ya no se realiza en Linux (porque ralentiza todo el sistema). Pero hay una buena discusión allí de los pasos involucrados. En particular, requiere esperar a que se completen las interrupciones existentes (y algún código relacionado) en otras CPU antes de que pueda continuar. No se discute directamente allí (aunque se menciona en el enlace anterior), pero creo que esto también implica hacer una "interrupción entre procesadores" a cada otra CPU, lo que en sí es un proceso lento, que requiere que el procesador solicitante se detenga mientras espera para que cada otro procesador detenga lo que está haciendo y responda a la solicitud.

Como puede ver, los detalles de una operación como esta pueden ser muy complejos bajo las coberturas. La mejor manera absoluta de determinar algo como esto: cuánto tarda una operación en particular, o en general cómo es el comportamiento real del sistema, es probarlo en sistemas reales, si quiere estar seguro.

    
respondido por el Glenn Willen

Lea otras preguntas en las etiquetas