Linux内核分析SMP启动.ppt

上传人:xt****7 文档编号:15684563 上传时间:2020-08-29 格式:PPT 页数:30 大小:271.50KB
收藏 版权申诉 举报 下载
Linux内核分析SMP启动.ppt_第1页
第1页 / 共30页
Linux内核分析SMP启动.ppt_第2页
第2页 / 共30页
Linux内核分析SMP启动.ppt_第3页
第3页 / 共30页
资源描述:

《Linux内核分析SMP启动.ppt》由会员分享,可在线阅读,更多相关《Linux内核分析SMP启动.ppt(30页珍藏版)》请在装配图网上搜索。

1、Linux内核分析多处理器SMP系统结构,黄晶晶 1134444 蒋乾悦 1131843 魏浩洋 1131841,SMP简介,SMP简介 SMP系统的引导 SMP结构中的互斥 SMP结构中的高速缓存与内存的一致性 SMP结构中的中断机制 SMP结构中的进程调度,SMP简介,在给定的时间内,CPU的最高速度是有限的,提高计算速度方法之一 就是使用多个CPU 多处理器系统(Multi-Processor Systems,MPS) 整个硬件系统由统一的操作系统控制, 在处理器和程序之间实现作业、任务、 程序等的全面并行,并行计算机分类 根据指令流和数据流的不同,通常把计算机系统分为: 单指令流单数据

2、流(SISD) 单指令流多数据流(SIMD) 多指令流单数据流(MISD) 多指令流多数据流(MIMD) 并行计算机系统绝大部分为MIMD系统(5类),包括 并行向量机(PVP,Parallel Vector Processor); 对称多处理机(SMP , Symmetric Multi Processor); 大规模并行处理机(MPP,Massively Parallel Processor); 机群(Cluster); 分布式共享存储多处理机(DSM,Distributed Shared Memory),SMP简介,SMP简介,对称多处理器(Symmetric Multi-Process

3、or,SMP) 硬件上,CPU没主次之分(除启动和初始化外),物理上采用同一种CPU,所有的 CPU通过同一条总线共享同一个内存以及所有的外部设备。为了减少访问内存冲突,SMP结构中的各个CPU通常都有各自的高速缓存 软件上,每个CPU平等动态地从进程就绪队列中调度进程加以执行,中断请求也是等概率动态地分配给某个CPU,由其提供中断服务,系统总线,外部设备,SMP简介,对称多处理器(Symmetric Multi-Processor,SMP) SMP系统一般使用同一种商品化微处理器,具有片上或外置高速缓存(减少访问内存的冲突) 经由高速总线(或交叉开关)连向共享存储器 单一操作系统映像 共享总

4、线带宽。所有处理器共享总线带宽,完成对内存模块和I/O模块的访问 各个CUP独立地、异步地执行指令,SMP简介,优点: 低通信延迟,各个进程通过读/写操作系统提供的共享数据缓存区来完成处理器间的通信,其延迟通常小于网络通信延迟 缺点: 可用性比较差 可扩展性较差,SMP简介,组建SMP系统 CPU内部必须内置APIC(Advanced Programmable Interrupt Controllers)单元 相同的产品型号,同样类型的CPU核心 完全相同的运行频率 尽可能保持相同的产品序号编号,SMP简介,与单处理器结构相比,SMP结构的实现的特殊问题 处理器间的同步与互斥 高速缓存与内存之

5、间内容的一致性问题 对中断的处理,SMP的启动,SMP的启动 概述 SMP启动的过程 (1) 启动流程 (2) 相关函数介绍,SMP的启动,概述 SMP结构中的CPU都是平等的,没有主次之分,这是基于系统中有多个进程的前提下 在同一时间,一个进程只能由一个CPU执行 系统启动对于SMP结构来说是一个特例,因为在这个阶段里系统中只有一个CPU,SMP的启动,概述 SMP系统在启动,即刚加电或总清时,只能由一个CPU来执行系统引导和初始化。 这个CPU称为“引导处理器”,即BP,其余的处理器处于暂停状态,称为“应用处理器”,即AP。,SMP的启动,概述 BP完成系统的启动,并创建起多个进程,从而可

6、以由多个CPU同时参与处理时,才启动AP,让它们在完成自身初始化以后投入运行。 一旦各个AP都已投入运行,这种暂时的主次关系便告结束,各CPU一律平等了。,SMP的启动,概述 在初始化阶段,“引导处理器”先完成自身的初始化,进入保护模式并开启页式存储管理机制,再完成系统特别是内存的初始化,然后对SMP进行初始化。,SMP的启动,SMP系统启动的过程,BP,SMP的启动,SMP系统启动的过程 BP先完成自身初始化,然后从start_kernel( )调用smp_init( )进行SMP结构初始化 smp_init( )的主体是smp_boot_cpus( ),依次调用do_boot_cpu( )

