免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1160 | 回复: 0
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP