assembly - 如何检测 x86 组件中的核心数量?

标签 assembly operating-system x86

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

到目前为止,我已经能够使用CPUID指令找到很多有关CPU的信息。我似乎找不到的一件事是物理和/或逻辑核心的数量。有没有办法结合使用 x86 汇编和 C 来做到这一点?

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

最佳答案

为了查找系统中的所有处理器,您必须解析 ACPI 表或 Intel 的 MP 配置表。请参阅Bringing SMP to your UP Operating System有关使用 MP 配置表查找并启动其他处理器的教程。有关 ACPI 的更多信息,请访问 http://www.acpi.info/spec.htm 。您可能还想查看Detecting CPU Topology ,它可以告诉您系统中的哪个物理芯片上有哪些处理器和内核。

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

关于assembly - 如何检测 x86 组件中的核心数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55793337/

相关文章:

c - 从 c 链接并调用汇编函数

c++ - C++ 中的顺序保留 memcpy

java - System.getProperty ("os.name")返回...(3个点)windows 8 java 7

c - 使用信号处理程序从函数返回

assembly - LSD 能否从检测到的循环的下一次迭代中发出 uOP?

c++ - Cygwin:使用asm标签编译cpp文件

c - 在 Win32 上使用 GCC 向程序集符号添加前导下划线?

汇编语言: counter loop

assembly - 逆向工程与反编译

linux - sgslufread : Hard error on read, 操作系统错误 = 104 Linux