11

I am writing a very simple operating system as a learning tool for myself. My current task is detecting as much about the hardware as possible.

I have so far been able to find a lot of information about the CPU using the CPUID instruction. The one thing I can't seem to find is the number or physical and/or logical cores. Is there a way to do this using a combination of x86 assembly and C?

I am writing the operating system, so the code can be run in supervisor mode, and there are no system libraries to query for this information.

Conlan
  • 113
  • 2
  • 6

1 Answers1

14

In order to find all of the processors in a system, you must parse either the ACPI tables or Intel's MP configuration table. See Bringing SMP to your UP Operating System for a tutorial on using the MP configuration table to find and start other processors. Find more information on ACPI at http://www.acpi.info/spec.htm. You may also want to check out Detecting CPU Topology, which can tell you which processors and cores are on which physical chip within a system.

When working on your OS, http://wiki.osdev.org will be your best friend. It is full of information on all of the different parts of operating system development, including common hardware and tools.

ughoavgfhw
  • 39,734
  • 6
  • 101
  • 123
  • 3
    You can see how Mac OS X solves the problem in [xnu/osfmk/i386/cpuid.c](http://opensource.apple.com/source/xnu/xnu-1504.9.37/osfmk/i386/cpuid.c) (search for `core_count`) and [xnu/osfmk/i386/cpu_topology.c](http://opensource.apple.com/source/xnu/xnu-1504.9.37/osfmk/i386/cpu_topology.c). – Jeremy W. Sherman May 26 '11 at 23:24