如何检测x86汇编中的内核数量?

Con*_*lan 10 x86 assembly operating-system

我正在为自己编写一个非常简单的操作系统作为学习工具.我目前的任务是尽可能多地检测硬件.

到目前为止,我已经能够使用CPUID指令找到有关CPU的大量信息.我似乎无法找到的一件事是数字或物理和/或逻辑核心.有没有办法使用x86汇编和C的组合?

我正在编写操作系统,因此代码可以在管理员模式下运行,并且没有系统库可以查询此信息.

ugh*_*fhw 13

要查找系统中的所有处理器,必须解析ACPI表或Intel的MP配置表.有关使用MP配置表查找和启动其他处理器的教程,请参阅将SMP引入UP操作系统.有关ACPI的更多信息,请访问http://www.acpi.info/spec.htm.您可能还想查看检测CPU拓扑,它可以告诉您哪些处理器和核心在系统中的哪个物理芯片上.

在您的操作系统上工作时,http://wiki.osdev.org将是您最好的朋友.它充满了有关操作系统开发的所有不同部分的信息,包括通用硬件和工具.

  • 你可以在[xnu/osfmk/i386/cpuid.c]中看到Mac OS X如何解决这个问题(http://opensource.apple.com/source/xnu/xnu-1504.9.37/osfmk/i386/cpuid.c )(搜索`core_count`)和[xnu/osfmk/i386/cpu_topology.c](http://opensource.apple.com/source/xnu/xnu-1504.9.37/osfmk/i386/cpu_topology.c). (3认同)