加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:03:22 所属栏目:Linux 来源:网络整理
导读:我想在x86系统中禁用FPU / MMX / SSE指令,我将为Device-Not-Available异常实现一个处理程序.我提到了 Control register wiki page;看来我必须在cr0寄存器中设置一些标志.如何在cr0中设置这些标志并在启动时执行此操作? 解决方法 用于管理FPU状态的Linux内核
我想在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的内部内核代码(不确定是否有)都可能会破坏.实施此风险需要您自担风险.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读