2011-05-26 46 views
8

我正在爲自己寫一個非常簡單的操作系統作爲學習工具。我目前的任務是儘可能多地檢測硬件。如何檢測x86彙編中的內核數量?

到目前爲止,我已經能夠使用CPUID指令找到許多關於CPU的信息。我似乎無法找到的一件事是數量或物理和/或邏輯內核。有沒有辦法使用x86程序集和C的組合來做到這一點?

我正在編寫操作系統,因此代碼可以以超級用戶模式運行,並且沒有系統庫可以查詢此信息。

回答

11

爲了找到系統中的所有處理器,您必須解析ACPI表或英特爾MP配置表。有關使用MP配置表查找和啓動其他處理器的教程,請參見Bringing SMP to your UP Operating System。有關ACPI的更多信息,請致電http://www.acpi.info/spec.htm。您可能還想查看Detecting CPU Topology,它可以告訴您哪些處理器和內核位於系統內的哪個物理芯片上。

在您的操作系統上工作時,http://wiki.osdev.org將成爲您最好的朋友。它充滿了操作系統開發所有不同部分的信息,包括常見的硬件和工具。

+0

尼斯的最後一個環節。謝謝! – 2011-05-26 23:17:39

+3

您可以在[xnu/osfmk/i386/cpuid.c](http://opensource.apple.com/source/xnu/xnu-1504.9.37/osfmk/i386/cpuid)中看到Mac OS X如何解決該問題。 c)(搜索'core_count')和[xnu/osfmk/i386/cpu_topology.c](http://opensource.apple.com/source/xnu/xnu-1504.9.37/osfmk/i386/cpu_topology.c) 。 – 2011-05-26 23:24:53

+0

非常好!謝謝。 – Conlan 2011-05-27 03:18:06