首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多核CPU、不同类型的CPU和操作系统

多核CPU、不同类型的CPU和操作系统
EN

Stack Overflow用户
提问于 2016-07-15 20:11:32
回答 1查看 456关注 0票数 0

操作系统应该支持CPU架构,而不是特定的CPU,例如,如果某个公司有三种类型的CPU都基于x86架构,一种是单核处理器,另一种是双核处理器,最后一种是五核,操作系统不是基于CPU类型的,而是基于架构的,那么内核如何知道它运行的CPU是否支持多核处理,或者它有多少核。

还有例如定时器中断,英特尔的i386处理器家族的一些版本使用PIT,而其他版本使用APIC定时器,以生成周期性的定时中断,操作系统如何识别如果它想要例如配置它...(特别是关于定时器,我知道它们通常是由BIOS设置的,但定时中断的ISR处理程序也应该识别它正在运行的定时器机制,以便在处理某些中断时禁用/启用/修改它)

是否有CPU驱动程序与操作系统相关,而不是与BIOS相关?另外,如果有人能向我推荐一个地方,我可以获得更多关于多核处理是如何由内核在“代码”方面触发/实现的知识,那就太好了

EN

回答 1

Stack Overflow用户

发布于 2018-05-08 14:15:48

操作系统内核几乎总是有一个称为HAL的抽象层,它在内核的其余部分可以轻松使用的硬件之上提供了一个接口。这个HAL也是architecture-dependent,而不是model-dependent.。CPU架构必须定义一些调用方法,允许HAL知道哪些特性存在于正在执行的处理器中,哪些特性不存在。

在IA32/64体系结构上,是一条称为CPUID的指令。你可以在这里问另一个问题:

CPUID从一开始就存在吗?

不,CPUID在最早的CPU中并不存在。事实上,随着i386处理器的发展,它的出现要晚得多。根据英特尔手册卷2A,EFLAGS寄存器中的第21位表示支持CPUID指令。

代码语言:javascript
复制
PUSHFD

使用PUSHFD指令,您可以复制堆栈上的EFLAGS寄存器的内容,并检查是否设置了第21位。

如果CPUID只是一条指令,如何返回信息?

CPUID指令返回EAX、EBX、ECX和EDX寄存器中的处理器标识和功能信息。其输出取决于执行前输入EAX和ECX寄存器的值。

可以放入EAX寄存器的每个值(对CPUID有效)称为CPUID叶。有些叶子有副叶,.i.e。它们依赖于ECX寄存器中的子叶值。

如何在操作系统内核级检测到多核支持?

有一种称为ACPI (高级配置和电源接口)的标准,它定义了一组ACPI表。其中包括APIC或多个描述符表。此表包含有关本地APIC、I/O APIC、中断重定向等信息的条目。正如您应该知道的,每个本地APIC只与一个逻辑处理器相关联。

使用该表,内核可以获得系统中存在的每个本地APIC的APIC-ID (仅限于CPU正常工作的那些本地APIC)。APIC id本身被划分为拓扑id(逐位),其偏移量是使用CPUID获取的。这使得操作系统知道每个CPU的位置--它的域、芯片、核心和超线程id。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38395818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档