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

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

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

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

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

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

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

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

  悟空曰:老师,白天我还有一个地方不理解,那就是如何将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”公式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值