- 0
- 0
- 约3.53万字
- 约 36页
- 2026-01-21 发布于河北
- 举报
linuxSMP启动过程学习笔记
1.SMP硬件体系结构:
对于SMP最简单可以理解为系统存在多个完全同的CPU,所
有CPU共享总线,拥有自己的寄存器。对于内存和外部设备访问,由
于共享总线,所以是共享的。Linux操作系统多个CPU共享在系统空
间上映射同,是完全又樗的。
由于系统中存在多个CPU,这是就引入一个问题,当外部设备产
生中断的时候,具体有哪一个CPU进行处理?
为此,intel公司提出了10APCI和LOCALAPCI的体系结构。
10APIC连接各个外部设备,并可以设置分发类型,根据设定的
分发类型,中断信号发送的对应CPU的LOCALAPIC上。
LOCALAPIC负责本地CPU的中断处理,LOCALAPIC不仅可以
接受10APIC的中断,也需要处理本地CPU产生的异常。同时
LOCALAPIC还提供了一个定时器。
如何确定那个CPU是引导CPU?
根据intel公司中的资料,系统上电后,会根据MPInitialization
Protocol随机选择一个CPU作为BSP,只有BSP会运行BIOS程序,
其他AP都进入等待状态,BSP发送IPI中断触发后才可以运行。具
体的MPInitializationProtocol细节,可以参考Intel?64andIA-2
ArchitecturesSoftwareDevelopersManualVolumeA:System
ProgrammingGuide,Part1第8章。
引导CPU如何控制其他CPU开始运行?
BSP可以通过IPI消息控制AP从指定的起始地址运行。CPU中
集成的LOCALAPIC提供了这个功能。可以通过写LOCALAPIC中提
供的关寄存器,发送IPI消息到指定的CPU上。
如何获取系统硬件CPU信息的?
在系统初始化后,硬件会在内存的规定位置提供关于CPU,总线,
10APIC等的信息,即SMPMPtable0在linux初始化的过程,会
读取该位置,获取系统关的硬件信息。
2.linuxSMP启动过程流程简介
setup_arch()
setup_memory();
reserve_bootmem(PAGE_SIZEPAGE_SIZE);
z
find_smp_config();//查找smpmptable的位置
smp_alloc_memory();
trampoline_base=(void*)
alloc_bootmem_low_pages(PAGE_SIZE);〃分酉己trampoline,用于
启动AP的引导代码。
get_smp_config();//根据smpmptable,获取具体的硬件信
息
trap_init()
init_apic_mappings();
mem_init()
zap_low_mappings();如果没有定义SMP的话,清楚用户空间
的地址映射。
rest_init();
kernel_thread(initNULL,CLONE_FS
您可能关注的文档
最近下载
- Leisai雷赛智能控制 数字式两相步进驱动器 DM422(V3.0) M542 使用说明书.pdf
- 租房合同范本下载(可直接打印).pdf VIP
- 《巴洛克时期工艺美术》.ppt VIP
- 监控系统维护保养记录表.doc VIP
- 2023年高考历史试卷(浙江)(6月)(解析卷).doc VIP
- 二型糖尿病肾病护理查房ppt课件.pdf VIP
- 铁路运输安全管理概述.pptx VIP
- 2025年陕西省普通高校职业教育单独招生考试语文真题(含答案)2025.pdf VIP
- 浙江省宁波市宁波九校2023-2024学年高二上学期1月期末数学试题 Word版含解析.docx VIP
- 社会支持量表:信度与效度的研究.docx VIP
原创力文档

文档评论(0)