歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux和Windows中的時間管理

Linux和Windows中的時間管理

日期:2017/2/28 15:58:11   编辑:Linux教程

首先是兩個常用概念:Cycle和Tick。Cycle是由CPU主頻決定的,而CPU主頻是由CPU的物理特性決定的,因此它可以說是平台無關的。現在的主流CPU主頻都是以G為單位了,所以1個cycle的單位一般在納秒級別。Tick泛指一段時長(一般為兩次timer interrupt間的時長,毫秒級),由操作系統指定(Linux中由Kernel決定,Windows 中由硬件抽象層HAL決定)。

Windows中,還有一個概念叫qunatum,它是線程調度的時間單位。它可分為若干個(如Vista中為2,Windows Server中為12個)Clock intervals(ticks)。Clock interval即兩次timer interrupt間的時間間隔。一個clock interval一般為若干個毫秒(如x86單核體系中為10,x86和x64多核體系中為15),該值以100納秒為單位存並放在KeMaximumIncrement這個內核變量中。quantums以1/3個tick為單位存放,因此1個tick就等於3個quantum單位。這樣,Vista中一個quantum就有6個單位。注意.Net中DateTime::Ticks中的tick表示100納秒,用於記錄日期,和前面提到的tick不是一個概念。

Vista之前的系統以clock interval timer來作為quantum的計時。Vista(含Vista)之後,都是轉化為clock cycle為計數。這之間的換算關系系統在啟動時就算好並放在內核變量KiCyclesPerClockQuantum中。

Linux中有兩種計時機制-Low resolution和High-resolution計時。由timer interrupt來記錄的為low-resolution計時方式。timer interrupt的時長由開機時確定的體系相關值HZ(范圍在12 - 1535 ticks/second之間,默認值50 - 1200 ticks/second,在如VirtualBox此類虛擬機裡跑就更低些)確定。HZ就是一秒內的tick數。Linux特有概念jiffies就是最近一次開機後的ticks數,jiffies在每次timer interrupt時更新。High-resolution計時方式則是直接用clock cycles計數。具體方法是用x86體系中的rdtsc讀取模型相關寄存器(MSR)。既然是模型相關了,那就意味著這種方式以移植性換取了精確性。

可見,Linux中的Low resolution和High-resolution計時機制的思想分別類似於Windows Vista之前和之後的計時方式。前者用clock tick計時,後者用clock cycle計時。

Copyright © Linux教程網 All Rights Reserved