Linux 时钟_定时器
1 时钟
时钟这个东西,实际上是作为一种工具而存在,内核通过时钟来感知、管理时间。这里的时钟,更主要的还是软件上的概念,系统通过维护软件时钟来追踪时间
1.1 几个概念
1、时钟中断:由硬件产生的电信号,一切的缘起,哈哈。该中断产生时,内核通过特殊的中
断处理程序进行处理
2、节拍率(tick rate):系统以某种频率(可编程)自行触发(hitting、popping)时钟中断
(即系统定时器的频率)
3、节拍(tick):由于节拍率已知,系统当然也知道两次时钟中断之间所间隔的时间,这个
时间就是时钟节拍
1.2 再说节拍率:HZ
节拍率,即系统定时器的频率,在内核中通过HZ这个宏进行定义。在进行内核编程的时候,切记不要假设HZ不会发生变化,事实上,大多数体系结构的HZ都是可调的
HZ的理想取值:从2.5内核开始,这个取值在i386体系结构中就改为了1000(2.6.13版本后的内核,加入了250这个取值)。改变HZ的取值,对于操作系统而言,意味着改变时钟中断的频率:
增大HZ:提高时钟中断的频率,这带来的好处是,提高了时间驱动事件的解析度与精确度?内核定时器具有更高的频度与精确度(依赖内核定时器的系统调用也有了更精确的执行度,比如select、epoll等,这会带来很大的性能提升),时间相关的测量会更准确,内核抢占更准确,进程调度的响应更及时。当然也会有负面影响:更高的中断频率,必然会导致系统消耗更多的资源来处理时钟中断(当然,就目前的主机来说,1000还是一个不错的取值)
2.6的内核允许在编译的时候,选择不同的HZ取值
用户空间的USER_HZ,是根据内核的HZ进行了相应的转换
最后顺便说一下,OS也是可以采取无节拍的实现的,但系统的开销会非常大。可上网搜索这方面的资料
1.3 Jiffies