- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
支持多核处理器的RTOS.
支持多核处理器的RTOS的关键技术
1、体系结构
支持多核处理器的OS可能有几种结构:主从结构、粗加锁方式、细加锁方式。
(1)主从结构:修改一个OS内核使其支持多处理器系统的最简单的方法,是将整个OS视为一个不可分割的整体,并限定所有内核模式的操作均运行于同一个处理器(即主处理器)上,而另一个处理器(即从处理器)只用来执行用户模式的操作,这样得到的软件结构就不再是对称的。
系统维持两个队列:一个用来管理申请在主处理器上执行的任务,另一个用来管理申请在任意一个从处理器上执行的任务,都必须由旋转锁保护。只有大多数任务都以用户模式运行时,这种结构才能体现其优越性。
(2)粗加锁结构:是将整个OS当作一个由旋转锁保护的整体单片电路,但又不会将内核模式的操作局限在某一个特定的处理器上。
任何一个要求内核模式操作的任务都可以获得粗加锁,并且继续在它正在使用的处理器上运行。但在某个特定的时刻,这种内核模式的操作仍然只能在某一个处理器上运行。当某项任务占用着粗加锁时,其它所有等待获得内核服务的任务都只能空闲。
粗加锁的问题在于如果有几个任务都在等待获得内核服务,那么这些任务将像在单处理器系统中一样一个接一个地连续运行。
(3)内核细加锁:设计内核细加锁(fine-grained locking)结构的目的是为了让不同处理器上运行的任务能够同时执行内核模式操作,采用这种结构的内核叫做线程化内核(threaded kernel),这是通过对不同的内核子系统分别采用旋转锁来实现的,以便企图访问这些子系统的任务能够并发执行。
加锁机制的粒度(granularity)决定了最大可并发执行的内核线程数。
2、系统引导和初始化
OS的引导和初始化是指从系统加电到能够在多个处理器内核间平等地进行任务调度的过程,是建立平等调度实施的基础。虽然说SMP系统中,各处理器可以平等地并行工作,但这是建立在系统有多个可并行执行任务的基础上;而在引导和初始化过程中,由于很多工作只能串行执行,在这个阶段处理器内核是不平等的,有主次之分。系统加电后,受到硬件控制,只启动其中一个处理器,称为主CPU或引导处理器(Booting Processor,BP),而其它处理器称为次CPU或应用处理器(Application Processor,AP),处于停机等待状态。
加电启动后,主CPU跳转到特定的内存地址(复位地址),通常映射到只读存储器,保存着整个计算机的引导程序(Bootloader),其任务是进行简单的硬件检测、初始化环境参数、将OS内核装载到内存中,跳转到OS的起始地址(这是在哪里呢,类似于NiosII Boot中的_start,.text段的入口地址)开始并执行。这段引导过程完全由BP完成。
进入OS内核后,BP需要进行最初的草创性工作,完成运行环境准备、各种初识状态设置、基本读写数据段清零、Bootloader传递过来的各种环境参数保存、内存栈的开辟及栈指针、全局指针设置,前面这部分工作全部由底层汇编代码完成(_start至alt_main()之间的代码),之后BP跳转到由高级语言编写的函数,开始第二个阶段CPU本身的初始化(alt_main()函数)。
在CPU初始化过程中,BP首先自检,收集CPU相关的指令集、存储管理、高速缓存及协处理器等基本信息,接着为AP准备运行环境,同时为AP准备一个锁,之后唤醒AP,AP转入主CPU设置好的地址,开始锁测试而进入等待状态。唤醒AP后,BP输出自身信息后,继续进行内存等各种资源的初始化。
接下来的工作主要有BP进行开发板及外部设备初始化,之后准备用于所有CPU的空闲进程,这是一个不参与调度的进程。当某个CPU没有需要执行的任务,就转入这个进程。准备好空闲进程后,由BP解除对AP的锁,各AP逐个启动,进行各种关于各自CPU的初始化,将自身的状态填写到适当的数据结构,最后相继进入空闲状态。
所有的AP都完成初始化并进入空闲状态后,由BP来完成整个系统最后阶段的初始化,并执行系统的第一个进程,之后真正步入SMP环境,所有的CPU进入正常、平等的调度。
3、进程调度
在CMP结构中,调度机制的重点在于更好地满足多处理机并行性上,核心思想是通过降低CPU间调度竞争和选择下一个运行进程的开销,以及提高系统整体负载平衡的能力,从而大幅度提高多处理机系统的执行效率。
(1)调度算法:在支持CMP的OS中,每个CPU维护一个自己的就绪进程队列,称为局部任务队列。就绪进程按时间片是否用完分为active和expired两大类,active类包括那些时间片没用完、当前可被调度的就绪进程,expired类包括那些时间片已用完的就绪进程。同时,每类中的进程按照其优先级的不同处于不同的优先级链表中。
调度时,active队列中非空的最高优先级
文档评论(0)