gpt4 book ai didi

linux - 如何禁用浮点单元 (FPU)?

转载 作者:IT王子 更新时间:2023-10-29 01:17:37 25 4
gpt4 key购买 nike

我想在 x86 系统中禁用 FPU/MMX/SSE 指令,我将为 Device-Not-Available 异常实现一个处理程序。我提到了Control register wiki page ;看来我必须在 cr0 寄存器中设置一些标志。如何在 cr0 中设置这些标志并在启动时执行此工作?

最佳答案

用于管理 FPU 状态的 Linux 内核代码可以在 arch/x86/kernel/traps.c 中找到, do_device_not_available()。默认情况下,Linux 内核禁用所有进程的 FPU,并在首次访问时启用它。这允许内核减少不使用 FPU 的进程的上下文切换开销。但是,这也意味着在启动时设置一次 TS 是不够的;您必须更改管理 TS 标志的 Linux 内核代码以维持此状态。

通过向 do_device_not_available() 添加早期检查以查找禁用标志并发出信号或采取其他操作,您可以禁用对 FPU 的访问。请注意,如果您在进程首次在该特定 CPU 上使用 FPU 之后执行此操作,则 FPU 可能会保持可用一段时间,直到 FPU 寄存器被上下文切换,并且 FPU 被重新禁用。如果您希望避免这种情况,则必须使用 stts() 显式重新禁用 FPU。

请注意,由于 Linux ABI 假设您有一个 FPU(模拟 FPU 或硬件 FPU - 如果两者都没有,内核将无法启动),这可能会导致应用程序出现意外行为。此外,任何使用 FPU 的内部内核代码(不确定是否有)也可能会中断。实现此操作需要您自担风险。

关于linux - 如何禁用浮点单元 (FPU)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com