最近在阅读Linux内核的龙芯改进版时,发现内核中有模拟浮点运算的模块
,略作记录。
在arch/mips/math-emu/目录,内核用整数运算对浮点运算进行了模拟实现。这是为什么?
原来,很多嵌入式芯片是没有浮点运算的。这又是为什么?浮点运算的功耗和成本是很大的,对于嵌入式芯片,这有时值得通过牺牲效率节约成本。
但是,这些运算在内核中实现,普通应用程序如何使用?用户进程用到浮点运算时,首先编译成浮点运算指令,但是芯片没有这些指令,于是产生异常,异常的处理函数入口即为上述模块的入口(这是在内核初始化时设置的)。
于是,用户态转移到内核态进行模拟运算,将结果返回。但是,到这里,都注意到了一个问题:这个效率高吗?
的确,这个效率比较低,原因有二:
每进行一次浮点运算,需要产生一个异常,在用户态与内核态切换;
内核模拟浮点运算是通过整形实现的,而且,对不同指令逐个进行case比较,这个效率也是相对一般的指令很低的。
由于以上问题,据称,有的采用软模拟,即以库的形式进行链接。使用交叉编译,给定正确参数,正如数学库-lm这样编译,这样免去了上述的异常切换。本人未曾涉猎,不作过多猜测。
分享到:
相关推荐
22) Linux中的浮点运算由应用程序实现还是内核实现? 23) 模块程序能否使用可链接的库函数? 24) TLB中缓存的是什么内容? 25) Linux中有哪几种设备? 26) 字符设备驱动程序的关键数据结构是哪个? 27) 设备驱动程序...
linux kernel如何处理浮点运算,我们就分为带FPU的处理器和不带FPU的处理器来讨论。 (以下为个人知识总结,研究不深,错误之处希望大家指正,共同学习) 一 对于带FPU的处理器 1 对于linux kernel来说,kernel本身...
linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核...
鉴于此,《Linux内核精髓:精通Linux内核必会的75个绝技》选取了资源管理(CPU、内存、进程等)、文件系统、网络、虚拟化、省电、调试、概要分析、追踪、内核调整等Linux内核的核心主题进行了深入剖析和讲解,总结出...
通过分析CortexM3内核的结构与浮点型格式,充分利用CortexM3内核中的分支预测、单周期乘法、硬件除法等众多功能强大的特性,使用Thumb2指令集实现了单精度浮点型的加、减、乘、除与比较运算,并给出了加减法运算...
理解Linux内核最好预备的知识点:懂C语言懂一点操作系统的知识熟悉少量相关算法懂计算机体系结构Linux内核的特点:结合了unix操作系统的一些基础概念Linux内核的任务:1.从技术层面讲,内核是硬件与软
linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码...
深入理解Linux内核 + Linux内核设计与实现,绝对完整,我最近也在学,建议先学Linux内核设计与实现,对Linux内核有一个大体的认识,在看深入理解Linux内核,要舍得花时间。
linux内核设计说明,Linux内核设计与实现(第三版中文高清带目录)
linux内核源代码情景分析,对于深入学习者有很大帮助
ARM Linux内核源码剖析.pdfARM Linux内核源码剖析.pdfARM Linux内核源码剖析.pdfARM Linux内核源码剖析.pdf 完整书签
linux内核管理linux内核管理linux内核管理linux内核管理linux内核管理
linux内核图解linux内核图解linux内核图解linux内核图解linux内核图解
如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核....
Linux内核完全注释V3.0,很详细很不错,希望喜欢
linux内核解释 linux内核解释 详解
深入Linux内核.pdf
Linux内核的分析,通过本书学习可以了解到Linux的内核机制。
Linux内核设计的艺术 Linux内核设计的艺术 Linux内核设计的艺术
Linux内核编译与裁剪; Linux内核编译与裁剪; Linux内核编译与裁剪; 欢迎下载