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内核中注册和删除模块时执行的宏命令可以打印出内核中的变量。

linux内核定时器 代码,Linux内核计时器相关推荐

  1. linux 定时器 代码,linux C++ 定时器代码

    linux C++ 定时器代码:#include #include #include using namespace std; /* union sigval { int sival_int; //i ...

  2. linux银行存储系统代码,Linux系统 存储(示例代码)

    linux系统管理 1.存储管理 传统的磁盘分区 RAID技术,软RAID的实现 LVM 文件管理系统 ext xfs btrfs 2.程序包管理 rpm yum dnf 3.sed gawk 4.进 ...

  3. linux简单重定向代码,Linux Shell编程(26)——代码块重定向

    像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 .所有的这些依靠代码块结尾的 < ...

  4. 在linux下载github代码,linux 定时下载github最新代码

    场景:网站的代码在github上托管,静态网站部署在服务器上,每次自己修改完本地代码后,提交到github上,需要自己去服务器上执行git pull 拉取最新代码, 为了解决这种操作,自己再服务器上  ...

  5. Linux运行8086代码,* linux下编译,链接,运行,汇编程序

    当前使用的操作系统:ubuntu11.10 汇编程序由定义好的段构成,每个段都有不同的目的,三个最常用的段: 1)data 段 汇编程序data(数据)段是可选的. 数据段声明带有初始值的数据元素,这 ...

  6. linux创建根目录代码,Linux文件系统之目录的建立

    一:前言 在用户空间中,建立目录所用的API为mkdir().它在内核中的系统调用入口是sys_mkdir().今天跟踪一下 函数来分析linux文件系统中目录的建立过程. 二:sys_mkdir() ...

  7. linux运行软件代码,Linux软件安装-详细源码安装过程

    1.简介 软件的安装是linux学习时的重中之重,*nux上重要思维哲 学组合若干小功能进而成为一个可用可维护的系统平台.那么在 操作系统构建完成之时,除非内核等支持系统必需软件之外,可 拓展可维护的 ...

  8. linux添加定时器防抖,linux驱动2.3按键中断-定时器防抖

    本节目标: 通过定时器来防止按键抖动,测试程序是使用上节的:阻塞操作的测试程序 一.引入 如下图所示,在没有定时器防抖情况下,按键没有稳定之前会多次进入中断,使得输出多个相同信息出来 按键波形图,如下 ...

  9. linux管道阻塞代码,linux中的管道

    管道是一种最基本的IPC机制,由pipe函数创建:#include int pipe(int filedes[2]); 调用pipe函数就是在内核区开辟一块缓冲区(称为管道).filedes[0]指向 ...

最新文章

  1. 信息系统项目管理系列之一:绪论
  2. 竞价账户烧钱的七大病因和处理办法
  3. 【蔡勒公式 】根据给定的年月日求出对应星期几
  4. PPT设计中的用图问题
  5. 码农和程序员的几个重要区别!
  6. c++基础学习(04)--(函数、数字、数组、字符串)
  7. 公布一个硬盘杀手的分析报告
  8. toad如何查看表字段备注(表字段的说明)
  9. 对比视图和存储过程的使用和学习体会进行选择。
  10. 前端每日实战:73# 视频演示如何用纯 CSS 创作一只卡通狐狸
  11. win2008 401 - 未授权: 由于凭据无效,访问被拒绝。解决方法
  12. 【优化调度】基于matlab人工鱼群算法求解梯级水库调度优化问题【含Matlab源码 415期】
  13. fetch jsonp连接mysql_后端接口开发:json,jsonp,restful
  14. 常用EXE文件反编译工具
  15. AD9361 补充(中)
  16. 春风十里,Webpower喊营销汪们更聪明地获得理想薪资
  17. 黑马python在线培训
  18. labview 编程样式_LabVIEW编程实例:一个简单通用的“关于”对话框模板实现
  19. excel数据表转成insert语句插入数据库
  20. ppt文字提取转word

热门文章

  1. MingW环境下的windows编程
  2. 声笔码和声笔数码单字效率分析
  3. leetcode 374. Guess Number Higher or Lower 、375. Guess Number Higher or Lower II
  4. https://leetcode.com/problems/palindromic-substrings/description/
  5. 次数匹配(不需要在前面加“\”)
  6. EF之通过不同条件查找去重复
  7. 第十五节,基本数据类型,元组tuple
  8. 浏览器同源与跨域问题总结
  9. C语言中全局变量存放在哪个位置?
  10. Backbone.js 1.0.0源码架构分析(一)