linux内核定时器 代码,Linux内核计时器

linxu内核中完成的许多功能都需要感知时间的行进,比如定期把页面缓存中的数据写入磁盘,定期进行进程调度,提供获得当前时间的系统调用,还有计划任务的实现,让系统在某段时间之后执行某个程序,或者在某个时间点执行某个程序。以上这些功能对时间的把控都是由系统计时器完成的。

我们可以把系统计时器简单的看做一个按固定频率产生中断的硬件芯片,产生的中断就叫做定时器中断,而和时间相关的任务都在这个中断的中断处理函数中执行。我们可以通过编程来设置发生中断的频率,系统通过一个叫jiffies的变量来记录从系统开始运行到目前为止一共发生了多少次定时器中断,这样通过jiffies加上固定的中断频率,系统就可以感知到目前经过了多少时间。

在x86上时钟中断的频率是100HZ,也就是一秒钟发生100次中断,中断的频率决定了系统对时间感知的粒度,中断越频繁,系统感知时间的精度就越高,反之就越低。不过如果频率太高的话,频繁的执行中断函数会让造成过多的负担,所以要考虑多方面因素,折中的设置时钟中断频率。

我们可以通过编写内核代码来查看当前的jiffies

#include #include #include //jiffies

#include //HZ

static int __init jiffies_init(void)

{

printk(KERN_ALERT"===%s===\n", __func__);

printk(KERN_ALERT"Current ticks is: %lu, seconds: %lu\n", jiffies, jiffies/HZ);

return 0;

}

static void __exit jiffies_exit(void)

{

printk(KERN_ALERT"===%s===\n", __func__);

}

module_init(jiffies_init);

module_exit(jiffies_exit);

KERNEL_VER = $(shell uname -r)

# the file to compile

obj-m += helloworld.o

# specify flags for the module compilation

EXTRA_CFLAGS = -g -O0

build: kernel_modules

kernel_modules:

make -C /lib/modules/$(KERNEL_VER)/build M=$(PWD) modules

clean:

make -C /lib/modules/$(KERNEL_VER)/build M=$(PWD) clean

通过在linux内核中注册和删除模块时执行的宏命令可以打印出内核中的变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值