每一台操作系统都用一个内核来维护时间,Linux也不例外。系统的内核时间由一个名为“jiffies”的变量来衡量。它的名字有着一段有趣的历史,由于技术上的原因,它只能用一个32位整数来表示。
管理内核时间的机制很复杂,Linux内核提供了一个称为jiffies的变量来完成这项工作。它是一个32位的整数,以毫秒为单位记录系统运行时间的长度。它的取值范围从0到4294967295(2的32次方 -1 ),也就是说一共能记录约49天的时间。
Linux内核把jiffies这个变量看作是“一秒钟”。这意味着内核使用它来记录当前系统已经经过了多长时间——也就是从启动系统开始,到当前正在运行的进程。内核把jiffies变量实现为系统计时,使用它们来决定运行上下文(run context)中当前进程所需运行的时间。
不少程序员一般会把一个jiffies变量实现为一个者“计数器”,用来衡量进程运行的时间。这样,只要jiffies的值高于初始值,就能够确定进程运行的时间。
如下的代码实现了一个计算过程运行时间的功能:
clock_t start = clock();
/* process */
clock_t end = clock();
double runtime = (double)(end – start) / CLOCKS_PER_SEC;
当然,程序员也可以使用内核提供的API来解锁Linux内核时间的实现,如“jiffies”变量或者“get_cycles()”系统调用函数。API使得我们可以从低水平的操作系统结构里找到内核的定时机制。
与之前提到的“clock()”函数相比,使用API可以获得更加精确的计时结果。因此,解锁Linux内核时间的秘密,不仅让程序员能够准确的计算进程的运行时间,还让我们更深入的了解Linux内核的定时机制。