QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2431|回复: 0

SMP的Timer Interrupt初始化问题

[复制链接]
发表于 2006-9-14 11:46:24 | 显示全部楼层 |阅读模式
最近在看2.6.17在i386上的SMP timer interrupt初始化的时候遇到一个问题。

我最初的理解是:只要IO APIC和Local APIC初始化完成了,第二个CPU也就应该能接收到timer interrupt了。对应代码,我觉得只要[code:1]init() -> smp_prepare_cpus() -> smp_boot_cpus() ->
smpboot_setup_io_apic() -> setup_IO_APIC()[/code:1]和[code:1]start_secondary() -> local_irq_enable()[/code:1]都执行到了,就应该可以了。

于是我在自己的Dual-core笔记本上作了一个测试。上面所说的初始化完成后,CPU 0收到了70个tick,CPU 1没有收到Tick(意料之中)。我估计CPU 1在过几个Tick的延迟就应该也能收到tick了。出乎意料,直到CPU 0收到了7000多个Tick之后,CPU 1才开始接受Tick。

更让我惊讶的是,如果我在init()中调用sleep_on_timeout(),那么我调用的timeout是多少,CPU 1接受到第一个Tick的时间就会延迟多少。百思不得其解的是:当CPU 0接收到7000多个Tick的时候,CPU 0和CPU 1都已经进入cpu_idle()了。init()也已经开始执行ram disk里的映像了——似乎kernel本身的初始化已经完成。CPU 1到底在等待什么?——或者说到底是什么操作才真正打开CPU 1的timer interrupt?

烦请高手看一下。谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-24 18:48 , Processed in 0.068692 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表