自从拜了达人先生为师之后,悟空感觉反而好多了,以前有什么问题还要变成猪八戒的样子去请教达人。现在好了有什么问题可以直接向达人请教了,而且达人还免费为他的徒弟开了嵌入式培训班,每周一都可以来培训班听课。
今天是悟空第一天来培训班,今天培训的是Linux内核的时间子系统。
达人:人们习惯的时间的表示方式是:年、月、日、时、分、秒。但是Linux内核没有采用这种方式表示时间。
悟空:老师,那么Linux内核为什么不采用这种方式表示时间呢?
达人:大家都知道虽然我们是用十进制表示数字,但是计算机却用二进制表示数字。计算机之所以采用二进制表示数字,是因为二进制更适合计算机。而时间的表示也是一样的,虽然我们用年、月、日,还有时、分、秒,来表示时间,但是这种表示方式不利于计算机的识别和计算。而且这种表示的方式粒度也太大了,1秒对于我们很短,但是对于计算机1s却很长,可以干很多事情,这或许就是相对论吧。
悟空:那么老师Linux内核用什么方式来表示时间呢?
达人:Linux内核采用表示时间的方式有四种:jiffies、struct timeval、struct timespec、struct ktime。
悟空:老师,为什么要提供这么多的表示时间的方式呢?干嘛不用一种表示呢?
达人:这四种表示分别用于不同的场合,jiffies是时间滴答数,相当于内核的脉搏,就像一个健康不健康,把把脉就知道了,同样一个系统稳定不稳定是由jiffies决定的。struct timeval由微妙和秒组成,而struct timespec由纳秒和秒组成,这两个结构体是为了兼容上层应用提供的表示时间的结构体。Linux内核内部表示时间的结构体是struct ktime,这个结构体在64位的系统中,用一个64位的数据表示时间,单位是纳秒,在32位的系统中则被拆分为两个字段:sec和nsec,也就是秒和纳秒。
悟空:老师,这么多表示时间的方式,那么这些时间直接如何转换呢?
达人:Linux内核为这些接口之间专门设计了转换函数,通过这些转换函数Linux的这些时间可以很容易转换。
铛…铛…铛…..
达人:唉怎么这么快下课的铃声就响了,我还没有开始讲啊…
画外音:
某猪:哎呀,下课啦~猴哥你怎么不叫醒我?
悟空:……
达人:……