linuxSMP启动过程学习笔记.pdfVIP

  • 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

文档评论(0)

1亿VIP精品文档

相关文档