⑴ linux 内核 | 内核的时间函数
在Linux内核中,获取系统时间的功能在最新的内核版本(例如Linux kernel 5.10.20)中已经发生了改变。原有的使用struct timeval和对应的函数void do_gettimeofday(struct timeval *tv)来获取时间的方式已经不再适用。因此,需要采用新的API来获取当前的系统时间。
最新的获取系统时间的API主要基于结构体struct timespec64,该结构体定义在include/linux/time64.h文件中。其中,包含了一个64位的时间戳和一个32位的纳秒偏移量,提供了更高的时间精度和更大的时间范围。
具体来说,内核提供了以下四个API来获取系统时间:
以上四个API提供了不同的时间概念,满足了各种不同场景的需求。例如,在测量内核中函数执行时间时,可以使用ktime_get_boottime_ts64()函数获取自系统启动以来的时间,然后再次调用该函数获取当前时间,通过计算两次时间的差值,就可以得到函数执行所需的时间。
获取系统时间的API在内核源码中的实现位于kernel/time/timekeeping.c文件中,具体的函数定义和实现细节可以在这里找到。此外,学习Linux内核源码分析可以参考ke.qq.com/course/403254...的地址,提供了一些相关的资源和文档。
为了方便学习和交流,推荐加入Linux内核源码分析交流群(加入群聊的地址:点击1095678385加入)。在群中可以分享和交流个人觉得比较好的学习资料和书籍,这些资源可以帮助学习者更深入地理解Linux内核的原理和实现。