滴倾听Linux的滴答滴(linux滴答)

Linux操作系统(又称为GNU/Linux操作系统)是一种源代码开放、免费、跨平台的多用户多任务操作系统。这里有关Linux的“滴答滴”,也就是指Linux内核的中断机制,也就是定时器(Timer)机制。

当我们使用Linux的时候,每一次的动作都会给系统带来中断。中断的形式有两种:外部中断和软件中断。外部中断通常是外部设备发出的,比如说键盘鼠标等等。软件中断是由程序自身产生的,比如定时器(timer)中断。

那么定时器(timer)到底是怎么工作的呢?定时器属于一种可编程中断,它可以指定定时器发出中断的时间间隔。以Linux内核为例,定时器中断的实现是利用一个hardware timer(硬件定时器),Linux内核启动这个timer,然后当Timer到达指定的值时,就会向内核发送中断的信号,这个中断的信号就是一个“滴答滴”的声音,一直持续到下一次中断发生。

在Linux内核中,触发定时器中断的实现方式有两种,一种是使用smple_timer_func函数,另一种是使用set_timer函数。 Sample_timer_func函数可以用来指定定时器发出中断的时间间隔,它是一个简易的函数:

“`c

void sample_timer_func(unsigned long data){

do_whatever(data);

init_timer(&my_timer);

my_timer.function = sample_timer_func;

my_timer.expires = jiffies + HZ; // HZ is clock ticks/second

add_timer(&my_timer);

}


另一个则更为复杂,可以实现更多的功能:

```c
int set_timer(long time, struct my_timer* timer, int flags) {
// Declare and init the timer
init_timer(&timer->timer);
// init the timer data
timer->data.time = time;
timer->flags = flags;

// schedule the timer to fire
timer->timer.expires = jiffies + timer->data.time;
timer->timer.function = timer_callback;
timer->timer.data = (unsigned long) timer;
add_timer(&timer->timer);
return 0;
}

以上就是Linux系统内核中定时器(timer)机制的简单实现,有了它们,Linux系统能够定时执行一些操作,在Linux系统中,多少任务就有多少滴答滴,也就是我们常说的Linux“滴答滴”,给Linux操作系统提供了定时执行功能。


数据运维技术 » 滴倾听Linux的滴答滴(linux滴答)