SMP是什么 启动方式介绍

smp是什么?
smp 英文为symmetric multi-processing ,是对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多cpu),各cpu之间共享内存子系统以及总线结构,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。
cmp 英文为chip multiprocessors,指的是单芯片多处理器,也指多核心。其思想是将大规模并行处理器中的smp集成到同一芯片内,各个处理器并行执行不同的进程。
(1)cpu数:独立的中央处理单元,体现在主板上就是有多少个cpu槽位
(2)cpu核心数(cpu cores):在每一个cpu上,都可能有多核(core),每个核中都有独立的alu,fpu,cache等组件,可以理解为cpu的物理核数。(我们常说4核8线程中的核),指物理上存在的物体。
(3)cpu线程数(processor逻辑核):一种逻辑上的概念,并非真实存在的物体,只是为了更好地描述cpu的运作能力。简单地说,就是模拟出的cpu核心数。
不过在这里我们这里指的是多个单核cpu组合到一起,每个核都有自己的一套寄存器。
一个系统存在多个cpu,成本会更高和管理也更困难。多核算是轻量级的smp,物理上多核cpu还是封装成一个cpu,但是在cpu内部具有多个cpu的核心部件,可以同时运行多个线程/进程。但是需要cpu核心之间要共享资源,比如缓存。对程序员来说,它们之间的区别很小,大多数情况可以不做区分。我们在嵌入式开发中,大部分都是用的多核cpu。
这里我们就把这个smp启动转换成多核cpu启动。
2、启动方式
程序为何可以在多个cpu上并发执行:他们有各自独立的一套寄存器,如:程序计数器pc,栈指针寄存器sp,通用寄存器等,可以独自 取指、译码、执行,当然内存和外设资源是共享的,多核环境下当访问临界区 资源一般 自旋锁来防止竞态发生。
soc启动的一般会从片内的rom, 也叫bootrom开始执行第一条指令,这个地址是系统默认的启动地址,会在bootrom中由芯片厂家固化一段启动代码来加载启动bootloader到片内的sram,启动完成后的bootloader除了做一些硬件初始化之外做的最重要的事情是初始化ddr,因为sram的空间比较小所以需要初始化拥有大内存 ddr,最后会从网络/usb下载 或从存储设备分区上加载内核到ddr某个地址,为内核传递参数之后,然后bootloader就完成了它的使命,跳转到内核,就进入了操作系统内核的世界。
bootloader将系统的控制权交给内核之后,他首先会进行处理器架构相关初始化部分,如设置异常向量表,初始化mmu(之后内核就从物理地址空间进入了虚拟地址空间的世界,一切是那么的虚无缥缈,又是那么的恰到好处)等等,然后会清bss段,设置sp之后跳转到c语言部分进行更加复杂通用的初始化,其中会进行内存方面的初始化,调度器初始化,文件系统等内核基础组件 初始化工作,随后会进行关键的从处理器的引导过程,然后是各种实质性的设备驱动的初始化,最后 创建系统的第一个用户进程init后进入用户空间执行用户进程宣誓内核初始化完成,可以进程正常的调度执行。
系统初始化阶段大多数都是主处理器做初始化工作,所有不用考虑处理器并发情况,一旦从处理器被bingup起来,调度器和各自的运行队列准备就绪,多个任务就会均衡到各个处理器,开始了并发的世界,一切是那么的神奇。
soc在启动阶段除了一些特殊情况外(如为了加快启动速度,在bl2阶段通过并行加载方式同时加载bl31、bl32和bl33镜像),一般都没有并行化需求。因此只需要一个cpu执行启动流程即可,这个cpu被称为primary cpu,而其它的cpu则统一被称为secondary cpu。为了防止secondary cpu在启动阶段的执行,它们在启动时必须要被设置为一个特定的状态。(有时候为了增加启动速度,必须对时间敏感的设备,就可能启动的时候整个从核并行跑一些任务)
当primary cpu完成操作系统初始化,调度系统开始工作后,就可以通过一定的机制启动secondary cpu。显然secondary cpu不再需要执行启动流程代码,而只需直接跳转到内核中执行即可。
主流程启动初始化一般来说都是主核在干的,当系统完成了初始化后就开始启动从核。  这就像在启动的大门,只有主核让你过了,其他的先在门外等着。当cpu0启动到kernel后,就会去门口,把它们的门禁卡给它们,卡上就写的它们的目的地班级是哪里。如果没有这个门禁卡的cpu,说明地址为0,就继续在原地等着。
故其启动的关键是如何将内核入口地址告知secondary cpu,以使其能跳转到正确的执行位置。
aarch64架构实现了两种不同的启动方式,spin-table和psci。
其中spin-table方式非常简单,但其只能被用于secondary cpu启动,功能比较单一。
随着aarch64架构电源管理需求的增加(如cpu热插拔、cpu idle等),arm设计了一套标准的电源管理接口协议psci。该协议可以支持所有cpu相关的电源管理接口,而且由于电源相关操作是系统的关键功能,为了防止其被攻击,该协议将底层相关的实现都放到了secure空间,从而可提高系统的安全性。

关于滤波器分类的简单介绍
Banana Pi BPI-W3 RK3588平台驱动调试篇 [ PCIE篇一 ] - PCIE的开发指南
浅谈人工智能中六大关键技术
光伏市场资讯2024.1.8 | 冀北新能源装机突破5000万千瓦
小米11首次上新指纹检测心率功能
SMP是什么 启动方式介绍
聪明的城市,让战“疫”工作更可控、更有效
有方科技携手中国电信等共筑NB-IoT安全生态
大力发展光伏风电,用大电网还是储能?
锐成芯微推出了新的物联网IP平台,展出新的LOGO
新能源汽车电池部位用胶的需求讲解
海康威视智能物联技术助力粮食仓储智慧监管
三星TFPRO16G存储卡评测 售价略高且容量略小
PhoneArena评选2015年度最佳智能手表
Protel技巧之设计原理图模块化
爱思强将为三安光电拓展红黄橙光LED产能
一周热议:人工智能能否让人类更幸福?
ipv9_ipv9协议_中国IPv9大地址利弊分析
可穿戴设备的市场真的一片光明吗?
什么是汽车的总质量/车门数/座位数