7、启动各个AP AP通过执行trampoline.S的一段跳板程序,进入startup_32( )完成一些基本初始化,SMP的启动,SMP系统启动的过程 AP进入start_secondary( )作进一步初始化工作,进入自旋(测试全局变量smp_commenced是否变成1),等待一个统一的“起跑”命令 BP完成所有AP启动后,调用smp_commence( )发出该起跑命令 每个CPU进入cpu_idle( ),等待调度,SMP的启动,相关函数介绍 smp_init( )smp_boot_cpus( ) 对BP的MTRR初始化,设置使用/不使用高速缓存,采用穿透/回写模式。 收集CPU的信息

8、,进行一些操作。如CPU逻辑号物理号映射数组的转化。BP的逻辑号总是0。 x86_apicid_to_cpu x86_cpu_to_apicid ,SMP的启动,CPU有APIC对SMP结构来说是必要条件,所以还要对BP进行是否有APIC的检查以及其初始化。setup_local_APIC( )等。 开始逐个启动各个AP。phys_cpu_present_map是个全局的CPU位图,根据此位图用一个循环依次对各个AP调用do_boot_cpu( )。,SMP的启动,smp_boot_cpus( )do_boot_cpu( ) 1. 通过fork_by_hand( )为目标CPU建立一个内核线程

9、。令idle为指向此线程task_struct的指针。实际上fork_by_hand()就是调用do_fork(),通过init_task取得指向这个task_struct数据结构的指针并赋值给idle idle=init_task.prev_task; idle-thread.eip=start_secondary; 2. 将idle-thread.eip设置指向start_secondary( ),这是AP进入正常调度的入口。,SMP的启动,3. 此时AP不能直接执行start_secondary( ),需借助跳板来一次中转,进入startup_32( )完成一些基本初始化。 setup_

10、trampoline( )的作用就是为其复制好一块跳板,返回值赋给start_eip。 start_eip= setup_trampoline( ) start_eip中的地址是低级阶段地址 idle-thread.eip是AP完成自身初始化,建立起页面映射后执行的高级阶段。,SMP的启动,do_boot_cpu( )setup_trampoline( ) trampoline.S是一段汇编代码,主要针对的是AP,使其进入保护模式. 把跳转地址设为0 x00100000(1M),也就是系统引导以后初始化程序的起点startup_32( )地址。 把寄存器%ebx的内容设置成,表示这是一个次CP

11、U,SMP的启动,smp_boot_cpus( )do_boot_cpu( ) 4. 启动AP之前,BP通过本地APIC对AP的APIC执行一次初始化操作,就是本地APIC中的一些寄存器向目标CPU的APIC发一些信号。初始化在头尾分别把全局量init_deasserted置0与置1 5. 接着将start_eip中的初始化程序入口地址发送给目标CPU,等待其回应,此地址写入目标CPU的APIC的控制寄存器APIC_ICR 6. AP受到启动后,先进入“跳板”,进入startup_32( )执行初始化,调用函数initialize_secondary( )进一步初始化,SMP的启动,相关函数介

12、绍 startup_32initialize_secondary( ) AP在startup_32中进入BP为其准备的空转进程中,也就是自己的上下文。 此进程的thread.eip指向start_secondary( ),所以initialize_secondary( )使其跳转到start_secondary( )函数,并重新设置了堆栈指针,SMP的启动,相关函数介绍 start_secondary( ) 1. cpu_init( )对AP作进一步初始化。 cpu_init( )主要为进程调度做准备,并把全局位图cpu_initialized对应位置1,让BP知道此AP已经初始化完毕。,SM

13、P的启动,CPU之间的同步与协调 (1)全局量init_deasserted。BP为AP初始化前将init_deasserted设置为0,AP进入smp_callin( )后在一个循环中等待其成为1,保证AP在此期间不对APIC操作 (2)全局位图cpu_callout_map,AP在smp_callin( )中等待对应位变成1,BP则在do_boot_cpu( )中将目标AP对应位设1 (3)全局位图cpu_callin_map,BP在do_boot_cpu( )中向AP发出启动命令后,在一个定时循环中等待其对应位变成1,AP则在smp_callin( )结束前设置相应位为1,BP检测到或超

14、时,才从do_boot_cpu( )返回 (4)全局量smp_commenced,AP的起跑命令,SMP的启动,相关函数介绍 start_secondary( )smp_callin( ) 调用calibrate_dalay()测试CPU计算速度同步量的检测与设置 cpu_callin_map标志位设置为1 初始化Time Stamp Count时间印记 执行完smp_callin( ),等待smp_commenced变成1,进入cpu_idle( )。,SMP的启动,相关函数介绍 smp_init( )smp_boot_cpus( ) 我们回到smp_boot_cpus( )继续往下讲。 完成所有do_boot_cpu( )后,首先显示整个系统的运算能力,然后对外部APIC进行初始化,最后通过zap_low_mappings( )清除页面映射目录中的低区。,SMP的启动,相关函数介绍 smp_init( )smp_commence( ) 包括一个原子操作,将smp_commenced设置成1,此后,所有在start_secondary( )中待命的CPU结束循环,转入cpu_idle( )。 至此,关于SMP系统启动的函数及流程到此便告一段落。,Thanks ,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!