免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 564 | 回复: 0

[时钟管理] 时钟管理上pit 和 apic如何协调工作的? [复制链接]

论坛徽章:
0
发表于 2016-09-11 12:57 |显示全部楼层
假设当前硬件没有hpet。而是pit + apic,由pit来产生全局的时钟中断,而apic产生本地时钟中断..
并且最终调用的clock_event_device->handler为tick_periodic。
现在有个疑问,pit 和apic是如何协调工作的?
ulk里面描述的,是说PIT的中断函数是timer_interrupt,它只会处理全局tick事件该处理的事情,比如增加jiffies,比如更新wall time.
而APIC的中断处理函数是smp_apic_timer_interrupt,它只会处于自己本地CPU的任务,比如定时器超时判断,进程调度等。
但是linux 2.6.30代码上已经不太一样,如下:
static void tick_periodic(int cpu)
{
会设定某个CPU来处理全局tick事件处理。
假设pit是没有工作的话,只有apic那是可以理解的,就是其中一个CPU会做更多额外的工作。(作为全局tick)
但是,如果加上了pit这个全局tick,它也周期性的发生中断,并且接手这个中断处理的还不是特定的CPU,
那就这里不就乱套了,真的是疑问。
        if (tick_do_timer_cpu == cpu) {
                write_seqlock(&xtime_lock);

                /* Keep track of the next tick event */
                tick_next_period = ktime_add(tick_next_period, tick_period);

                do_timer(1);
                write_sequnlock(&xtime_lock);
        }

        update_process_times(user_mode(get_irq_regs()));
        profile_tick(CPU_PROFILING);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,8.5折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时8.5折扣期:2019年9月30日前


----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP