linux时钟中断处理流程:
timer_event_interrupt
timer_interrupt(IA-32)--
do_timer
update_process_time
定时器处理:
run_local_timers
时间系统调用:
用户态:adjtimex
sys_alarm sys_settimer 都最终调用do_settimer
gettimeofday settimeofday
sleep nanosleep
time 返回字1970年1.1 零时经过的秒数 stime 设置这个值。
内核调用 :do_gettimeofday
TICK 中断:__run_timers 处理基于jiffies的时钟
墙上时间:
linux 使用xtime 表示, 开机时从rtc读取,启动后在tick里面更新。
时钟类型:
8253 PIT TSC(Time Stamp Counter),HPET(High Precision Event Timer),ACPI PM Timer(ACPI Power
Management Timer),CPU Local APIC Timer
时钟源设备(clock-source device):单调递增
时钟事件设备(clock-event device):单次 (one_shot)或单调递增
时间编程:
gettimeofday 返回自1970年之后的时间。 rtc_time_to_tm 将epoch 时间转换成识别的时间 。
疑问:
rtc 时钟 与jiffies区别
墙上时间 (系统启动并运行了多少时间)
动态定时器
scheduler_tick
posix 定时器
TSC
tic_period
时钟时间设备睡眠
参考资料:
http://www.ibm.com/developerworks/cn/linux/l-cn-timerm/