如何在Linux内核中使用浮点?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (106)

我正在阅读罗伯特·洛夫的“Linux内核开发”,并且我遇到了以下的一段话:

没有(简单)使用浮点 当用户空间进程使用浮点指令时,内核管理从整数到浮点模式的转换。内核在使用浮点指令时要做的事情因体系结构而异,但内核通常会捕获陷阱,然后启动从整数到浮点模式的转换。 与用户空间不同的是,内核并没有对浮点的无缝支持,因为它不能轻易陷入自身。在内核中使用浮点需要手动保存和恢复浮点寄存器以及其他可能的杂项。简短的回答是:不要这样做!除少数情况外,内核中没有浮点运算。

从流程和内核的角度来看,从整数模式到浮点模式的转换到底是什么?

提问于
用户回答回答于

因为...

  • 许多程序不使用浮点或不在任何给定的时间片上使用它;
  • 保存FPU寄存器和其他FPU状态需要时间; 因此

... OS内核可以简单地关闭FPU。Presto,没有状态来保存和恢复,因此更快的上下文切换。(这是什么模式意味着,它只是意味着FPU已启用。)

如果程序尝试FPU操作,程序将陷入内核,内核将打开FPU,恢复任何已经存在的已保存状态,然后返回重新执行FPU操作。

用户回答回答于

由于这些原因(以及更多),当你在任务中第一次使用FP指令时,某些硬件FP方案会陷入困境。

扫码关注云+社区

领取腾讯云代金券