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/6146059/

相关文章:

assembly - MUL/DIV 指令与 MOV & SHL/SHR (Pentium Pro)

algorithm - 计算(非抢占式)FCFS 队列中的等待时间和周转时间

linux - 操作系统内核是所有其他程序的解释器吗?

memory - 堆栈帧是如何以及何时构建的?

我可以将 Intel 语法的 x86 程序集与 GCC 一起使用吗?

assembly - 输入三个数字到LMC中并从大到小输出?

c - 来自 C 程序的汇编代码

assembly - 我们如何在汇编代码 (MIPS) 中取消引用指针?

c - 如何使用 getpwuid_r() 正确设置缓冲区和 bufsize?

c++ - 具有可变长度写入的多生产者多消费者无锁非阻塞环形缓冲区