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

| 我想在x86系统中禁用FPU / MMX / SSE指令,并且将为Device-Not-Available异常实现一个处理程序。我已经提到了控制寄存器维基页面;看来我必须在cr0寄存器中设置一些标志。如何在cr0中设置这些标志,并在启动时完成这项工作?     
已邀请:
用于管理FPU状态的Linux内核代码可在arch / x86 / kernel / traps.c中找到,
do_device_not_available()
。默认情况下,Linux内核为所有进程禁用FPU,并在首次访问时启用它。这使内核可以减少不使用FPU的进程的上下文切换开销。但是,这也意味着启动时一次设置TS是不够的。您必须更改管理TS标志的Linux内核代码以维持此状态。 通过在check0上添加一个禁用标志的早期检查并发出信号或采取其他措施,可以禁用对FPU的访问。请注意,如果您是在该进程在该特定CPU上首次使用FPU之后执行此操作,则FPU可能会保持可用一段时间,直到FPU寄存器被上下文切换出并且FPU重新禁用的。如果希望避免这种情况,则必须使用
stts()
显式重新禁用FPU。 请注意,由于Linux ABI假定您具有FPU(模拟FPU或硬件FPU-如果您都没有内核无法启动),则这可能会导致应用程序出现意外行为。此外,使用FPU的任何内部内核代码(不确定是否存在)也可能会中断。实施此过程需要您自担风险。     

要回复问题请先登录注册