2011-05-26 13 views
8

Estoy escribiendo un sistema operativo muy simple como una herramienta de aprendizaje para mí. Mi tarea actual es detectar tanto sobre el hardware como sea posible.¿Cómo puedo detectar la cantidad de núcleos en el ensamblaje x86?

Hasta ahora he podido encontrar mucha información sobre la CPU usando la instrucción CPUID. La única cosa que no puedo encontrar es el número de núcleos físicos y/o lógicos. ¿Hay alguna manera de hacerlo utilizando una combinación de ensamblado x86 y C?

Estoy escribiendo el sistema operativo, por lo que el código se puede ejecutar en modo supervisor y no hay bibliotecas del sistema para consultar esta información.

Respuesta

11

Para encontrar todos los procesadores en un sistema, debe analizar las tablas ACPI o la tabla de configuración de MP de Intel. Consulte Bringing SMP to your UP Operating System para obtener un tutorial sobre el uso de la tabla de configuración MP para buscar e iniciar otros procesadores. Encuentre más información sobre ACPI en http://www.acpi.info/spec.htm. También puede consultar Detecting CPU Topology, que le puede decir qué procesadores y núcleos están en qué chip físico dentro de un sistema.

Al trabajar en su sistema operativo, http://wiki.osdev.org será su mejor amigo. Está lleno de información sobre todas las diferentes partes del desarrollo del sistema operativo, incluido hardware y herramientas comunes.

+0

Niza último enlace. ¡Gracias! –

+3

Puede ver cómo Mac OS X resuelve el problema en [xnu/osfmk/i386/cpuid.c] (http://opensource.apple.com/source/xnu/xnu-1504.9.37/osfmk/i386/cpuid. c) (busque 'core_count') y [xnu/osfmk/i386/cpu_topology.c] (http://opensource.apple.com/source/xnu/xnu-1504.9.37/osfmk/i386/cpu_topology.c) . –

+0

¡Excelente! Gracias. – Conlan

Cuestiones relacionadas