linux 的计时器机制,补充

        任何的cpu如果要支持操作系统的话,必须有一个可编程的内部计时器,周期性的给系统发出定时器中断,这种周期性的定时器中断叫做system clock tick,linux对时间管理是通过使用jiffies为单位的,这是一个内核中的全局变量,每次定时器中断到来它的值自增1。
        linux有两种类型的系统计时器,
        第一种,也是比较旧的方案,是一个含有32个指向timer struct 结构的指针的静态指针数组,以及还有一个当前处于激活状态的定时器的掩码(timer_active),这个指针数组所指向的timer struct是内部定义好的,在系统初始化时设置的。这很像bottom half handler table bh_base,是不能够供用户使用的,只对内核提供服务。
        第二种,也是较新的方案,即链表成员是timer_list结构的一个链表, 它们按照expire time的顺序进行排序。

        在每次clock tick中断到来时,系统(因该是时钟中断处理函数)把timer bottom half handler标志位置位,当调度器(scheduler)下次运行时,此timer queue会被处理(see bottom half for detail),timer bottom half handler 会处理以上二者。对于前者,它的掩码(timer_active)会按照bit 1到bit 32的顺序进行处理(分优先级,很类似bottom half hadler table bh_base),如果bit  x被置位并且已经expired,则会调用bh_base[x-1]中的处理函数,然会reset bit x。对于后者,系统会遍历此链表,当entry expired时,系统会呼叫相应的处理函数,然后此expired entry 会被从链表中移除。后者的好处是你可以对超时处理函数传递你自己相应的参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值