




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DSPBIOS4:线程调度(part1),4.1线程调度概述,许多实时DSP应用都需要同时执行许多不相关的功能(functions,函数),这些功能一般是对外部事件的响应.这些功能就叫线程.DSP/BIOS定义线程为任何独立的指令流.可以是一个函数,或一个中断服务程序.DSP/BIOS使应用程序按线程结构化设计,每个线程完成一个模块化的功能.多线程程序中允许高优先级线程抢占低优先级线程,以及线程间的同步和通讯,4.1.1线程的类型,DSP/BIOS支持4种线程:(1)硬件中断(HWI):频率可达200KHz(5us),处理时限在2us100us.(2)软件中断(SWI):时限100us以上,SWI允许HWI将一些非关键处理在低优先级上延迟执行,这样可以减少在中断服务程序中的驻留时间(3)任务(TSK):任务与软件中断不同的地方在于在运行过程中可以被挂起。DSP/BIOS提供了一些任务间同步和通讯的机制,包括队列、信号灯和邮箱。(4)后台线程(IDL):MAIN-空闲循环:运行那些没有执行期限(deadlines)的函数,4.1.1线程的类型(续),在DSP/BIOS中还有另外几种函数可以执行,它们是在某一种类型的线程上下文中被执行的:时钟(CLK)函数:在每个定时器中断的末尾执行。缺省情况下,这些函数是按HWI函数执行的。周期(PRD)函数:在片上定时器中断或其它事件多次计数后执行周期函数,周期函数是一种特殊类型的软件中断。数据通知函数:在使用管道(PIP)或主机通道(HST)传输数据时执行。,4.1.2线程的选择(1),SWI、TSK与HWI之间的选择:硬件中断只处理时间要求苛刻的关键任务。HWI可以处理发生频率在200KHz左右的事件。软件中断或任务可以用于执行时间限制在100ms以上的事件。HWI函数应该触发(post)软件中断或任务来进行低优先级处理。使用低优先级线程可以减小中断禁止的时间,允许其它中断的触发。,4.1.2线程的选择(2),SWI与TSK之间的选择:SWI一般用于相对独立的函数,如果要求比较复杂的话使用TSK。TSK提供了很多任务间通讯和同步的手段。一个任务可以挂起等待某一个资源的有效。使用共享数据时,TSK比SWI有更多的选择。而软件中断执行时必须保证所需的数据已经准备好。所有的SWI使用同一个堆栈,所以在存储器使用上更加有效。,4.1.2线程的选择(3),IDL:后台函数用于执行没有执行时间限制的非关键处理CLK:如果希望每个定时器中断时触发一个函数的执行则使用CLK函数。这些函数是当作HWI来运行,所以应该保证运行时间尽量小。缺省的CLK对象PRD_clk增加周期函数的一次计数(tick)。可以增加更多的CLK对象以相同的速率执行某个函数。PRD:PRD函数以整数倍于低分辩时钟中断或其它事件(如外部中断)的频率执行。,4.1.2线程的选择(4),PRD与SWI:所有的PRD函数属于同一个SWI优先级,所有PRD函数间不能互相抢占。PRD函数可以触发(post)低优先级软件中断来延长处理时间。这可以保证在下一个系统计数(tick)到来时PRD_swi(周期函数对应的软件中断)可以抢占这些低优先级中断,新的PRD_swi得以执行。,4.1.3线程的优先级,在DSP/BIOS中,硬件中断有最高的优先级,然后是软件中断,软件中断可以被高优先权软件中断或硬件中断抢先。软件中断是不能被阻塞的。任务的优先权低于软件中断,共有15个任务优先权级别(加上TSK_idle应该16个)。任务在等待某个资源有效时可以被阻塞。后台线程idle_loop是优先级最低的线程。,4.1.4线程的比较(1),4.1.4线程的比较(2),4.1.5线程让出和抢先(1),DSP/BIOS运行优先级最高的线程当下面情况发生时,不一定运行优先级最高的线程:(1)HWI_disable,SWI_disable或TSK_disable被调用(2)高优先级的任务处于阻塞时,即调用了TSK_sleep,LCK_pend,MBX_pend,orSEM_pend.,4.1.5线程让出和抢先(2),4.1.5线程让出和抢先(3),线程抢先的例子,4.2硬件中断,硬件中断是对外界异步事件触发的,来源可以是片上(on-device)设备或外部设备.硬件中断发生,处理器转向中断处理向量.一个硬件中断在处理时可以被另外一个硬件中断抢占,而不论其优先级.一个硬件中断在响应前触发多次,则仅响应一次.所以硬件中断的响应尽量快.,4.2.1硬件中断的配置,在DSP/BIOS配置工具中为每一个硬件中断建立了HWI对象。使用HWI管理器,可以配置每个硬件中断的ISR(中断服务函数)。在HWI对象的属性页中输入ISR的函数名即可。DSP/BIOS负责设置中断向量表。在配置工具中也允许配置中断向量表在内存中的位置(MEM管理器中设置)。,4.2.1硬件中断的配置(图),4.2.2允许和禁止硬件中断,在一个软件中断或任务中,可以在一个关键段的处理中暂时禁止硬件中断。函数HWI_disable和HWI_enable/HWI_restore需成对使用来禁止或允许中断。HWI_disable和HWI_restore成对使用允许硬件中断嵌套。,4.2.3中断中的上下文切换和硬件中断管理(1),一个中断抢占另外一个中断时,这个中断要保存和恢复它修改的寄存器。使用HWI_enter和HWI_exit保存和恢复寄存器。HWI_enter/HWI_exit还保证SWI和TSK管理器在合适的时候被调用。使用HWIdispatcher,就把C写的HWI函数放到HWI_enter/HWI_exit宏对中。所以使用HWIdispatcher后,不能再调用HWI_enter/HWI_exit,否会导致系统崩溃。,4.2.3中断中的上下文切换和硬件中断管理(2),HWI_enterC62_ABTEMPS,C62_CTEMPS,IEMASK,CCMASKisrcodeHWI_exitC62_ABTEMPS,C62_CTEMPS,IEMASK,CCMASKC62_ABTEMPS和C62_CTEMPS,决定保存并恢复那些A、B或控制寄存器。IEMASK,定义那些中断位需要被屏蔽。CCMASK,定义CSR中的缓存控制位的设置值。,4.2.3中断中的上下文切换和硬件中断管理(3),HWI_enter/HWI_exit宏还保证在中断嵌套情况下只在最外层中断服务例程中调用DSP/BIOS调度器。如果在HWI或其嵌套的HWI中触发了(trigger)一个SWI(使用SWI_post)或使能了一个高优先权的TSK,那么在最外层的HWI_exit中会调用SWI或TSK的调度器。SWI调度器在切换到任何高优先权TSK之前首先服务所有未决的SWI。时钟中断post的SWI的运行:DSP/BIOS是时钟驱动的操作系统。每个时钟中断服务CLK_F_isr后调用FXN_F_run,FXN_F_run中运行每个CLK对象的函数(这些CLK对象一般用于触发SWI,比如PRD_F_tick时钟函数触发KNL_swi)。接着转到SWI_RUNFXN中,按优先级运行FXN_F_run中post的每个软件中断。最低级的软件中断KNL_swi进行任务调度。最后,回到IDL_loop中。,4.3软件中断,软件中断不同于一般处理器上的软件中断指令,DSP/BIOS的SWI模块是独立于任何处理器相关的软件中断指令的。SWI线程适于处理的应用是速率较低的或时限不如HWI严格的工作。SWI的触发是编程实现的,有五个函数可以触发软件中断:SWI_andn,SWI_dec,SWI_inc,SWI_or,SWI_post一个软件中断会一直执行到完毕(没有挂起状态),除非被硬件中断或更高级别的软件中断抢占。如果在HWI中断服务程序内部需要调用任何会触发软件中断的SWI函数,那么需要在中断服务程序的入口和出口调用HWI_enter和HWI_exit,或者使用HWI分派器(diapatcher)来调用中断服务程序。,4.3.1建立SWI对象,动态法:SWI_creat;可以动态删除静态法:配置工具;不能动态删除swi=SWI_create(attrs);其中,swi是一个句柄。attrs是一个SWI_Attrs结构。SWI_create只能在任务级调用,而不能在HWI或其它SWI中调用。,typedefstructSWI_AttrsSWI_Fxnfxn;Argarg0;Argarg1;#ifdefined(_54_)Booliscfxn;#endifIntpriority;Unsmailbox;SWI_Attrs;,4.3.2设置软件中断优先级,配置工具中设置SWI对象的优先级。只要存储器容量没有限制,可以建立任意多的SWI对象。软件中断可以有15个优先级,从最低的SWI_MINPR(0)到最高的SWI_MAXPRI(14)。优先级0是保留给KNL_swi对象的,它是任务调度器。,4.3.3软件中断优先级和应用程序堆栈大小,除了任务,所有DSP/BIOS中的线程都是在同一个系统栈上运行的。系统栈上保存了当软件中断抢占其它线程时的寄存器内容。为了满足同一时刻最大可能的抢占数量,每增加一个软件优先级别,系统栈大小都要增长。从堆栈使用的角度上看,给所有的软件中断一个优先级更有效。当建立第一个PRD对象时,会自动建立一个新的SWI对象(称作PRD_swi)和系统时钟。如果没有其它的SWI对象,那么PRD_swi对象使用最低优先级,同时增加系统栈的大小。,4.3.4软件中断的执行(1),一般通过调用SWI_andn、SWI_dec、SWI_inc、SWI_or和SWI_post来使软件中断进入调度。这些函数可以在程序的任何地方调用。SWI可以被更高优先级的线程抢占,但是,SWI不能被阻塞,即使软件中断正在等待一个外部设备(比如等到设备准备好)也不可以将它挂起。如果在一个SWI得到执行权之前被触发(post)了多次,那么这个SWI只被执行一次。,4.3.4软件中断的执行(2),Postexecution的过程:当一个SWI对象被触发时(post),SWI管理器将它加入到一个触发递软件中断列表等待执行。然后SWI管理器检查软件中断是否被允许:(1)如果没有被允许,就像在HWI函数中一样,SWI管理器将执行权交给当前线程。(2)如果软件中断是允许的,SWI管理器将被触发(post)SWI对象的优先级和当前线程的优先级作比较:(2.1)如果当前运行线程是后台线程或是低优先级的SWI,那么SWI管理器将这个SWI对象从已触发(posted)SWI对象列表中移去,并将CPU控制权转到被触发的SWI,开始执行这个SWI。(2.2)如果当前运行线程的优先级大于等于被触发(post)的SWI,SWI管理器将控制权转到当前运行线程,当所有高优先级的SWI运行结束后,被触发(post)的SWI才得以运行。,4.3.5SWI对象的邮箱(1),每个SWI都有一个32位的邮箱,它用来决定是否触发中断或者被SWI函数内部使用。5个触发SWI的函数的不同和对邮箱的作用,4.3.5SWI对象的邮箱(2),SWI触发后,邮箱的值恢复初始化的值。SWI_getmbox(),得到SWI在触发前的邮箱值。利用这一点,可以控制SWI的函数的执行次数。(难点之一)提供的运行机制!,4.3.5SWI对象的邮箱(3),5种SWI触发方式的适用场合:SWI_post:直接触发SWI函数运行SWI_inc:控制SWI函数的运行次数。初始值一般为0。(见上页)SWI_andn:多个事件发生才导致SWI函数运行,初始值一般为(111B)等。SWI_or:根据触发事件的不同调用不同的子程序。初始值为0;swith((SWI_getmbox()case0 x1:case0 x2:SWI_dec:一个事件的多次触发导致SWI函数执行一次。初始值为事件触发次数,4.3.6使用SWI的优缺点(与HWI相比),SWI可以在所有硬件中断都打开的条件下执行。不会延长中断响应时间。有时将长的ISR分为两个部分是很有意义的,HWI负责时间要求非常苛刻的操作,然后将时间要求相对不苛刻的后续处理交给SWI做。SWI中断服务程序中可以调用一些HWI内部不能调用的函数。因为SWI可以保证不在DSP/BIOS更新内部数据结构的时候运行,这是DSP/BIOS非常重要的特色。,4.3.7软件中断抢占时保存寄存器,当一个软件中断抢占另一个线程时,DSP/BIOS自动保存被抢占线程环境的寄存器(a0a9,b0b9,CSR,AMR)。用户的SWI函数无需保存任何寄存器,即使SWI使用汇编语言也不需要这些操作。但是用汇编语言写的SWI函数必须满足C的调用约定。在C6000平台上,它必须保存寄存器A10到A15和B10到B15(如果汇编函数中使用了这些寄存器的话)。如果一个SWI函数改变了IER寄存器,那么需要保存并在返回时恢复它,否则这种改变就会持续下去,影响被抢占的线程。HWI函数不自动保存上下文,除非调用了HWI_enter/HWI_exit或HWI分派器(dispatcher)。其它情况要HWI函数自己保存上下文。,4.3.8同步SWIhandler,SWI_disable/SWI_enable暂时关闭SWI调度。软件中断不能单个关闭。这点不象硬件中断。调用软件中断的关闭和打开的程序可以嵌套。在最外层的SWI_enable才真正打开SWI。所以,task不必管SWI_disable是否被调用多次。key=SWI_disable();/key用来确定SWI_disable()被调用的次数SWI_enable(key);注意:使用了SWI_disable后,任务不能抢先。因为KNL_swi也被禁止了。,4.4任务调度,任务对象是那些被TSK模块管理的线程。任务的优先级高于空闲循环,低于硬件和软件中断。TSK模块根据任务的优先级和当前的执行状态动态地调度和抢占任务。Ready中最高优先级的任务运行。151(idleloop)TSK模块提供了一组函数来操纵任务对象。并使用TSK_Handle类型的句柄来存取TSK对象。内核为每个任务对象保留了处理器寄存器的拷贝,每个任务都有自己的运行时栈用于保存局部变量和用于嵌套的函数调用。每个TSK对象的堆栈大小可以分别设置,每个堆栈必须足够处理子程序调用加上一个任务抢占上下文的保存。,4.4.1任务的创建(1),动态创建和删除任务,4.4.1任务的创建(2),配置工具创建任务,4.4.2任务执行的状态和调度(1),4种执行状态:运行态(Running),代表任务是处理器当前正在执行的线程,以TSK_RUNNING表示。就绪态(Ready),代表任务一旦获得处理器的处理时间就可以执行,以TSK_READY表示。阻塞态(Blocked),代表任务必须等到某个事件的发生才可以运行,以TSK_BLOCKED表示。终止态(Terminated),代表任务已经结束,不会再运行,以TSK_TERMINATED表示。,4.4.2任务执行的状态和调度(2),与一般的基于时间片调度策略的RTOS不同的是,一旦有更高优先级的任务进入就绪状态,DSP/BIOS立刻抢占当前的任务。理解:但是,DSP/BIOS也是可以实现的时间驱动的RTOS。在程序执行过程中,任务可能因为不同的原因在各个状态见切换。TSK、SEM和SIO模块中的函数可以改变任务的运行状态:阻塞或终止当前运行任务,使一个阻塞的任务就绪,重新调度当前线程,等等。,4.4.2任务执行的状态和调度(3),当处于运行态的任务转换到任何其它三种状态时,处理器的控制权转向当前最高优先级的就绪任务,一个运行态任务可以按下面的三种方式之一转向其它状态:(1)运行任务调用TSK_exit转入终止态。(2)运行任务调用了引起阻塞的函数(如SEM_pend或TSK_sleep)而转入阻塞态,当一个任务正在执行I/O操作、等待某个资源的有效、或空闲时可能转入这个状态。(3)当有更高优先级的任务就绪时,当前任务被抢占,转入就绪态。一个任务也可以通过调用TSK_yield将控制权转向优先级相同的其它任务,自己变为就绪态。,一个阻塞的任务在外部事件的响应中可以转入就绪态:如I/O操作的完成,共享资源的有效,等等。一旦转入就绪态,该任务等待调度,只要它的优先级高于当前运行任务,则立刻转入运行态。,4.4.3测试任务的堆栈溢出,堆栈溢出会造成严重后果使用2个函数TSK_checkstack和TSK_stat检查堆栈TSK_checkstack在任务切换是检查旧任务和新任务的堆栈使用情况。通过函数hook来实现。,4.4.4任务挂钩(hook),Hook的概念:在任务建立(TSK_create)、任务删除(TSK_delete)、任务退出(TSK_exit)和任务切换(TSK_sleep,SEM_pend)时可以调用某些专用于系统的函数(这些函数就是一些挂钩)。作用:(1)可以用于扩展任务的上下文(超出普通寄存器之外的部分)(2)切换函数(switchfunction)是在任务切换时调用的(切换函数可以在TSK管理器的属性页中设置)。这个函数中可以保存并恢复自定义的附加的任务上下文,可以检查堆栈溢出,还可以监测任务执行时间。切换函数(switchfunction)是在内核里被调用的,所以只能调用一些在SWI内部才可以调用的函数。(3)就绪函数(Readyfunction)是在一个任务转为就绪态之前被调用的,由
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025授权代理委托合同
- 2025销售补充合同范本
- 2025春季呼和浩特石化分公司高校毕业生招聘20人模拟试卷完整答案详解
- 2025广东珠海市香洲区劳动人事争议仲裁委员会选聘特邀调解员10人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025福建亿力集团有限公司所属单位招聘98人考前自测高频考点模拟试题(含答案详解)
- 2025贵州黔南州瓮安县江界河镇招聘城镇公益性岗位人员1人考前自测高频考点模拟试题及1套参考答案详解
- 2025年上半年四川凉山州宁南县考核招聘教师44人考前自测高频考点模拟试题(含答案详解)
- 2025年甘肃医学院招聘事业编制专业技术人员13人(第一批)模拟试卷及答案详解(易错题)
- 2025福建福州市长乐区行政服务中心管理委员会招聘编外人员2人考前自测高频考点模拟试题及参考答案详解1套
- 2025知识产权许可合同样书
- 2025年中国华电集团招聘面试题解析及备考建议手册
- 2025年机器人面试题及答案解析
- 高三第一次月考总结主题班会课件
- 参考活动2 善待身边的人教学设计-2025-2026学年初中综合实践活动苏少版七年级下册-苏少版
- 2021年全球工作场所状况报告 State of the Global Workplace 2021 Report
- 2025年度江苏省档案管理及资料员基础试题库和答案
- 球墨铸铁管-施工方案(3篇)
- 口腔咨询顾问入门知识培训课件
- 新疆课课件教学课件
- 【2024版】健康知识竞赛题目及答案
- 2025年安徽省安庆市笔试辅警协警预测试题(附答案)
评论
0/150
提交评论