我想知道为什么 BIOS 是单线程的,即使我们有 4 核/8 核。最新的 UEFI 技术允许使用 GUI 实用程序。不实施多线程 BIOS 是否有任何具体原因。
3 回答
简单的答案是:收益递减
在大多数 PC 上,BIOS/UEFI 的启动顺序只需要大约 5 秒即可工作(不包括 HDD 启动延迟)。对于大多数人来说,这已经足够快了。(如果你想要更快,让你的电脑进入睡眠状态而不是关闭它。)
请记住,在 BIOS 中完成的许多任务无法并行化。必须首先初始化内存控制器。必须先枚举 PCI/PCIe 总线,然后才能检查任何后续设备(USB、SATA、视频等)。在磁盘启动之前,您无法启动。
有一些初始化项目很耗时,可以并行完成。
- IDE/SATA - 由于机械磁盘延迟,通常需要一段时间。
- USB - 某些 USB 设备在通电后需要 100 毫秒的时间才能启动。
- 视频(任何其他第三方 BIOS 扩展)- 与显示器通信和同步需要一段时间。
这些任务可以并行完成,这可能会加快 PC 的启动时间。请记住,要到达那里,您需要编写内核和任务调度程序。在旧版 BIOS(纯 x86 汇编程序)中,这并不漂亮。在 UEFI(主要是 C 源代码)中,这更可行。但是,它仍然需要不平凡的工程工作才能获得少量收益(可能需要 1-2 秒的启动时间。)
Phoenix 之前曾尝试引入多线程 BIOS 初始化。据我所知,它从未起飞。
因为没有必要。BIOS 不会进行繁重的计算。它进行一些协调,然后(永远)退出。
UEFI没有描述任何多处理功能。但是,PI规范(也由 UEFI 论坛制作)提供,并且EDK2提供EFI_MP_SERVICES_PROTOCOL
(目前仅适用于 IA32/X64)。
它不完全是 pthreads,但它确实让您可以安排任务在应用处理器上运行,同时引导处理器继续提供单线程 UEFI 实例。
DXE 阶段的接口在 v1.5 PI 规范的第 3 卷MP 服务协议(13.4) 部分中进行了描述。
第 2 卷EFI MP 服务 PPI (8.3.9)描述了 PEI 期间可用的功能。