版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、osek/vdx操作系统的研究与应用 摘要 自从在发动机的电子控制模块中嵌入第一台微处理器以来,汽车中嵌入微处理器的数量迅速增多。目前,某些汽车已使用了70多个微处理器,汽车电子软件系统越来越复杂,使得软件工程师需花费大量的时间和精力来开发和调试软件系统,进而导致了汽车电子软件的重复开发、软件工程师效率低下等问题。为了解决这些问题,欧洲几家主要汽车制造商在适用于汽车且可通用于其他领域的嵌入式分布式操作系统的规范化方面进行合作,制定了osek/vdx标准。该标准定义了嵌入式操作系统、网络通信和网络管理等方面的标准接口,这使得汽车电子软件的可重用性、可兼容性提高,避免了重复开发,提高了开发效率。因
2、此,研究osek/vdx标准具有重要意义。近几年,国内也兴起了对osek/vdx标准的研究。本文首先根据osek/vdx操作系统标准,研究了操作系统的运行机制,对其体系结构、任务管理、事件机制、资源管理、中断机制、报警机制等进行了全面的分析。基于对运行机制的分析,设计和实现了osek/vdx操作系统中任务管理、事件机制、资源管理、中断机制和报警机制等模块的关键数据结构和系统调用。接着研究了osek/vdx操作系统的优化技术:针对每个优先级只有单个任务的任务管理设计了一个就绪表,使得查询最高优先级的就绪任务变为常数时间;针对任务终止时不必保存任务的上下文环境,提供了两种任务切换策略一般任务切换和
3、任务终止后的任务切换;针对osek/vdx标准的等待事件系统调用只能等待单个事件,提供了同时等待多个事件的系统调用;针对默认情况下,中断发生在任务的栈上,每个任务都必须预留支持中断嵌套的内存空间,提供了单独中断栈以减少整个系统对内存的需求。最后,研究了osek操作系统的移植,根据在80x86上的实现,设计了测试程序,验证了设计和实现的正确性,并给出了在80x86平台上的空间性能和时间性能指标。关键词:嵌入式操作系统;osek/vdx;汽车电子目录第一章 绪论71.1课题来源71.2研究的目的和意义71.3国内外研究现状81.4 osek标准简介91.4.1 osek os标准简介91.4.2
4、osek com标准简介101.4.3 osek nm标准简介101.4.4 osek oil标准简介101.5主要研究内容及组织结构102.1 osek操作系统的体系结构112.1.1 osek操作系统的处理级别112.1.2 osek操作系统的符合类112.2任务管理112.2.1任务状态转换模型122.2.2任务的激活和终止122.2.3任务的优先级122.2.4调度策略132.3事件机制132.4资源管理132.5中断机制142.6调度点分析142.7报警机制142.8错误处理142.9本章小结15第三章 kose操作系统的设计与实现173.1 osek操作系统的总体设计173.2任务
5、管理173.2.1任务控制块tcb173.2.2就绪队列183.2.3内部资源的获得与释放183.2.4任务级的任务切换193.2.5任务调度193.2.6任务的激活203.2.7任务的终止223.2.8空闲任务233.3事件机制233.4资源管理253.5中断机制263.6报警机制273.7本章小结29第四章osek操作系统优化技术研究314.1任务切换的优化314.2事件机制的增强功能314.3中断的优化324.4本章小结33第五章osek操作系统的移植和测试355.1开发环境355.2 osek操作系统的移植355.3功能测试355.3.1测试用例1355.3.2测试用例2395.4 o
6、sek操作系统的性能405.4.1空间性能测试415.4.2时间性能评估425.5本章小结44结论与展望45参考文献47致谢51第一章 绪论1.1课题来源如今,汽车已不再是纯机电的交通工具,其中采用了大量的微处理器,汽车已进入智能化时代。有些汽车中使用了几十个通过总线互连的微处理器来完成车辆运行中的各种任务,从发动机、变速箱的控制到防抱死、悬挂控制,直至巡航、通讯、在线诊断等,控制内容越来越多,控制系统越来越复杂,其中部分新一代发动机的管理系统使用的程序已经超过500kb。数量众多且结构各异的微处理器体系结构和车用安全性能的严格要求给软件设计带来了很新的问题:汽车中软件含量增加、在操作系统和网
7、络方面的重复开发、软件工程师的工作效率不能满足高质量产品的要求等等。为了解决这些问题,1993年5月,宝马、博世、戴姆勒克莱斯勒、欧宝、西门子和大众等几家德国汽车制造商一致同意在适合于汽车且通用的嵌入式分布式操作系统的规范化方面进行合作,由德国卡尔斯鲁厄大学协调该项目,且称之为“offense system und deren schnittstellen fur dieelektronnik im kraftfahrzeug”(德语),简称osek,意为用于汽车电子的、带有接口的开放式系统。本课题源自对osek操作系统标准的研究,根据osek操作系统标准设计、实现该操作系统。1.2研究的目的
8、和意义汽车电子化已成为现代汽车发展的重要标志之一。目前每辆汽车采用的电子装置的情况已成为衡量汽车水平高低的主要标志,未来汽车市场的竞争是汽车电子化的竞争。八十年代以来,国外应用计算机技术和微电子技术,推出了具有多种检测和控制功能的汽车电子系统,使汽车的性能和质量得到巨大的提高,并且解决了汽车环保生态问题。使用这些电子装置后,明显地改善了汽车的动力性、可靠性、安全性、舒适性、便利性和经济性。可以说,近几十年来汽车工业的技术进步很大程度上是应用电子技术,特别是嵌入式技术的结果。在国外,平均每辆车上的电子装置占整车成本的2025%,一些豪华轿车上可以装有的电子产品甚至占整车成本的50%以上。osek
9、标准从已有软件的可移植性、可扩展性和可重用性角度出发,采用基于标准化接口和协议的构件化、模块化设计思想,提供了将各种先进汽车电子设备有机结合在一起的网络化嵌入式计算机系统的开发规范,使汽车行业的各种软件能够兼容与协作开发。这个想法十分吸引人,世界上的主要汽车制造商都高度评价用于下一代产品的osek标准。由于osek标准的优点及许多国际上著名嵌入式软件公司的加盟,它逐渐占据了汽车软件平台的主导地位。目前osek标准已经正式经过iso组织审核,从而成为国际标准。随着交通的迅速发展,我国已成为汽车应用大国和重要的汽车制造基地,高档汽车的研制和生产已提到日程,以嵌入式计算机为核心的汽车电子技术是高档汽
10、车制造中的关键。osek标准作为欧洲汽车行业先进开发技术的总结,是解决我国汽车工业发展问题的良好案。了解和研究osek标准,开发基于osek标准的软件平台,是我国汽车行业顺利发展并打入际市场的紧要任务。使用osek标准的好处有:提高复杂微处理器的可靠性和实时性;在不同的微处理器上提供相同的系统调用接口;可重用软件模块并加快软件更新。另外,osek操作系统并不只是用于汽车上的嵌入式操作系统,基于这个标准的操作系统可广泛的用于制造、加工、太空等控制领域。1.3国内外研究现状世界上一些著名的汽车制造厂商,如奔驰、宝马、保时捷、劳斯莱斯和美洲豹等都采用了osek标准的系统平台来实现汽车内部控制系统。下
11、面是比较著名的嵌入式操作系统厂商开发的osek操作系统:(1)osekturbo os是一个小型、快速、可靠、可扩展的实时操作系统,由metrowerks公司开发,它提供了一套rtos服务来开发嵌入式应用程序,为实时应用程序提供快速后台切换时间。(2)nucleus osek由accerlerated technology公司开发,是符合osek标准操作系统的全面实现,支持多种调度算法、资源和时间管理、报警及用户定义计数器。(3)osekworks由windriver公司开发,它提供了模块性、性能和灵活性的独特组合。其高度模块化的体系令用户可限制应用程序所使用的操作系统服务,优化存储器使用率。
12、对特定对象,如任务,可根据不同的osek进行剪裁,令ram,rom需求达到最小。调度策略以任务和资源的优先级排列,用户可在其中选择,配合事件和中断处理程序的适当使用,来优化应用程序速度。(4)oscan是一个多任务操作系统,对微控制器上的使用有着最优性能,由vector公司开发,其出现是小而稳定的操作系统内核的代表。oscan是一个静态操作系统小而快,是完全抢占型操作系统,提供控制优先级的任务管理和不同的同步机制,支持基于事件的同步。灵活的中断概念使得在中断服务程序里也可使用系统服务。出于商业利益的考虑,上述操作系统均不公布其源代码。国内这几年有部分高校关注osek标准,并尝试设计一个自主产权
13、的符合osek标准的操作系统。参与的高校和科研单位有:中科院、清华大学、浙江大学、北京航空航天大学、华中科技大学、同济大学等。研究成果主要有清华osek车用嵌入式操作系统和浙江大学的smartosek。清华osek车用嵌入式操作系统是国内第一个自主开发的osek车用嵌入式操作系统,它按不同的符合类(见2.1.2)提供完备的任务调度、资源管理、中断管理和定时报警功能,另外还包括com部分的功能,包括内部通信、外部通信和消息通知机制;浙江大学的smartosek符合操作系统标准的bcc1、ecc1符合类(见2.1.2)和通信标准的ccca、cccb等符合类,它是静态微内核、可移植的实时操作系统,提
14、供的功能有:任务管理、中断管理、事件机制、资源管理、定时器和内部通信。1.4 osek标准简介1.4.1 osek os标准简介最新的osek os标准规定了符合osek标准的操作系统必须具有的接口和对象,但不规定具体的实现。一个具体实现只要具有osek标准规定的系统调用接口并符合osek标准规定的特性就称为符合osek标准的操作系统。osek操作系统具有如下功能:(1)任务管理,负责任务的激活和终止、任务的状态管理以及任务切换;(2)事件管理,负责任务的事件同步;(3)资源管理,负责对共享(逻辑)资源或者设备的互斥访问;(4)中断机制,允许操作系统用户编写中断服务程序;(5)报警管理,管理报
15、警,报警在功能上相当于vxworks操作系统的定时器;(6)错误处理,osek操作系统用户在运行期间对错误进行跟踪、管理、控制等。运行osek操作系统的软件体系结构如图1-1所示:图1-11.4.2 osek com标准简介osek com标准定义任务间和处理器间通信的接口和协议,与操作统标准类似,它也提供了标准api服务。osek系统的每个标准都可独立作,因此该标准可脱离操作系统而单独实现。1.4.3 osek nm标准简介对于由不同生产商生产的汽车微处理器产品,它们有通过串行数据交换连接成网络的趋势。因此,为了避免重复劳动和缩短开发时间,需要有一个基础性的标准。osek nm标准为提高微处
16、理器产品的网络互连能力提供了一个网络连接标准。nm的目的是提高微处理器产品网络通信的安全性和可靠性。1.4.4 osek oil标准简介为了达到软件可移植的目标,osek oil标准定义了一种配置和使用osek应用的方法。每一个对系统的配置称为一个oil文件。oil文件可以是手写的或者是由系统配置工具产生。oil提供一种在特定微处理器中配置osek应用的机制。每个微处理器对应一个oil描述。所有的osek系统对象用oil对象来描述。osek应用的oil描述是一组oil对象的组合。微处理器是这些oil对象的容器。oil明确地为每个oil对象定义了所有标准属性。每个osek应用可以定义附加的特殊执
17、行属性和引用。每个osek应用可以限制每个属性的取值范围。1.5主要研究内容及组织结构本文根据对最新的osek/vdx operationg system specification 2.2.3标准进行研究,设计并实现符合该标准的操作系统。研究内容分为四个部分:(1)研究osek操作系统标准,对osek操作系统的运行机制进行分析,按功能分析了其体系结构、任务管理、事件机制、资源管理、报警机制、中断机制、应用程序模式、错误处理等方面;(2)在分析运行机制的基础上,设计和实现操作系统中的关键数据结构和关键系统调用;(3)osek操作系统的优化技术研究,研究任务管理、任务切换、事件同步以及中断机制等
18、方面的优化策略,并对优化策略进行分析;(4)研究在具体平台上移植和测试osek操作系统,即研究在具体平台上如何实现该操作系统与硬件平台有关的部分,通过测试用例验证设计和实现的正确性并给出在具体平台上的空间和时间性能指标。第二章osek操作系统运行机制分析2.1 osek操作系统的体系结构osek操作系统作为独立于应用程序的平台,为应用程序提供了微处理器上的单独运行环境,它控制并发的多个实时任务运行。osek操作系统为用户提供了一组具有标准接口的系统调用,它支持两种实体来使用这些系统调用:任务(基本任务和扩展任务)和中断服务程序。系统调用也可用来管理硬件资源。2.1.1 osek操作系统的处理级
19、别osek标准对操作系统规定了三个处理级别:中断级、调度级、任务级,中断级优先级最高,调度级其次,任务级最低。中断总是优先于任务的运行,当中断到来时,如果当前运行着某个任务,则该任务必须把处理器控制权给该中断。2.1.2 osek操作系统的符合类应用程序的多样化和具体系统的不同能力(比如处理器,存储空间等)要求操作系统也呈现出多样性,同时为方便理解、研究和实现osek操作系统的一部分属性集合并增加osek操作系统的可裁剪性,osek标准规定了四个符合类,一个符合类的实现可以称为osek操作系统的一个版本:(1)bcc1,只支持基本任务,每个优先级一个任务,不同的任务有不同的优先级,不支持多重激
20、活(见2.2.2);(2)ecc1,在bcc1的基础上支持事件同步和扩展任务;(3)bcc2,在bcc1的基础上支持多重激活和每个优先级多个任务;(4)ecc2,在ecc1的基础上支持多重激活和每个优先级多个任务。2.2任务管理osek操作系统中的任务对系统操作和代码长度有较大的影响。osek操作系统支持两种任务:基本任务和扩展任务。一个任务不管是基本的还是扩展的,都有一个静态定义的优先级,可能被抢占或不能被抢占。在可抢占条件下,osek操作系统总会执行优先级最高的任务。2.2.1任务状态转换模型由于处理器任何时刻只能执行一条指令,多个任务会竞争同一个处理器资源。因此多任务的情况下,每个任务总
21、会在不同的状态之间转换,osek操作系统负责任务上下文环境的保存与恢复,基本任务和扩展任务的状态转换图如图2-2所示。 a)基本任务状态转换 b)扩展任务状态转换图 2-22.2.2任务的激活和终止任务激活需要通过激活任务的系统调用来完成,任务被激活以后,操作系统要保证任务从其第一条指令开始执行。值得一提的是,osek操作系统并不支持激活任务时传递参数,如果一个任务想传递某些参数给另一个任务,需要osek com机制的配合才能完成。根据符合类的不同,基本任务可能被激活一次或多次。如前所述,osek操作系统的bcc2和ecc2符合类支持多种激活。所谓多重激活是指osek操作系统支持对非挂起状态的
22、基本任务进行再激活,由osek操作系统负责接收和记录激活次数。多重激活次数由任务的一个属性来决定,在配置任务属性时,该属性的值由用户来决定。osek操作系统中的任务必须调用终止任务系统调用来终止自己。任何任务都必须在其最后部分执行终止任务系统调用,否则操作系统崩溃。2.2.3任务的优先级调度程序根据任务的优先级从就绪队列中选择任务运行。0被定义成最低的优先级,数值越大优先级越高。为了提高效率,osek操作系统并不支持动态优先级管理,即每个任务在运行期间不允许用户改变其优先级。调度程序必须采取以下基本步骤来决定下一个将要执行的任务:(1)调度程序查找所有在就绪/运行状态的任务。(2)从就绪和运行
23、状态的所有任务中,调度程序决定优先级最高的任务集。(3)在优先级最高的任务集中,调度程序找到最早就绪的任务。2.2.4调度策略osek操作系统支持三种调度策略:非抢占任务调度、全抢占任务调度和混合抢占任务调度。全抢占任务调度意味着,运行的在任何时刻都有可能由于更高优先级任务的就绪而释放处理器,此时调度程序调度最高优先级任务的就绪任务运行。当有高优先级任务进入就绪状态,全抢占任务调度就将当前任务转换到就绪状态,当前任务的运行环境被保存,以使得该任务在调度程序重新调度到它时能够恢复其环境。与全抢占任务调度不同,非抢占任务调度只在特定的调度点进行任务调度,非抢占调度可能会影响有时间要求任务的按时完成
24、。如果低优先级任务正在运行,此时若有高优先级任务就绪,此时高优先级不会立即执行,而是等到下一个调度点才能被调度程序调度。混合抢占任务调度综合了全抢占任务调度和非抢占任务调度的特点,这种调度依赖于当前任务的可抢占属性,若当前任务可抢占则采用全抢占任务调度策略,否则采用非抢占任务调度。2.3事件机制事件是osek操作系统管理的对象。它是一种同步机制,专为扩展任务提供,负责扩展任务从等待状态到就绪状态和从就绪状态到等待状态的转换。osek操作系统的事件不是独立的对象,而是必须依附于某个扩展任务。每个扩展任务都有有限的事件数,每个事件由它的所有者和自身的名字确定。当激活一个扩展任务时,其拥有的事件被操
25、作系统清除。2.4资源管理资源管理用于协调多个具有不同优先级任务对共享资源的访问,如对某个内存块、硬件资源的互斥访问等。所有的符合类都必须支持资源管理。osek操作系统的资源管理要保证以下四个条件满足:(1)两个任务不能同时占用同一资源,即对资源互斥访问;(2)不能出现优先级反转;(3)不能出现死锁;(4)已占有资源的任务不能进入等待状态。2.5中断机制 中断是osek操作系统非常重要的一个对象,用户编写中断服务程序(isr)来处理外部的异步事件,操作系统负责将用户的中断服务程序与操作系统连接起来。中断级优先于任务级的执行,因此所有的中断都比任务优先执行。2.6调度点分析在分析了上述能对任务调
26、度产生影响的对象以及其机制后,现对osek操作系统的调度点总结如下:对于全抢占任务调度,(1)当前任务终止;(2)在任务级激活新任务;(3)当前任务显式调用等待事件并进入等待状态;(4)在任务级设置任务的事件并导致目标任务就绪;(5)在任务级释放资源;(6)从中断级返回到任务级(仅对2类中断);这六种情况下将会引发操作系统执行调度程序。对于非抢占任务调度,(1)当前任务终止;(2)显式启动调度程序;(3)当前任务显式调用等待事件并进入等待状态;这三种情况下将会激活操作系统调度程序。2.7报警机制嵌入式操作系统通常需要定时器来处理周期性事件。osek标准规定每个报警必须分配一个计数器和一个任务,
27、这种分配是在操作系统启动之前静态定义的。计数器以某种条件递增,当计数器的值达到报警设定的数值时,报警就会触发。操作系统负责维护计数器,用户可以设置相对报警和绝对报警。2.8错误处理osek标准规定几乎所有的系统调用都返回一个错误状态类型,以表明在操作系统运行过程中是否出现了运行错误。另外,osek操作系统需支持两种错误模式:标准状态模式和扩展状态模式。2.9本章小结本章主要研究了osek操作系统支持的对象,并分析了osek操作系统的运行机制的各个方面:体系结构、任务管理、事件机制、资源管理、中断机制、报警机制和错误处理等。第三章 osek操作系统的设计与实现3.1 osek操作系统的总体设计一
28、般的嵌入式操作系统都分为处理器无关模块和处理器相关模块,如图3-1所示:图3-13.2任务管理3.2.1任务控制块tcbosek操作系统的每个任务都有一个任务控制块,其设计如程序3-1所示。程序3-1任务控制块tcbtypedef struct osek_tcb osek_stk*stackptr; osek_stk*stackbase; taskfunction taskentry; uint16 priority; uint8 tasktype; bool schedule; uint8 status; bool interresflag; struct internalrcb*inter
29、nalres; struct osek_rcb*resource; bool resourceflag; uint8 maxmultiactivation; uint8 multiactivation; eventmasktype eventwaiting; eventmasktype eventstate; struct osek_tcb*next;osek_tcb; 3.2.2就绪队列就绪队列采用以优先级为索引的指针数组,如图3-2所示:a)单任务/优先级 b)多任务/优先级图3-23.2.3内部资源的获得与释放由于内部资源对操作系统用户来说不可见,而且内部资源与任务管理紧密结合,因此将内
30、部资源划分到任务管理中,内部资源控制块见程序3-2。程序3-2内部资源控制块typedef struct internalrcb uint8 ceilpriority; uint8 savepriority; bool consumed;internalrcb;3.2.4任务级的任务切换任务的切换其实就是首先将旧任务的上下文保存起来,以便能在断点处恢复该任务,然后将新任务的上下文恢复到处理器中,开始执行新任务。本设计中,与处理器相关的寄存器信息需保存在任务的栈上。任务切换的过程如图3-3所示,设堆栈方向为向下增长,r1到r4为通用寄存器,sp为栈指针寄存器,pc为程序计数器,psw为处理器状态
31、字。图3-33.2.5任务调度osek操作系统允许操作系统显式启动调度程序,即用户可调用schedule系统调用。调度实现如算法3-1所示,该系统调用禁止占有资源的任务和中断服务程序调用。算法3-1系统调用schedule(void)输入:void输出:错误码 进入临界区; if(当前任务currenttask可抢占而且没有内部资源) 离开临界区; 无错返回到currenttask; 离开临界区; 进入临界区; 查询优先级最高的就绪任务hightask; if(currenttask拥有内部资源) if(hightask的优先级小于或等于currenttask的原优先级) 离开临界区; 无错返
32、回到currenttask; else 释放内部资源; goto l1; else if(hightask的优先级大于currenttask的优先级) l1: if(hightask拥有内部资源且内部资源空闲) 获得内部资源; 任务切换到hightask; 离开临界区;3.2.6任务的激活激活任务系统调用使得任务从挂起状态进入就绪状态,操作系统负责保证任务从第一条指令开始执行,若不是在中断服务程序中调用该系统调用且当前任务可抢占,将引发调度。激活系统调用的实现如算法3-2所示。算法3-2系统调用activatetask(tasktype taskid)输入:任务标识taskid输出:错误码 进
33、入临界区; if(taskid是处于非挂起状态的基本任务且最大多重激活数大于0, 且多重激活数小于最大多重激活数) 多重激活数增1; 离开临界区; 无错误码返回; taskid状态设置为就绪; taskid进入就绪队列; if(taskid类型为扩展任务) 清除taskid的事件; 初始化taskid的任务栈; 栈指针保存到taskid的tcb中; 离开临界区; 进入临界区; if(当前处在中断级) 离开临界区; 无错误码返回; 离开临界区; 进入临界区; if(当前任务currenttask可抢占) 查询最高优先级就绪任务hightask; if(hightask优先级大于currentta
34、sk优先级) if(且hightask拥有内部资源且内部资源空闲) 获得内部资源; 任务切换到hightask; 离开临界区;3.2.7任务的终止终止任务系统调用使任务由运行状态转为挂起状态,osek操作系统的任何任务都必须调用该调用终止自身,其实现见算法3-3。算法3-3系统调用terminatetask(void)输入:无输出:错误码,成功执行后将不再返回 进入临界区; 当前任务currenttask置为挂起; currenttask脱离就绪队列; if(拥有内部资源) 释放内部资源; if(currenttask为基本任务且多重激活数大于1) 多重激活数减1; currenttask置为
35、就绪; currenttask进入就绪队列; 离开临界区; 进入临界区; 查询最高优先级就绪任务hightask; if(hightask拥有内部资源且内部资源空闲) 获得内部资源; if(currenttask为基本任务且多重激活数大于1) 初始化currenttask栈; 栈指针保存到currenttask的tcb中; 任务切换到hightask; 离开临界区;3.2.8空闲任务在四个符合类的实现中,添加了空闲任务,没有其他任务运行时osek操作系统将运行空闲任务。空闲任务只是简单的死循环,在空闲任务运行时,系统中断是开着的,当有外部中断到来时,将转入相应中断服务程序执行,用户可以通过在中
36、断服务程序中激活任务或者设置事件来启动其他任务的运行。3.3事件机制设置事件的实现如算法3-4所示。其作用是设置参数任务taskid的mask事件,如果任务taskid正在等待设置事件mask中的某个事件,则任务转入就绪状态,若当前任务可抢占,则会引发操作系统的调度。算法3-4系统调用setevent(tasktype taskid,eventmasktype mask)输入:任务表示,事件标识输出:错误码 进入临界区; 设置taskid的mask事件; if(taskid正在等待mask的某个事件且taskid处于等待状态) taskid转为就绪状态; taskid进入就绪队列; 离开临界区
37、; 进入临界区; if(当前处在中断级) 离开临界区; 无错误码返回; 离开临界区; 进入临界区; if(当前任务currenttask可抢占) 查询最高优先级就绪任务hightask; if(hightask优先级大于currenttask优先级) if(hightask拥有内部资源且内部资源空闲) 获得内部资源; 任务切换到hightask; 离开临界区;等待事件的实现见算法3-5,其作用是当前任务等待参数mask中指定的事件,若mask没有被设置事件,则当前任务进入等待状态,则将引发操作系统的调度。基本任务和中断服务程序不允许调用等待事件。算法3-5等待事件waitevent(event
38、masktype mask)输入:任务等待的事件标识输出:错误码 进入临界区; if(mask中有某个事件被设置) 离开临界区; 无错误码返回; 将等待的事件mask保存到当前任务currenttask的tcb中; if(currenttask拥有内部资源) 释放内部资源; currenttask脱离就绪队列; currenttask转为等待状态; 离开临界区; 进入临界区; 寻找最高优先级就绪任务hightask; if(hightask拥有内部资源且内部空闲) 获得内部资源; 任务切换到hightask; 离开临界区;3.4资源管理在系统生成时,操作系统用户配置资源的属性,必须保证资源的优
39、先级高于所有要使用该资源的任务的优先级。资源控制块的设计如程序3-3所示。程序3-5资源控制块typedef struct osek_rcb uint8 ceilpriority; uint8 savepriority; bool consumed; struct osek_tcb*owner; struct osek_rcb*next;osek_rcb;申请资源的实现如算法3-6所示。算法3-6申请资源getresource(resourcetype resourceid)输入:资源标识输出:错误码 进入临界区; if(资源被占用) 离开临界区; 返回错误码; 将当前任务currenttas
40、k标识为资源的拥有者; 标识资源占用; 离开临界区; 进入临界区; 将资源链接进currenttask的资源链表; currenttask的优先级保存到resourceid中; currenttask优先级升为resourceid的天花板优先级; currenttask脱离原就绪队列; currenttask在resourid的天花板优先级上就绪; 离开临界区;释放资源相当于对互斥资源或代码临界区的解锁,释放资源后若当前任务可抢占则将会引发操作系统的调度,其实现如算法3-7所示。算法3-7释放资源releaseresource(resourcetype resourceid)输入:资源标识输出
41、:错误码 进入临界区; 将资源resourceid从当前任务currenttask的链表解下; 标识资源空闲; currenttask脱离就绪队列; currenttask的优先级降为原优先级; currenttask在原优先级上就绪; 离开临界区; 进入临界区; if(当前任务currenttask可抢占) 查询优先级最高的就绪任务hightask; if(hightask优先级大于currenttask的优先级) if(hightask拥有内部资源且内部资源空闲) 获得内部资源; 任务切换到hightask; 离开临界区;3.5中断机制osek操作系统支持两类中断服务程序,由于1类中断服务
42、程序不调用系统调用,而2类中断服务程序可以调用系统调用。其实现如算法3-8和3-9所示,其中enterisr在进入中断服务程序之前调用,此时系统中断关闭,故不必考虑临界区问题。算法3-8离开中断通知内核leaveisr(void)输入:无输出:无 进入临界区; 中断嵌套层数减1; if(如果中断嵌套层数为0且当前任务currenttask可抢占) 查询最高优先级就绪任务hightask; if(hightask的优先级大于currenttask的优先级) if(hightask拥有内部资源且内部资源空闲) 获得内部资源; 任务切换到hightask; 离开临界区;算法3-9进入中断通知内核en
43、terisr(void)中断嵌套层数加1;3.6报警机制osek操作系统用报警来处理定时事件,每个报警被静态指定一个计数器和一个任务。计数器和报警控制块实现分别见程序3-4和3-5。程序3-4计数器控制块typedef struct osek_ccb ticktype maxvalue; ticktype ticksperbase; ticktype mincycle; uint32 nowvalue; struct osek_acb*alarmreadylist;osek_ccb;程序3-5报警控制块typedef struct osek_acb uint32 inspirevalue; u
44、int32 cycle; eventmasktype event; uint8 status; uint8 actiontype; bool inspired; struct osek_ccb*counter; osek_tcb*taskid; struct osek_acb*prevalarm; struct osek_acb*nextalarm;osek_acb;计数器的关键操作是递增计数器,它是处理报警的关键操作,其实现如算法3-10所示。算法3-10计数器递增函数inccounter(counter*counter)输入:计数器指针输出:无 进入临界区; counter计数器递增; w
45、hile(计数器就绪队列非空且报警就绪链表头上的报警值等于计数 器值) temp=counter的报警就绪队列链表头; switch(temp的动作类型) case:激活任务 激活与报警相关的任务;break; case:设置事件 设置与报警相关任务的事件; 让链表头指向下一个报警; if(temp为周期报警) 修改报警触发时间; 将temp插入counter的报警就绪链表; 3.7本章小结本章首先进行osek操作系统的总体设计和模块划分,然后设计和实现了任务管理、事件机制、资源管理、中断机制、报警机制的关键数据结构和关键系统调用。因为其它系统调用和错误处理部分的实现较简单,故本章没有赘述。第
46、四章osek操作系统优化技术研究4.1任务切换的优化任务切换可以适用于所有任务级的调度点:终止任务、激活任务、等待事件、设置事件、释放资源、显式调度等等。但是,由于终止任务时,当前任务退出运行,当该任务再次被激活时,其上下文环境会被重新初始化,因此在终止任务时,保存任务信息既没有意义,又浪费了宝贵的处理器时间。终止任务的任务切换省去保存旧任务的动作。这种机制的好处就是提高了终止任务时的任务切换速度,却增加了代码。4.2事件机制的增强功能当扩展任务等待事件时,若等待的多个事件中的任何一个被设置则该扩展任务可继续运行;处于等待状态的任务任何一个事件被设置,该任务都会进入就绪状态。这就导致了如果想要
47、同时等待多个事件就要多次调用等待事件系统调用,处于等待状态的任务需要多个事件。同时被设置才具备就绪条件的目的难以达到。因此,有必要为osek操作系统添加等待多个事件系统调用,虽然在车载条件下不一定能用到,但其他复杂条件下很有可能用到,毕竟osek操作系统并不只是一个仅用于汽车的操作系统。支持等待多个事件首先要在任务tcb中加一个属性waittype,表明任务的等待类型:等待所有事件、等待任何事件,在等待事件waitevent系统调用中需置其为等待任何事件。等待多个事件系统调用的实现如算法4-1所示。此系统调用只能用在eccx符合类中,且禁止在中断级和占有资源的任务调用,若等待事件未被全设置,则
48、引发操作系统调度。算法4-1系统调用waitallevent(eventmasktype mask)输入:等待的事件掩码输出:错误码进入临界区;if(当前任务currenttask的mask事件全部被设置)离开临界区;无错误码返回;将mask放入currenttask的tcb中;置等待类型为为等待所有事件;currenttask变为等待状态;currenttask脱离就绪队列;if(currenttask拥有内部资源)释放内部资源;离开临界区;进入临界区;查询最高优先级的就绪任务hightask;if(hightask拥有内部资源且内部资源可用)获得内部资源;任务切换到hightask;离开临界区;4.3中断的优化一般的操作系统内核都运行在当前进程/任务的上下文环境中,比如linux,c/os-ii在80x86上的移植等。对一般嵌入式系统的任务来说,中断后的过程都会发生在每个任务的栈上,因此每个任务都要预留出较多的支持嵌套中断的栈空间以防任务栈的越界造成整个系统的崩溃,这就造成较多内存资源的浪费。因此有必要给所有的中断提供一个单独的栈空间,以减少整个系统需要的内存。为了支持中断栈,刚进入中断服务程序时,需由中断服务程序载入单独中断栈,在离开中断时,若被中断任务可抢占,则调度程序调度优先级最高的就绪任务,否则继续执行被中断任务。算法4-2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业生涯规划的认识
- 2024年辐射剂量监测仪项目合作计划书
- 2023年湖州德清县卫生健康系统引进高层次医疗卫生人才笔试真题
- 2023年安徽省水电有限责任公司引进笔试真题
- 物业项目经理聘用合同范本
- 家装室内门销售合同范本
- 小型租赁合同范本
- 盐城工学院《粉体工程及设备》2023-2024学年第一学期期末试卷
- 盐城工学院《纺纱工程》2022-2023学年第一学期期末试卷
- 盐城工学院《Introduction to Materials1》2021-2022学年第一学期期末试卷
- 中药饮片处方点评表
- 《节能监察的概念及其作用》
- 综合布线系统竣工验收表
- 人教版《生命.生态.安全》六年级上册全册教案
- 蔬菜会员卡策划营销推广方案多篇
- 导管滑脱应急预案及处理流程
- (精选word)三对三篮球比赛记录表
- DB32T 3921-2020 居住建筑浮筑楼板保温隔声工程技术规程
- 京东考试答案
- 尿道损伤(教学课件)
- 大型火力发电厂专业词汇中英文翻译大全
评论
0/150
提交评论