时钟中断处理程序可以划分为两个部分:体系结构相关部分和体系结构无关部分。
与体系结构相关的例程作为系统定时器的中断处理程序而注册到内核中,以便在产生时钟中断时,它都能够相应地运行。这部分处理程序主要完成:
获得xtime_lock锁,以便对访问jiffies_64和墙上时间xtime进行保护
需要时应答或重新设置系统时钟
周期性地使用墙上时间更新实时时钟
调用体系结构无关的时钟例程:do_timer()
- 在<Time.h(incluce/linux)>中
- extern struct timespec xtime;
- #ifndef _STRUCT_TIMESPEC
- #define _STRUCT_TIMESPEC
- struct timespec {
- time_t tv_sec; /* seconds */
- long tv_nsec; /* nanoseconds 十亿分之一秒*/
- };
- #endif
中断服务程序主要通过调用与体系结构无关的例程do_timer()执行下面的工作:
给jiffies_64变量增加1
更新资源消耗的统计值,比如当前进程所消耗的系统时间和用户时间
执行已经到期的动态定时器
执行scheduler_tick()函数
更新墙上时间,该时间存放在xtime变量中
计算平均负载
- 在<Time.c(kernel)>中
- /*
- * Called by the timer interrupt. xtime_lock must already be taken
- * by the timer IRQ!
- */
- static inline void update_times(unsigned long ticks)
- {
- update_wall_time(); /* 更新墙上时间 */
- calc_load(ticks); /* 计算平均负载值*/
- }