加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux的时钟处理机制

发布时间:2016-05-16 20:26:35 所属栏目:Linux 来源:站长网
导读:在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理 等等。所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操作系统

3.3 时钟的软中断处理

软件时钟的处理是在时钟的软中断中进行的。

3.3.1 软中断初始化

软中断的一个重要的处理时机是在每个硬件中断处理完成后(参见 irq_exit 函数),且由2.4节的内容可知:在硬件时钟中断处理中,会唤醒时钟的软中断 ,所以每次硬件时钟中断处理函数执行完成后都要进行时钟的软中断处理。和时 钟相关的软中断是 TIMER_SOFTIRQ ,其处理函数为 run_timer_softirq ,该函 数用来处理所有的软件时钟。这部分初始化代码在函数 init_timers 中进行, 如清单3-7

清单3-7 init_timers 函数

void __init init_timers(void)
{
  ……
  open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL);
}

3.3.2 处理过程

函数 run_timer_softirq 所作的工作就是找出所有到期的软件时钟,然后依 次执行其处理函数。其代码如清单3-8

清单3-8 run_timer_softirq函数

static void run_timer_softirq(struct softirq_action *h)
{
  struct tvec_base *base = __get_cpu_var(tvec_bases);
  hrtimer_run_pending();
  if (time_after_eq(jiffies, base->timer_jiffies))
    __run_timers(base);
}

函数首先获得到本地 CPU 的 base 。然后检测如果 jiffies

大于等于 timer_jiffies ,说明可能已经有软件时钟到期了,此

时就要进行软件时钟的处理,调用函数 __run_timers 进行处

理。如果 jiffies 小于 timer_jiffies ,表明没有软件时钟到期,

则不用对软件时钟进行处理。函数返回。

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!