Esta es una pregunta amplia, por lo que la respuesta realmente depende de qué sistema operativo y qué CPU se estén utilizando.
Trataré de responder esto desde el PoV de Linux, y tomando solo x86 y ARM, por ejemplo, como se puede hacer referencia a la fuente.
En los sistemas basados en x86, hay varias formas de conocer la cantidad de núcleos lógicos, entre los cuales Linux generalmente intentará lo que está codificado allí en la tabla ACPI [1], algunos sistemas más antiguos usan MP [2]. Algunos sistemas están utilizando SFI (Simple Firmware Interface), sinceramente, no conozco ningún ejemplo real de esto.
- ¿Debo hacer una licenciatura en ingeniería informática mientras mi interés era la mecatrónica y la robótica?
- ¿Cuál es la diferencia entre informática, ingeniería informática e ingeniería eléctrica?
- ¿La mayoría de los desarrolladores en algún momento de sus carreras rompen mal las cosas?
- ¿Dónde está la ciencia en informática?
- ¿Hay buenos cursos de aprendizaje automático en las escuelas de ingeniería indias?
Fuente de referencia aquí [3].
Algún otro sistema basado en x86 incorporado puede usar el árbol de dispositivos.
En los sistemas basados en ARM, es mucho peor, casi todo está codificado. Hay un enlace smp_prepare_cpus () que todo ARM SoC tiene que implementar.
Nota: el número de núcleos lógicos no es la historia completa, la imagen completa incluiría cuántas CPU, la topología, los núcleos lógicos y su diseño dentro de cada CPU, cómo se enrutan las interrupciones a los núcleos individuales: arquitectura de coherencia de caché entre los núcleos, etc.
[1] Configuración avanzada e interfaz de energía
[2] Especificación de multiprocesador
[3] Referencia cruzada de Linux