HW Cycles
1) Clock Cycle
时钟周期, 即晶体振荡器周期, 是计算机的最小时间单位. CPU的主频的倒数, 即为该CPU时钟周期的长度. 例如1GHz主频的CPU, 其时钟周期为1/1G = 0.000000001s = 1ns (纳秒), 时钟周期也称为T周期, CPU所处的状态被称为T状态.
2) Bus Cycle
总线周期, 指CPU访问总线设备(存储器, IO端口)所消耗的时间. 通常一个总线周期包括多个时钟周期(一般是4个)
3) Machine Cycle/Processor Cycle/Instruction Cycle
机器周期, 又称处理器周期, 指令周期, 指CPU执行一条指令所消耗的时间, 通常分为三部分: Fetch instruction(包含一个Bus cycle), decode instruction, execute instruction
SW Cycles
4) Timer interrupt cycle/clock tick cycle
定时器中断周期, 即定时器两次向CPU发起的时钟中断信号的时长, 定时器中断周期是OS调度任务的基本时间单位,时长一般是毫秒级, 比如Linux, 一般配置为10ms (频率为100Hz). 对于一个1GHz主频的CPU来说, 如果配置定时器频率为100Hz, 则每一次定时器中断周期可包含10ms / 1ns = 10,000,000个时钟周期, 假设一条指令执行需要10个时钟周期, 那么对于该系统来说每个时钟中断周期可以执行1,000,000条指令.
5) Jiffies
Linux中用来记录自系统启动以来, 发生的时钟中断(时钟滴答)次数, 因为1s钟增加的时钟滴答数为100(Hz), 因此可以计算出系统自启动以来的运行时间为jiffies / 100 (s)
jiffies为32位unsigned int, 在HZ = 100的情况下, jiffies最大可以表示计算器live的时间是497天, 因此jiffies存在着溢出的可能性. 在Linux中, 使用宏来解决这个溢出:
#define time_after(a,b) \
(typecheck(unsigned long, a) && \
typecheck(unsigned long, b) && \
((long)(b) - (long)(a) < 0))