关闭

悟空学Linux专栏----第13篇

标签: linux32位二叉树嵌入式内核
181人阅读 评论(0) 收藏 举报
分类:

  下课之后悟空百思不得其解,为什么达人老师要敲他四下,这四下代表了什么含义呢?悟空想了很久也没有想明白,这时只听到外面的打更的人连敲四下。悟空这才恍然大悟,以前菩提老祖敲三下意味着三更给他开小灶,达人敲四下是不是叫我四更去找他啊?想到这悟空立马向达人家飞奔而去。

  悟空体力比较好,不一会儿就到了,悟空看见达人家里的灯还开着。这让悟空感觉自己的猜想是对的,老师果然在等他。悟空按住心里的喜悦,连敲了几下们。

  达人(心想这么晚,谁跑来打扰啊)曰:谁啊?

  悟空曰:老师,我是悟空。

  达人曰:这么晚找我有事吗?

  悟空曰:老师,你在我头上连敲四下,不就是叫我晚上四更来找你吗?

  达人心想我什么时候叫你四更来找我,我那是被你给气的。但是达人却觉得这样说会打消悟空学习的积极性,所以达人想想还是默认了悟空的理解,心想或许这也菩提老祖当年的心声吧。

  悟空曰:老师,白天我还有一个地方不理解,那就是如何将read函数的返回值cycle转换为时间t。

  达人曰:t= cycle / F,其中F就是时钟频率。

  悟空曰:可是struct clocksource结构体中没有“F”啊?

  达人曰:虽然计算时间的原理是上面那个公式,但是由于上面那个公式的运算需要使用浮点运算。而Linux内核中是尽量避免使用浮点运算的。

  悟空曰:Linux内核为什么要避免使用浮点运算呢?

  达人曰:浮点的编码跟整数编码是不一样的,计算时需要专门的寄存器和浮点计算单元来处理,一个浮点运算指令使用的CPU周期也更长,效率比较低、因此对于内核来说就会想尽量回避浮点数运算。而且在有些嵌入式设备上,并没有浮点运算单元,如果要实现需要通过软件模拟的方式实现,这样会大大的降低CPU的效率。

  悟空曰:那么Linux内核又是怎么实现时间计算函数的呢?

  达人曰:Linux内核采用了一种比较巧妙的方法,从而避免了这个问题,为了实现浮点运算,Linux内核引入了两个事先计算好的辅助的常数,mlt和shift,并保证这三个常数之间满足F=(1《shift)/mult关系。所以“t= cycle / F”的公式就巧妙的转化为了“t=(cycle * mult)》shift”公式。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7340次
    • 积分:545
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档