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

<think>好的,我现在要回答用户关于中断号0x70的问题。首先,我需要确认自己对中断号的理解是否正确,特别是0x70这个特定的中断号。 我记得在计算机系统中,中断号是用来标识不同中断的编号,每个中断号对应特定的处理程序。中断可以分为硬件中断软件中断。硬件中断由外部设备触发,比如键盘、鼠标等,而软件中断则是由程序执行特定的指令(如INT指令)触发的。 接下来,关于中断号0x70,我有点模糊。可能需要查阅一些资料或者回忆相关的知识。首先,中断号的范围通常是从0x00到0xFF,共256个可能的中断向量。在实模式下,这些中断向量表位于内存的0x00000到0x003FF区域,每个中断向量占4个字节,指向对应的中断处理程序。 0x70这个中断号,看起来像是十六进制的数值,转换成十进制是112。这时候,我想到在早期的IBM PC架构中,中断号0x70可能与实时时钟(RTC)有关。因为在IRQ(中断请求)中,IRQ 8通常对应的是实时时钟的中断,而IRQ 8对应的中断号就是0x70。不过,这里可能存在一些转换关系,需要进一步确认。 在保护模式下,中断处理可能与实模式不同,但用户的问题可能更偏向于传统PC架构。因此,我需要确定IRQ中断号之间的关系。一般来说,IRQ 0到7对应中断号0x08到0x0F,而IRQ 8到15则对应中断号0x70到0x77。所以,IRQ 8对应的中断号确实是0x70,而这个IRQ通常由实时时钟(RTC)使用,用于周期性的中断,比如系统时钟的更新。 实时时钟中断可以用来唤醒系统,处理定时任务,或者在操作系统中维护系统时间。当RTC产生中断时,会触发中断处理程序,执行相应的操作,比如更新系统时间计数器,处理定时器事件等。此外,用户程序也可以通过设置RTC的中断频率来实现某些定时功能,但需要操作系统层面的支持。 不过,用户可能还关心如何在编程中使用中断0x70,或者相关的处理过程。比如,在实模式下的汇编语言编程中,通过INT 0x70指令来触发该中断,或者通过设置中断向量表来指向自定义的处理程序。但需要注意的是,直接操作硬件中断需要权限,通常在现代操作系统中,用户程序无法直接访问这些中断,必须通过驱动程序或者内核模块来处理。 另外,需要确认是否存在其他可能的用途。例如,某些旧系统或特定硬件可能将0x70用于其他目的,但根据常见的使用情况,大多数资料显示0x70对应RTC的中断。可能还需要提到APIC(高级可编程中断控制器)中的情况,但如果是基础问题,可能不需要深入到这个层面。 总结一下,中断号0x70对应的是IRQ 8,通常用于实时时钟的中断处理,负责系统时间的维护定时任务。在操作系统中,内核会注册相应的处理程序来处理这些中断,确保系统时间的准确性定时功能的正常运行。此外,用户程序若需要利用RTC中断,通常需要通过系统调用或驱动程序接口,而不是直接操作中断号0x70。 在解释时,需要注意术语的准确性,例如区分IRQ中断号的关系,说明实模式保护模式下的不同处理方式,以及现代操作系统中的情况。同时,要确保LaTeX格式的正确应用,例如在提到中断号时使用$0x70$,IRQ时使用IRQ $8$等。</think>中断号 $0x70$ 是计算机系统中与 **实时时钟(RTC)** 相关的中断向量,以下是详细说明: --- ### 1. **基本定义** - **中断号 $0x70$** 是十六进制表示的中断向量,对应十进制值为 **112**。 - 在传统 PC 架构中,它与 **IRQ(中断请求)$8$** 绑定,用于处理实时时钟(RTC)的硬件中断。 --- ### 2. **硬件背景** - **RTC(Real-Time Clock)** 是主板上的独立芯片,负责维持系统时间(即使计算机关机,通过电池供电)。 - 当 RTC 需要触发中断时(例如定时闹钟或周期性事件),会通过 IRQ $8$ 发送信号,最终映射到中断号 $0x70$。 --- ### 3. **功能与用途** - **系统时间维护**:操作系统通过该中断每秒更新时钟(例如 Linux 中的 `jiffies` 计数器)。 - **定时唤醒**:实现睡眠/唤醒功能或定时任务(如闹钟)。 - **周期性中断**:可配置频率(如 $1$ Hz、$1024$ Hz),用于时间片轮转调度或延迟操作。 --- ### 4. **编程与操作系统** - **中断处理程序**:操作系统内核需注册中断处理函数到 $0x70$,例如: ```c request_irq(8, rtc_interrupt_handler, IRQF_SHARED, "rtc", NULL); ``` - **用户权限**:直接操作 $0x70$ 需内核权限,用户程序通常通过系统调用(如 `setitimer()`)间接使用。 --- ### 5. **与其他中断的关系** - **IRQ 映射**:IRQ $0$–$7$ 对应中断号 $0x08$–$0x0F$,而 IRQ $8$–$15$ 映射到 $0x70$–$0x77$。 - **APIC 现代系统**:在高级系统中,中断可能由 APIC 管理,但 $0x70$ 仍保留为 RTC 的兼容性入口。 --- ### 6. **示例场景** 若 RTC 配置为每秒触发一次中断: 1. RTC 芯片发送 IRQ $8$。 2. CPU 调用中断号 $0x70$ 的处理程序。 3. 操作系统更新系统时间,检查定时任务。 --- ### 总结 中断号 $0x70$ 是 RTC 的软件接口,通过 IRQ $8$ 触发,核心作用是维护系统时间定时功能。现代操作系统抽象了其底层细节,但理解此机制对驱动开发或内核编程至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值