网站建设与网页设计可行性分析报告,梅县区住房和城乡规划建设局网站,什么网站设计素材多,阿里企业邮箱登陆入口目录
一、内核中的时间概念
二、节拍率#xff1a;HZ
实时时钟
系统定时器
三、定时器 系统定时器是一种可编程硬件芯片#xff0c;能以固定频率产生定时器中断#xff0c;它所对应的中断处理程序负责更新系统时间#xff0c;也负责执行需要周期性运行的任务。
一、内…目录
一、内核中的时间概念
二、节拍率HZ
实时时钟
系统定时器
三、定时器 系统定时器是一种可编程硬件芯片能以固定频率产生定时器中断它所对应的中断处理程序负责更新系统时间也负责执行需要周期性运行的任务。
一、内核中的时间概念
系统定时器以某种频率自行触发定时器中断该频率可以通过编程预定称作节拍率tick rate。当定时器中断发生时内核就通过一种特殊的中断处理程序对其进行处理。两次定时器中断发生的间隔时间就称为节拍tick它的大小等于节拍率分之一1 / (tick rate)秒。
下面给出一些利用定时器中断周期执行的工作
更新系统运行时间。更新实际时间。在 smp 系统上均衡调度程序中各处理器上的运行队列。如果运行队列负载不均衡的话尽量使它们均衡。检查当前进程是否用尽了自己的时间片。如果用尽则重新进行调度。更新资源消耗和处理器时间的统计值。
二、节拍率HZ
系统定时器频率节拍率是通过静态预处理定义的也就是 HZ赫兹在系统启动时按照 HZ 值对硬件进行设置。内核在 asm/param.h 中定义了这个值。 实时时钟
实时时钟RTC是用来持久存放实际时间的设备即便系统关闭后也可以靠主板上的微型电池保持系统的计时。当系统启动时内核通过读取 RTC 来初始化实际时间该时间存放在 xtime 变量中。
系统定时器
系统定时器是内核定时机制中最为重要的部分它提供一种周期性触发中断机制。
三、定时器
定时器也叫动态定时器或内核定时器可以让指定的工作在指定的时间点上执行如延后 5 秒或指定在某个时刻上执行。下面的代码可以定义一个定时器
struct time_list mytimer;
// 通过一个辅助函数来初始化定时器数据结构的内部值
init_timer(my_timer);
// 然后设置自己的值
my_timer.expires jiffies delay; /* delay 为定时器超时节拍数jiffies 是系统全局变量维护系统发生时钟中断的总次数 */
my_timer.data 0; /* 给定时器处理函数传入 0 值 */
my_timer.function my_function; /* 定时器超时时调用的函数 */my_timer.expires 表示超时时间它是以节拍为单位的绝对计数值。jiffies 是系统全局变量维护系统发生时钟中断的总次数。如果当前 jiffies 计数大于 my_timer.expires 那么 my_timer.function 指向的处理函数就会开始执行。处理函数必须符合下面的函数原型
void my_timer_function(unsigned long data);
最后需要激活定时器
add_timer(my_timer);
一般来说定时器都在超时后马上执行但是也有可能推迟到下一个时钟节拍才能执行所以不能用定时器来实现任何硬实时任务。
上面的方法是延迟一个函数执行还有一种延迟进程执行的方法是使用 schedule_timeout() 函数该方法会让需要延迟执行的任务睡眠到指定的延迟时间耗尽后再重新运行。但该方法也不能保证睡眠时间正好等于指定的延迟时间只能使睡眠时间接近指定的延迟时间。当时间到期后内核唤醒被延迟的进程并将其重新放回运行队列用法如下
/* 将任务设置为可中断睡眠状态 */
set_current_state(TASK_INTERRUPTIBLE);/* 小睡一会“s” 秒后唤醒 */
schedule_timeout(s * HZ);
唯一的参数为延迟的相对时间单位为节拍。当任务被设置为 TASK_INTERRUPTIBLE 状态即可中断状态那么当任务收到信号时可能被提前唤醒也可以将任务设置为 TASK_UNINTERRUPTIBLE这样就不会被信号提前唤醒。既然调用该函数后进程会睡眠那么这种方法肯定不能在中断上下文或者持有锁的时候使用了。