2009-03-01 10 views
18

Tengo una idea de cómo las interrupciones son manejadas por una CPU de doble núcleo. Me preguntaba cómo se implementa el manejo de interrupciones en una placa con más de un procesador físico.¿Cómo se manejan las interrupciones en las máquinas con dos procesadores?

¿Alguna de las responsabilidades de interrupción está determinada por la configuración de la placa física? Cada procesador debe ser capaz de manejar algunos tipos de interrupciones, como E/S de disco. ¿A menos que haya algún circuito para gestionar y enviar interrupciones al procesador apropiado? Supongo que el esquema debe ser el procesador neutral, de modo que cualquier procesador y núcleo pueda ejecutar el manejador de interrupciones.

Si un núcleo está esperando una lectura de disco, ¿será ese núcleo el que ejecutará el manejador de interrupciones cuando el disco esté listo?

+1

Ahora veo que un núcleo nunca espera en una lectura, un hilo de espera. Sin embargo, cuando finalice la lectura, parece que sería mejor ejecutar el hilo recién despertado en el mismo procesador que antes debido a la posibilidad de que los datos aún se almacenen en caché en ese procesador. – jeffD

Respuesta

8

en sistemas x86 cada CPU tiene su propio APIC local (Advanced Programmable Interrupt Controller), que también están conectados entre sí y a un APIC I/O que se encarga de dispositivo de encaminamiento interrumpe para los APIC locales.

El sistema operativo puede programar los APIC para determinar qué interrupciones se enrutan a qué CPU (o dejar que los APIC tomen esa decisión).

Imagino que una CPU multi-core tendría un APIC local para cada núcleo, pero honestamente no estoy seguro de eso.

Consulte estos enlaces para más detalles:

0

yo diría que dependería del fabricante de hardware ...

Sin embargo this link me hace creer más probablemente están manejados por el procesador principal y/o el primer núcleo.

Another link

3

Lo que le interesa es la afinidad del procesador SMP. Here es un excelente artículo sobre cómo se maneja en Linux. El Advanced Programmable Interrupt Controller (APIC) es la forma de gestionar esto en un sistema moderno. Básicamente, el valor predeterminado sería ir al procesador 0 a menos que tuviese un SO que utilizara esta interfaz para configurarlo correctamente. Además, no necesariamente quiere que el núcleo que emitió un comando espere una interrupción en particular. Desea que los núcleos menos cargados lo reciban.

+0

Gracias, el enlace en SMP en Linux fue interesante. Es bueno saber que es posible modificar los servidores de esta manera. – jeffD

Cuestiones relacionadas