Pregunta

Estoy teniendo algunos problemas reales para encontrar esta información en línea, estoy en la universidad el lunes para poder usar la biblioteca, pero cuanto pronto mejor. Cuando un sistema tiene procesadores multinúcleo, ¿cada procesador toma un hilo del primer proceso en la cola lista o se toma uno del primero y uno del segundo? También solo para verificar, los hilos serán enviados y obtenidos de los multicores al mismo tiempo por el sistema operativo. Si alguien pudiera señalarme en la dirección correcta en cuanto al recurso, ¡sería genial!

¿Fue útil?

Solución

La clave es apreciar cuál es realmente la arquitectura de la máquina.

Un "núcleo" es una CPU con caché con una conexión con la memoria del sistema. La mayoría de las arquitecturas de las máquinas son multiprocesamiento simétrico, lo que significa que la memoria del sistema es igualmente accesible por todos los núcleos del sistema.

La mayoría de los sistemas operativos ejecutan un hilo de programador en cada núcleo (Linux lo hace). El planificador tiene una lista de hilos de los que es responsable, y los ejecutará lo mejor que pueda en el núcleo que controla. Las reglas que utiliza para elegir qué hilo ejecutar será Round Robin o Basado en prioridad, etc. es decir, todas las reglas de programación normales. Hasta ahora es como un programador que encontraría en una computadora de un solo núcleo. Hasta cierto punto, cada programador es independiente de todos los demás programadores.

Sin embargo, este es un entorno SMP, lo que significa que realmente no importa qué núcleo ejecute qué hilo. Esto se debe a que todos los núcleos pueden ver toda la memoria, y todos los códigos y datos para todos los subprocesos en todo el sistema se almacenan en esa memoria única.

Entonces, los programadores hablan entre ellos para ayudarse mutuamente. Los programadores con demasiados hilos para ejecutar pueden pasar un hilo a un programador cuyo núcleo se usa. Están equilibrando la carga dentro de la máquina. "Pase un hilo sobre" significa copiar la estructura de datos que describe el hilo (ID de subproceso, qué datos, qué código).

Así que eso es todo. Como la única comunicación entre núcleos es a través de la memoria, todo se basa en un sistema de semáforo de exclusión mutua efectivo disponible, que es algo que el hardware tiene que permitir.

La dificultad

Así que he pintado una imagen muy simple, pero en la práctica la memoria no es perfectamente simétrica. SMP en estos días se sintetiza sobre HyperTransport y QPI.

Atrás quedaron los días en que los núcleos realmente tenían el mismo acceso a la memoria del sistema a nivel electrónico. En la capa más baja de su arquitectura, los amd son puramente numa, e Intel casi.

Hoy en día, un núcleo tiene que enviar una solicitud a otros núcleos sobre un enlace en serie de alta velocidad (HyperTransport o QPI) pidiéndoles que envíen datos que tienen en su memoria adjunta. Intel y AMD han hecho un buen trabajo al hacer que se vea convincentemente como SMP en el caso general, pero no es perfecto. Los datos en la memoria conectados a un núcleo diferente tardan más en obtener. Es increíblemente complejo: los núcleos ahora son nodos en una red, pero es lo que han tenido que hacer para obtener un mejor rendimiento.

Entonces, los programadores tienen eso en cuenta al elegir qué núcleo debe ejecutar qué hilo. Intentarán colocar un hilo en un núcleo más cercano a la memoria que contiene los datos a los que el hilo tiene acceso.

El futuro, otra vez

Si el ecosistema de software del mundo pudiera destetarse de SMP, los tipos de hardware podrían ahorrar mucho espacio en el silicio, y tendríamos sistemas más rápidos más eficientes. Esto se ha hecho antes; Las transputers fueron un buen intento de una arquitectura estrictamente NUMA.

NUMA y la comunicación de procesos secuenciales hoy harían mucho más fácil escribir un software múltiple que se escala muy fácilmente y se ejecuta de manera más eficiente que los gigantes de memoria compartidos SMP de hoy.

SMP fue en efecto una forma barata y desagradable de reunir múltiples núcleos, y el costo en términos de dificultades de desarrollo de software y hardware ineficiente ha sido muy alto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top