Linux的时钟及时钟中断
扫描二维码
随时随地手机看文章
一般来说,计算机系统应有两个时钟:实时时钟(RTC)和操作系统(OS)时钟。由于实时时钟是由硬件电路构成的,并由电池供电,因此即使系统断电,它也可正常工作。这个实时时钟就相当于一个机械钟摆,在机械计时系统中,摆要是出了问题,则后果不可想象。因此,实时时钟是整个计算机系统的计时基准,它为系统提供了最底层的时间服务。
操作系统时钟是操作系统软件维护的时钟系统,操作系统通过读取实时时钟来初始化系 统时钟,此后二者一直保持同步,共同维持着系统的时间。这里的同步,是指操作系统在运行 过程中,每隔一个固定的时间就会刷新或校正实时时钟中的信息。
为了使处理器感知实时时钟的节拍,硬件时钟电路每隔一段时间就需要向处理器发出一次中断请求。处理器在这个中断处理程序中通常要完成如下工作:
●将中断计数器加1。
●更新系统时钟的时间和日期。
●查询当前进程的运行时间是否已超过了分配给它的时间片。如果当前进程已用满或超过了它应有的时间片,则进行进程切换。
●更新所有资源的使用统计计数。
●检查软仵定时器是否定时时间已到。如果时间已到,则调用适当的函数。
由于上述第一项是最紧迫的工作,因此它应放在中断的前半部分来处理,而其他几项工作则可酌情放在中断的后半部分来处理。
Linux在内核初始化时调用函数tlrne_1nlt()对时钟中断进行相关的初始化工作。一旦硬件定时器使用的中断通道IRQ0初始化完毕,即会定时向处理器发出中断申请,处理器响应该申请后,即会调用时钟中断处理程序tlmer_mterrup()。