Как определить количество ядер в сборке x86?

Я пишу очень простую операционную систему как инструмент обучения для себя. Моя текущая задача как можно скорее обнаруживает аппаратное обеспечение.

Я до сих пор мог найти много информации о процессоре, используя инструкцию CPUID. Единственное, что я не могу найти, это число или физические и/или логические ядра. Есть ли способ сделать это, используя комбинацию x86 и C?

Я пишу операционную систему, поэтому код можно запускать в режиме супервизора, и для этой информации нет системных библиотек.

Ответ 1

Чтобы найти все процессоры в системе, вы должны проанализировать таблицы ACPI или таблицу конфигурации Intel MP. См. Приведение SMP в вашу операционную систему UP для руководства по использованию таблицы конфигурации MP для поиска и запуска других процессоров. Дополнительную информацию об ACPI можно найти на http://www.acpi.info/spec.htm. Вы также можете проверить Обнаружение топологии CPU, которая может рассказать вам, какие процессоры и ядра находятся на физическом чипе внутри системы.

При работе на вашей ОС http://wiki.osdev.org станет вашим лучшим другом. Он содержит информацию обо всех частях разработки операционной системы, включая общее оборудование и инструменты.