加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux的时钟处理机制

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

2.4 硬件时钟处理过程

由2.3.3可知硬件时钟中断的处理函数保存在静态变量 irq0 中,其定义如清 单2-4

清单2-4 变量irq0定义

static struct irqaction irq0 = {
  .handler  = timer_event_interrupt,
  .flags    = IRQF_DISABLED | IRQF_IRQPOLL | IRQF_NOBALANCING,
  .mask    = CPU_MASK_NONE,
  .name    = "timer"
};

由定义可知:函数 timer_event_interrupt 为时钟中断处理函数,其定义如 清单2-5

清单2-5 timer_event_interrupt 函数

static irqreturn_t timer_event_interrupt(int irq, void *dev_id)
{
  add_pda(irq0_irqs, 1);
  global_clock_event->event_handler(global_clock_event);
  return IRQ_HANDLED;
}

从代码中可以看出:函数 timer_event_interrupt 实际上调用的是 global_clock_event 变量的 event_handler 成员。那 event_handler 成员指 向哪里呢?

为了说明这个问题,不妨假设系统中使用的是 hpet 时钟。由2.3.3节可知 global_clock_event 指向 hpet 时钟事件设备( hpet_clockevent )。查看 hpet_enable 函数的代码并没有发现有对 event_handler 成员的赋值。所以继 续查看时钟事件设备加入事件的处理函数 tick_notify ,该函数记录了当时钟 事件设备发生变化(例如,新时钟事件设备的加入)时,执行那些操作(参见 2.3.1节),代码如清单2-6

清单2-6 tick_notify 函数

static int tick_notify(struct notifier_block *nb, unsigned long reason, void *dev)
{
  switch (reason) {
  case CLOCK_EVT_NOTIFY_ADD:
    return tick_check_new_device(dev);
  ……
  return NOTIFY_OK;
}

由代码可知:对于新加入时钟事件设备这个事件,将会调用函数 tick_check_new_device 。顺着该函数的调用序列向下查找。 tick_set_periodic_handler 函数将时钟事件设备的 event_handler 成员赋值 为 tick_handle_periodic 函数的地址。由此可知,函数 tick_handle_periodic 为硬件时钟中断发生时,真正的运行函数。

函数 tick_handle_periodic 的处理过程分成了以下两个部分:

全局处理:整个系统中的信息处理

局部处理:局部于本地 CPU 的处理

(编辑:云计算网_泰州站长网)

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

热点阅读