美文网首页
17.linux 系统中的时间

17.linux 系统中的时间

作者: 辉神来了 | 来源:发表于2019-11-08 14:12 被阅读0次
    jiddies的引入
    • jiffies 是linux内核中的一个全局变量,这个变量用来记录以内核的节拍时间为单位时间长度的一个数值。
    • 内核配置的时候定义了一个节拍时间,实际上linux内核的调度系统工作时就是以这个节拍时间为时间片的。
    • jiffies变量开机时有一个基准值,然后每过一个节拍时间jiffies就会加1,然后到了任意一个时间我们当前时间就被jiffies这个变量所标注
    linux系统如何记录时间
    • 内核在开机启动的时候回读取RTC硬件获取一个时间作为初始基准,这个基准时间对应一个jiffies值(这个基准时间换算成jiffies值的方法是:用这个时间减去1970-01-01 00:00:00 +0000 (UTC)然后把这个时间段换算成jiffies数值),这个jiffies值作为我们开机时的基准jiffies值存在。然后系统运行时每个时钟节拍的末尾都会给jiffies这个全局变量加1,因此操作系统就使用jiffies这个全局变量记录了下来当前的时间。当我们需要当前时间点时,就用jiffies这个时间点去计算(计算方法就是先把这个jiffies值对应的时间段算出来,然后加上1970-01-01 00:00:00 +0000(UTC)即可得到这个时间点)
    • time系统调用返回当前时间以秒为单位的距离1970-01-01 00:00:00 +0000(UTC)过去的秒数。这个time内部就是用jiffies换算得到的秒数。其他函数基本都是围绕着time来工作的。
    • gmtime和localtime会把time得到的秒数变成一个struct tm结构体表示的时间。区别是gmtime得到的是国际时间,而localtime得到的是本地(指的是你运行localtime函数的程序所在的计算机所设置的时区对应的本地时间)时间。mktime用来完成相反方向的转换(struct tm到time_t)
    • 如果从struct tm出发想得到字符串格式的时间,可以用asctime或者strftime都可以。(如果从time_t出发想得到字符串格式的时间用ctime即可)
    • gettimeofday返回的时间是由struct timeval和struct timezone这两个结构体来共同表示的,其中timeval表示时间,而timezone表示时区。settimeofday是用来设置当前的时间和时区的。
    • 总结:不管用哪个系统调用,最终得到的时间本质上都是一个时间(这个时间最终都是从kernel中记录的jiffies中计算得来的),只不过不同的函数返回的时间的格式不同,精度不同。

    相关文章

      网友评论

          本文标题:17.linux 系统中的时间

          本文链接:https://www.haomeiwen.com/subject/lqgibctx.html