⑴ 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內核的原理和實現。