gpt4 book ai didi

linux - Linux内核中浮点的使用

转载 作者:IT老高 更新时间:2023-10-28 12:26:30 32 4
gpt4 key购买 nike

我正在阅读 Robert Love 的“Linux Kernel Development”,我偶然发现了以下段落:

No (Easy) Use of Floating Point

When a user-space process uses floating-point instructions, the kernel manages the transition from integer to floating point mode. What the kernel has to do when using floating-point instructions varies by architecture, but the kernel normally catches a trap and then initiates the transition from integer to floating point mode.

Unlike user-space, the kernel does not have the luxury of seamless support for floating point because it cannot easily trap itself. Using a floating point inside the kernel requires manually saving and restoring the floating point registers, among other possible chores. The short answer is: Don’t do it! Except in the rare cases, no floating-point operations are in the kernel.

我从未听说过这些“整数”和“浮点”模式。它们到底是什么,为什么需要它们?这种区别是否存在于主流硬件架构(例如 x86)上,还是特定于一些更奇特的环境?从进程和内核的角度来看,从整数模式到浮点模式的转换究竟需要什么?

最佳答案

因为……

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

...操作系统内核可能会简单地关闭 FPU。 Presto,无需保存和恢复状态,因此可以更快地进行上下文切换。 (这就是 mode 的意思,它只是表示启用了 FPU。)

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

在上下文切换时,它知道实际执行状态保存逻辑。 (然后它可能会再次关闭 FPU。)

顺便说一句,我认为这本书对内核(而不仅仅是 Linux)避免 FPU 操作的原因的解释......并不完全准确。1

内核可以陷入自身并在很多事情上这样做。 (定时器、页面错误、设备中断等。)真正的原因是内核并不特别需要 FPU 操作,并且还需要在根本没有 FPU 的架构上运行。因此,它只是避免了管理自己的 FPU 上下文所需的复杂性和运行时间,因为它不执行总是有其他软件解决方案的操作。

有趣的是,如果内核想要使用 FP ,则必须多久保存一次 FPU 状态。 . . 每个系统调用、每个中断、每个内核线程之间的切换。即使偶尔需要内核 FP,2 在软件中执行它可能会更快。


<支持>1.也就是说, 错了。
2. 我知道内核软件包含浮点算术实现的几个案例。 一些架构在硬件中实现了传统的 FPU 操作,但将一些复杂的 IEEE FP 操作留给了软件。 (想想: 非正规算术。)当一些奇怪的 IEEE 极端情况发生时,它们会陷入软件,该软件包含可以陷阱的操作的迂腐正确仿真。

关于linux - Linux内核中浮点的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886338/

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