欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > PPT文档下载
 

Linux内核分析SMP启动.ppt

  • 资源ID:15684563       资源大小:271.50KB        全文页数:30页
  • 资源格式: PPT        下载积分:9.9积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要9.9积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

Linux内核分析SMP启动.ppt

Linux内核分析多处理器SMP系统结构,黄晶晶 1134444 蒋乾悦 1131843 魏浩洋 1131841,SMP简介,SMP简介 SMP系统的引导 SMP结构中的互斥 SMP结构中的高速缓存与内存的一致性 SMP结构中的中断机制 SMP结构中的进程调度,SMP简介,在给定的时间内,CPU的最高速度是有限的,提高计算速度方法之一 就是使用多个CPU 多处理器系统(Multi-Processor Systems,MPS) 整个硬件系统由统一的操作系统控制, 在处理器和程序之间实现作业、任务、 程序等的全面并行,并行计算机分类 根据指令流和数据流的不同,通常把计算机系统分为: 单指令流单数据流(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-Processor,SMP) 硬件上,CPU没主次之分(除启动和初始化外),物理上采用同一种CPU,所有的 CPU通过同一条总线共享同一个内存以及所有的外部设备。为了减少访问内存冲突,SMP结构中的各个CPU通常都有各自的高速缓存 软件上,每个CPU平等动态地从进程就绪队列中调度进程加以执行,中断请求也是等概率动态地分配给某个CPU,由其提供中断服务,系统总线,外部设备,SMP简介,对称多处理器(Symmetric Multi-Processor,SMP) SMP系统一般使用同一种商品化微处理器,具有片上或外置高速缓存(减少访问内存的冲突) 经由高速总线(或交叉开关)连向共享存储器 单一操作系统映像 共享总线带宽。所有处理器共享总线带宽,完成对内存模块和I/O模块的访问 各个CUP独立地、异步地执行指令,SMP简介,优点: 低通信延迟,各个进程通过读/写操作系统提供的共享数据缓存区来完成处理器间的通信,其延迟通常小于网络通信延迟 缺点: 可用性比较差 可扩展性较差,SMP简介,组建SMP系统 CPU内部必须内置APIC(Advanced Programmable Interrupt Controllers)单元 相同的产品型号,同样类型的CPU核心 完全相同的运行频率 尽可能保持相同的产品序号编号,SMP简介,与单处理器结构相比,SMP结构的实现的特殊问题 处理器间的同步与互斥 高速缓存与内存之间内容的一致性问题 对中断的处理,SMP的启动,SMP的启动 概述 SMP启动的过程 (1) 启动流程 (2) 相关函数介绍,SMP的启动,概述 SMP结构中的CPU都是平等的,没有主次之分,这是基于系统中有多个进程的前提下 在同一时间,一个进程只能由一个CPU执行 系统启动对于SMP结构来说是一个特例,因为在这个阶段里系统中只有一个CPU,SMP的启动,概述 SMP系统在启动,即刚加电或总清时,只能由一个CPU来执行系统引导和初始化。 这个CPU称为“引导处理器”,即BP,其余的处理器处于暂停状态,称为“应用处理器”,即AP。,SMP的启动,概述 BP完成系统的启动,并创建起多个进程,从而可以由多个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( )启动各个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的信息,进行一些操作。如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建立一个内核线程。令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_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的内容设置成,表示这是一个次CPU,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的启动,相关函数介绍 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已经初始化完毕。,SMP的启动,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检测到或超时,才从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 ,

注意事项

本文(Linux内核分析SMP启动.ppt)为本站会员(xt****7)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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