欢迎来到天天文库
浏览记录
ID:11084240
大小:104.50 KB
页数:11页
时间:2018-07-09
《支持多核处理器的rtos》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、支持多核处理器的RTOS的关键技术1、体系结构支持多核处理器的OS可能有几种结构:主从结构、粗加锁方式、细加锁方式。(1)主从结构:修改一个OS内核使其支持多处理器系统的最简单的方法,是将整个OS视为一个不可分割的整体,并限定所有内核模式的操作均运行于同一个处理器(即主处理器)上,而另一个处理器(即从处理器)只用来执行用户模式的操作,这样得到的软件结构就不再是对称的。系统维持两个队列:一个用来管理申请在主处理器上执行的任务,另一个用来管理申请在任意一个从处理器上执行的任务,都必须由旋转锁保护。只有
2、大多数任务都以用户模式运行时,这种结构才能体现其优越性。(2)粗加锁结构:是将整个OS当作一个由旋转锁保护的整体单片电路,但又不会将内核模式的操作局限在某一个特定的处理器上。任何一个要求内核模式操作的任务都可以获得粗加锁,并且继续在它正在使用的处理器上运行。但在某个特定的时刻,这种内核模式的操作仍然只能在某一个处理器上运行。当某项任务占用着粗加锁时,其它所有等待获得内核服务的任务都只能空闲。粗加锁的问题在于如果有几个任务都在等待获得内核服务,那么这些任务将像在单处理器系统中一样一个接一个地连续运行
3、。(3)内核细加锁:设计内核细加锁(fine-grainedlocking)结构的目的是为了让不同处理器上运行的任务能够同时执行内核模式操作,采用这种结构的内核叫做线程化内核(threadedkernel),这是通过对不同的内核子系统分别采用旋转锁来实现的,以便企图访问这些子系统的任务能够并发执行。加锁机制的粒度(granularity)决定了最大可并发执行的内核线程数。2、系统引导和初始化OS的引导和初始化是指从系统加电到能够在多个处理器内核间平等地进行任务调度的过程,是建立平等调度实施的基础。
4、虽然说SMP系统中,各处理器可以平等地并行工作,但这是建立在系统有多个可并行执行任务的基础上;而在引导和初始化过程中,由于很多工作只能串行执行,在这个阶段处理器内核是不平等的,有主次之分。系统加电后,受到硬件控制,只启动其中一个处理器,称为主CPU或引导处理器(BootingProcessor,BP),而其它处理器称为次CPU或应用处理器(ApplicationProcessor,AP),处于停机等待状态。加电启动后,主CPU跳转到特定的内存地址(复位地址),通常映射到只读存储器,保存着整个计算机
5、的引导程序(Bootloader),其任务是进行简单的硬件检测、初始化环境参数、将OS内核装载到内存中,跳转到OS的起始地址(这是在哪里呢,类似于NiosIIBoot中的_start,.text段的入口地址)开始并执行。这段引导过程完全由BP完成。进入OS内核后,BP需要进行最初的草创性工作,完成运行环境准备、各种初识状态设置、基本读写数据段清零、Bootloader传递过来的各种环境参数保存、内存栈的开辟及栈指针、全局指针设置,前面这部分工作全部由底层汇编代码完成(_start至alt_main
6、()之间的代码),之后BP跳转到由高级语言编写的函数,开始第二个阶段CPU本身的初始化(alt_main()函数)。在CPU初始化过程中,BP首先自检,收集CPU相关的指令集、存储管理、高速缓存及协处理器等基本信息,接着为AP准备运行环境,同时为AP准备一个锁,之后唤醒AP,AP转入主CPU设置好的地址,开始锁测试而进入等待状态。唤醒AP后,BP输出自身信息后,继续进行内存等各种资源的初始化。接下来的工作主要有BP进行开发板及外部设备初始化,之后准备用于所有CPU的空闲进程,这是一个不参与调度的进
7、程。当某个CPU没有需要执行的任务,就转入这个进程。准备好空闲进程后,由BP解除对AP的锁,各AP逐个启动,进行各种关于各自CPU的初始化,将自身的状态填写到适当的数据结构,最后相继进入空闲状态。所有的AP都完成初始化并进入空闲状态后,由BP来完成整个系统最后阶段的初始化,并执行系统的第一个进程,之后真正步入SMP环境,所有的CPU进入正常、平等的调度。3、进程调度在CMP结构中,调度机制的重点在于更好地满足多处理机并行性上,核心思想是通过降低CPU间调度竞争和选择下一个运行进程的开销,以及提高系
8、统整体负载平衡的能力,从而大幅度提高多处理机系统的执行效率。(1)调度算法:在支持CMP的OS中,每个CPU维护一个自己的就绪进程队列,称为局部任务队列。就绪进程按时间片是否用完分为active和expired两大类,active类包括那些时间片没用完、当前可被调度的就绪进程,expired类包括那些时间片已用完的就绪进程。同时,每类中的进程按照其优先级的不同处于不同的优先级链表中。调度时,active队列中非空的最高优先级链表的第一项被作为候选进程,使得选择下一个运行进程的操作可
此文档下载收益归作者所有