linux 时间 time(2)-频率(时钟周期/指令周期/CPU周期)和 jiffies
1. 频率
单位时间内完成振动或振荡的次数或周数
常用单位是赫兹。1赫兹等于1次/秒或1周/秒
频率单位有:
Hz(赫)、kHz(千赫)、MHz(兆赫)、GHz(吉赫)。
其中1GHz=1000MHz,1MHz=1000kHz,1kHz=1000Hz
[root@localhost hello]# cat /proc/cpuinfo //虚拟机 pc台式机的频率
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 94
model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
1.1 LINUX系统时钟频率
LINUX系统时钟频率是一个常数HZ来决定的,如:通常f=3.40GHz,那么他的精度度就是0.29ns(纳秒)。
1GHz周期是1ns。
也就是说每0.29ns一次中断。所以一般来说Linux的精确度是1ns之内。
1.2 时钟周期
时钟周期也称为振荡周期,定义为时钟频率的倒数。
时钟周期是计算机中最基本的、最小的时间单位。
在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。
1GHz周期是1ns。
周期单位:
s(秒)、ms(毫秒)、μs(微秒)、ns(纳秒),
其中:1s=1000ms,1 ms=1000μs,1μs=1000ns。
一个指令周期,包含多个 CPU 周期,而一个 CPU 周期包含多个时钟周期。
1.3 指令周期
指令周期(Instruction Cycle):取出并执行一条指令的时间。
计算机执行指令的过程可以分为以下三个步骤:
1.Fetch(取指)也就是从 PC 寄存器里找到对应的指令地址
2.Decode(译码)根据指令寄存器里面的指令,解析成要进行什么样的操作
3.Execute(执行指令)进行算术逻辑操作、数据传输或者直接的地址跳转
对于一个指令周期来说,我们取出一条指令,然后执行它,至少需要两个 CPU 周期。取出指令至少需要一个 CPU 周期,执行至少也需要一个 CPU 周期,复杂的指令则需要更多的 CPU 周期。而一个CPU周期是若干时钟周期之和。
一个指令周期,包含多个 CPU 周期,而一个 CPU 周期包含多个时钟周期。
1.4 CPU周期
CPU周期亦称机器周期,在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。
通常用内存中读取一个指令字的最短时间来规定CPU周期。
如:对于一个指令周期来说,我们取出一条指令,然后执行它,至少需要两个 CPU 周期。
1.5 总结
周期之间的关系:
所以,我们说一个指令周期,包含多个 CPU 周期,而一个 CPU 周期包含多个时钟周期。
参考:CPU中的指令周期、CPU周期和时钟周期
https://zhuanlan.zhihu.com/p/90829922
1.6 台式机CPU 3.4GHz含义
1. 频率:单位时间内完成振动或振荡的次数或周数
1赫兹等于1次/秒或1周/秒
2. 时钟周期也称为振荡周期,定义为时钟频率的倒数。
比如:LINUX系统时钟频率是一个常数HZ来决定的,通常HZ=100,一秒振动100次。
那么他的精度度就是10ms(毫秒)。
也就是说每10ms一次中断。所以一般来说Linux的精确度是10毫秒
2GHz是0.5ns。
3. 1GHz等于十亿赫兹(1,000,000,000 Hz)
1GHz表示处理器时钟运行频率为1000兆赫兹,时钟周期是其到数,1ns(纳秒)
4. 我的台式机,我的电脑里面看到CPU频率是 3.4GHz,时钟周期就是0.29ns
2. jiffies - 电脑开机到现在总共的时钟中断次数
是记录着从电脑开机到现在总共的时钟中断次数
每发生一次中断,Jiffies变数会被加一
2.1 jiffies初始化
jiffies的初始值并不是0,而是300s后即将溢出的的值。这是为了存在溢出问题的情况下,尽早暴露问题。
2.2 32/64位jiffies
32位jiffies变量会在50天后溢出
64位jiffies变量会在497天或1.38年天后溢出
当时钟中断发生时,jiffies 值就加1。因此连续累加一年又四个多月后就会溢出
(假定HZ=100,1个jiffies等于1/100秒,jiffies可记录的最大秒数为 (2^32 -1)/100=42949672.95秒,约合497天或1.38年),
即当取值到达最大值时继续加1,就变为了0。
参考
https://www.cnblogs.com/wanghuaijun/p/7531151.html
https://www.cnblogs.com/arnoldlu/p/7234443.html