Chinaunix首页 | 论坛 | 博客
  • 博客访问: 279445
  • 博文数量: 43
  • 博客积分: 2515
  • 博客等级: 少校
  • 技术积分: 510
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-10 16:15
文章存档

2009年(2)

2008年(12)

2007年(29)

我的朋友

分类: LINUX

2007-03-29 23:31:05

    硬件给内核提供一个系统定时器用以计算和管理时间,内核通过编程预设系统定时器的频率,即节拍率(tick rate),每一个周期称作一个tick(节拍)。Linux内核从2.5版内核开始把频率从100调高到1000(当然带来了很多优点,也有一些缺点).
   jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数。譬如,如果计算系统运行了多长时间,可以用 jiffies/tick rate 来计算。jiffies定义在文件中:
 

extern unsigned long volatile jiffies;



    可以利用jiffies设置超时等,譬如:

unsigned long timeout = jiffies + tick_rate * 2; // 2秒钟后超时

   
    if(time_before(jiffies, timeout){
       // 还没有超时

    }
    else{
       // 已经超时

    }

 
  
内核提供了四个宏来比较节拍计数,这些宏定义在文件中:

    time_before(unknown, known)
    time_after(unknown, known)
    time_before_eq(unknown, known)
    time_after_eq(unknown, known)

    比较的时候用这些宏可以避免jiffies由于过大造成的回绕问题。


    除了系统定时器外,还有一个与时间有关的时钟:实时时钟(RTC),这是一个硬件时钟,用来持久存放系统时间,系统关闭后靠主板上的微型电池保持计时。系 统启动时,内核通过读取RTC来初始化Wall Time,并存放在xtime变量中,这是RTC最主要的作用。
阅读(9990) | 评论(10) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-19 21:45:12

thanks a lot!

chinaunix网友2010-01-22 11:14:27

谢谢分享,受用了

chinaunix网友2009-12-30 16:40:32

不错,很值得借鉴

chinaunix网友2009-01-04 17:30:54

这正是定义这些宏的原因,用了就不会有回绕的问题,不用才有

chinaunix网友2008-10-23 17:03:12

如果jiffies的值回绕一圈, 使用这些宏会不会引起判断问题?