一 :linux内核有两种主要的定时测量
1 :保存当前的时间和日期,以便能通过time(), ftime(),和gettimeofday()系统调用把他们返回给 用 户程序。
2 : 维持定时器,通知内核或用户程序某一时间间隔已经过去。
二 :硬时钟
实时时钟和时间戳计数器,可编程间隔定时器以及cpu本地定时器。
三 :单处理器系统上的计时体系结构
time_init()函数建立IRQ 0对应的中断们,IRQ0 指向time_interrupt()函数。执行步骤如下
1 :如果cpu有tsc寄存器,计算中断延时,供time(),ftime(),gettimeofday()调用
2: 调用do_timer_interrupt(),他执行下例顺序,调用do_timer()函数,如果发生在内核太,就调用x86_do_profile()函数,如果adjtimex()系统调用被调用用来调整TIMER-BH下半部分。这里遇到了中断处理程序的下半部分,最紧迫的活动由中断处理程序的“上半部分”执行。
四 :计时体系结构的初始化
setup_APIC_clocks()中有setup_APIC_timer轮流产生节拍间隔的本地时钟中断。 初始化是调用time_init()设置时间和日期。
五 :更新时间和日期
time.tms_cutime和time_cstime在父进程查询其中的一个子进程状态是才更新。
六 : 记录系统负载
calc_load()函数收集系统负载数据被update_tie()调用,以TIMER_BH下半部分进行的。
监管内核代码
profile x86_do_profile函数代码监管器采集数据
七 :检查非屏蔽中断监视器
调用do-nmi(),看门狗程序,用来杀死进程释放cpu资源
八 软定时器
动态定时器和间隔定时器,用来用来检测硬件设备。
动态定时器用来被动态的创建和撤销。动态定时器存在timer_list结构中。从定时器结构中删除定时器是一个良好的习惯做法。动态定时器与竞争条件,在释放资源前停止定时器。del_timer_sync()就解决多处理器中删除定时器而释放资源的方法。
总之,定时器主要是用来设置内核运行的时间和用来调度程序的基准时间的。
阅读(1229) | 评论(0) | 转发(0) |