首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >浮点在Linux内核中的使用

浮点在Linux内核中的使用
EN

Stack Overflow用户
提问于 2012-12-15 05:15:00
回答 1查看 34.8K关注 0票数 91

我正在读Robert Love的"Linux Kernel Development",我偶然看到了下面这段话:

不(简单)使用浮点

当用户空间进程使用浮点指令时,内核管理从整数模式到浮点模式的转换。使用浮点指令时内核必须做的事情因体系结构而异,但内核通常会捕获陷阱,然后启动从整数模式到浮点模式的转换。

与用户空间不同,内核不具备对浮点的无缝支持,因为它不容易陷入自身的陷阱。在内核中使用浮点需要手动保存和恢复浮点寄存器,以及其他可能的琐事。简单的回答是:不要这样做!除了极少数情况外,内核中没有浮点运算。

我从来没有听说过这种“整型”和“浮点型”模式。它们到底是什么,为什么需要它们?这种区别是否存在于主流硬件体系结构(如x86)上,或者只存在于一些更奇特的环境中?从进程和内核的角度来看,从整数模式到浮点模式的转换到底需要什么?

EN

回答 1

Stack Overflow用户

发布于 2012-12-15 05:57:24

在某些内核设计中,当“内核”或“系统”任务切换出任务时,浮点寄存器不会被保存。(这是因为FP寄存器很大,要节省时间和空间。)因此,如果你尝试使用FP,那么这些值将会随机地“爆”出去。

此外,一些硬件浮点方案依赖内核通过陷阱来处理“奇怪”的情况(例如,零除),并且所需的陷阱机制可能处于比内核任务当前运行更高的“级别”。

由于这些原因(还有更多原因),当您第一次在任务中使用FP指令时,一些硬件FP方案会陷入陷阱。如果你被允许使用FP,那么在任务中会打开一个浮点标志,否则,你将被行刑队射杀。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13886338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档