定时器和时间管理
一、计时体系的目的—内核中有大量的函数都是基于时间驱动的:
内核会周期性执行:
- 更新系统运行时间(自系统启动以来所经过的时间)
- 更新墙上时间(实际时间)
- 确定当前进程占用CPU的时间
- 更新资源使用数
- 检查每个软定时器是否超时
二、体系结构提供了两种设备进行计时:
1)实时时钟(RTC):用来持久存放(即使系统关闭,也可靠主板上的电池保持系统的计时)系统时间的设备。系统启动时,内核通过读取RTC来初始化墙上时间。
2)系统定时器:X86体系中,时钟中断源主要采用可编程中断时钟(PIT)、本地APIC、时间戳计数器(Time Stamp Counter)、电源管理定时器(ACPI PMT)、高精度时间定时器(HPET)
- PIT:一种可编程硬件设备,以固定频率(节拍率)自行触发定时器中断。系统启动时,内核对其进行编程初始化,设定其节拍率。通过节拍(节拍率的倒数),内核就可以知道两次时钟中断的间隔。
三、定时器:
流程:执行初始化,设定超时时间,指定超时发生后执行的函数,激活定时器。
指定的函数在超时后自动执行,定时器则自行撤销。
分类:linux提供两种定时器:动态定时器和间隔定时器。动态定时器由内核使用,间隔定时器由进程在用户态创建。