您的位置:首页 > 运维架构 > Linux

linux 定时器和时间管理 自学笔记

2012-03-20 21:18 260 查看
系统定时器是一种可编程硬件芯片,它能以固定频率产生中断。该中断就是所谓的定时器中断。该频率可以通过编程预定,称为节拍率(tickrate).

全局变量jiffies用来记录自系统启动以来产生的节拍的总数,总是无符号长整数(unsignedlong),在32位体系结构上是32位,在64位体系就是64位。用volatile表示。

内核可以使用宏jiffies_to_clock_t()将一个由HZ表示的节拍计数转换成一个由USER_HZ表示的节拍数。

实时时钟(RTC)是用来持久存放系统时间的设备,即使系统关闭后,它也可以靠主板上的微型电池提供的电力保持系统的计时。

进程的内核或者用户时间是根据时钟中断发生时,处在用户或内核态而决定的。不太准确。

定时器,由结构time_list表示。内核可以保证不会再超时时间到期前运行定时器的处理程序,但是有可能延误定时器的执行。 mod_timer()会激活这个定时器,如果调用时定时器未被激活,该函数返回0,否则返回1。del_timer()可以用在被激活或未被激活的定时 器都可以使用这个函数,如果没有激活,函数返回0,否则返回1。不需要对已经超时的定时器调用该函数。在多处理器上,可以用 del_timer_sync.

内核将定时器按它们的超时时间划分为5组,分块处理策略。当定时器超时时间接近时,定时器将随组一起下移。

udelay,mdelay 都是忙循环将任务延迟到指定的微秒后运行。用loops_per_jiffy,可以从文件/proc/cpuinfo 中读到它 。减少使用它们,因为比较占用资源。

set_current_state(TASK_INTERRUPTIBLE or TASK_UNINTERRUPTIBLE) 和schedule_timeout(s*HZ),让任务延迟s秒工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: