定时器与时间服务详解
1. 硬件定时器原理
定时器是一种硬件设备,由时钟源和可编程计数器组成。时钟源通常是晶体振荡器,它会产生周期性的电信号,以精确的频率驱动计数器。计数器被编程设置一个初始的倒计时值,每收到一个时钟信号,计数器的值就减 1。当计数器的值减到 0 时,它会向 CPU 发出一个定时器中断,然后将初始的计数值重新加载到计数器中,再次开始倒计时。计数器的一个完整周期被称为一个定时器滴答(timer tick),这是系统的基本计时单位。
2. PC 中的定时器
基于 Intel x86 的 PC 有多种定时器:
-实时时钟(RTC):由一个小的备用电池供电,即使 PC 关机也能持续运行。它用于记录实时时间,提供日期和时间信息。Linux 启动时,会使用 RTC 更新系统时间变量,该变量是一个长整型数,表示自 1970 年 1 月 1 日 00:00:00 以来经过的秒数。
-可编程间隔定时器(PIT):是一个独立于 CPU 的硬件定时器,可以被编程为以毫秒级的分辨率提供定时器滴答。在所有 I/O 设备中,PIT 以最高优先级 IRQ0 产生中断。Linux 内核的定时器中断处理程序会处理这些中断,为系统操作(如进程调度、进程间隔定时器等)提供基本的计时单位。
-多核 CPU 中的本地定时器:在多核 CPU 中,每个核心都是一个独立的处理器,都有自己由 CPU 时钟驱动的本地定时器。
-高分辨率定时器:大多数 PC 都有一个时间戳计数器(TSC),由系统时钟驱动。其