谈Linux内核定时器
看了3个周末的Linux内核,包括前两周总结的进程与线程,锁与同步.当时研究这个的原因是某个程序CPU context switch过高.不过到现在相关的背景知识也了解了,问题也早已经解决了,暂时也没有进一步的兴趣驱动去研究内核了,这里是终结篇.:) 在应用程序运行的时候,特别是抢占式的操作系统里面,内核怎么样取得控制权?这依赖硬件支持的系统定时器来实现.内核中有非常多的功能由定时器触发.系统定时器以固定的频率触发,这个频率称为tick rate(HZ),每个触发周期的时间叫做tick, 它等于1/HZ秒.触发后系统会转到内核相应的handler去处理. 在系统定时器中断时候内核需要做以下事情
了解了tick rate之后才能比较好理解为什么sleep(), timer等API声称都不是提供精确的时间,cpu一个任务timeslice没运行完,系统是不会马上切换到这些dynamic timer的进程的. Linux 2.5以上将tick从100改成1000,相当于系统时钟从10ms变成每1ms要中断一次,当时也引起较大的争议. 改成1000的优点有:
缺点:
Linux 2.6.21 又增加了一种叫dyntick的技术,dyntick就是在系统空闲的时候,彻底停止时间中断, 避免cpu空转,它会带来节能方面的好处.详情可参看Clockevents and dyntick.这是个新的技术,一般的书上都没来得及写进去. 比较感兴趣的后续课题是virtualization系统中的timer实现.
|
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |