博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

aubrey's home

  aubrey.cublog.cn

关于作者
姓名:Aubrey.Li
职业:Solaris Kernel Dev
位置:Shanghai-ZiZhu
个性介绍:
|| << >> ||
我的分类


多核初始化和启动过程
多核初始化协议定义了两类处理器:bootstrap processor(BSP) 和 application

processors (APs). 上电或者MP复位后,系统硬件动态选择一个作为BSP,其余的

作为APs.

BSP的IA32_APIC_BASE中的BSP flag将被置位,其他的处理器中该位将被清空.

上电或者复位后,AP等待BSP的SIPI(startup signal)信号,接收到SIPI信号后,

AP执行BIOS中的AP配置代码,然后进入halt状态.

对于支持Hyper_Threading的处理器,每个逻辑处理器将被作为一个单独的处理器

对待,都会有一个唯一的APIC ID.

志强处理器MP初始化协议算法:

1)基于系统拓扑结构,每个逻辑处理器将分配一个8位的APIC ID.这个ID将被写入到每个处理器的local APIC ID寄存器中.

2)BSP被确定后,BSP创建一个ACPI的table和一个MP的table并将自己的初始APIC ID加到这些表中

3)在boot-strap流程的最后,BSP设置处理器数目为1,并开始广播SIPI. 这里,SIPI包含BIOS AP初始化代码的向量

4)AP收到SIPI后,第一个得到信号量的AP开始执行初始化代码,将自己的APIC ID加到ACPI和MP的表里面,并将处理器数目加1.完成初始化后,AP执行一个CLI指令并halt自己

5)所有的AP都初始化完后,BSP得到一个系统处理器的个数,完成boot-strap代码,进入OS.

6)此时AP保持halt状态,等待INITs, NMIs和SMIs.

BSP初始化过程

1. 初始化memory
2. Load microcode到处理器
3. 初始化内存范围寄存器(MTRRs)
4. enable cache
5. 确定BSP是否是"GenuineIntel"
6. 执行CPUID,保存CPU信息为将来使用
7. load AP的启动代码到低1M的一个4K的页里
8. 切换到保护模式
9. 转换4K的页基址为一个8位的向量. 例如
    0x000BD000H --> 0xBDH
10.设置APIC的SVR的bit8来enable local APIC
11.建立错误处理handler
12.初始化锁信号量
13.探测系统中的AP, 方法如下:
   - 设置处理器COUNT为1
   - 启动一个timer,BSP开始等待
   - 此时AP开始初始化,并将COUNT加1
   - timer到期,BSP检查COUNT,如果没有增加,就表示系统中没有AP.
14. 等timer中断,检查COUNT并建立处理器数目

AP初始化

1. 获取信号量,开始初始化
2. load microcode到处理器
3. 初始化内存范围寄存器(MTRRs)
4. enable cache
5. 检查AP是否是"GenuineIntel"
6. 保存CPUID信息,为将来使用
7. 切换到保护模式
8. 配置AP的共存内存接口执行环境
9. 将处理器个数加1
10.释放信号量
11. 执行CLI并且进入halt状态
12.等待INIT IPI

发表于: 2008-04-15,修改于: 2008-04-15 14:36,已浏览168次,有评论0条 推荐 投诉


网友评论
 发表评论