




已阅读5页,还剩64页未读, 继续免费阅读
(计算机系统结构专业论文)实时操作系统在雷达信号处理分系统中的应用.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要,本文结合v x w o r k s 和pc o s 1 1 这两种实时操作系统,尝试对r 1 0 s 内核运作机制做深入研究,重点阐述构造一个实时内核所必需的多任务环境和任务间通信机制,以及与此密切相关的系统时钟管理。在此基础上,本文结合一个基于v x w o r k s的具体应用,分析了实时操作系统应用中经常要面对的一些问题,包括系统引导过程、中断应用设计、网络编程以及设备驱动程序的编写。由于软硬件的相关性,本文同时也对p c 兼容体系的硬件资源有较多介绍,如可编程中断控制器、系统时钟、p c i 总线及接口芯片,体现了嵌入式应用软硬件结合的突出特点。全文采用理论结合实践的方式进行组织,有助于开发人员在了解r t o s 内核运作机制的基础上更加有效地使用r t o s 。关键词:实时操作系统v x w o r k spc o s i ia b s t r a c tc o m b i n i n gv x w o r k sa n d z c o s i it h e s et w or t o s ,t h i sp a p e rt r yt os t u d yt h eo p e r a t i n gp r i n c i p l eo far e a lt i m ek e r n e l a se s s e n t i a li n g r e d i e n t so fak e r n e l ,m u l t i t a s ke n t i r o n m e n t ,t h ec o m m u n i c a t i o nb e t w e e nt a s k sa n ds y s t e mt i m e rm a n a g e m e n ta r ce x p a t i a t e di nt h i sp a p e r t h e n ,a l la p p l i c a t i o nb a s e do nv x w o r k si sp r e s e n t e dt oa n a l y z es o r e ef a m i l i a rp r o b l e m si nr t o sa p p l i c a t i o n sw h i c hc o n s i s to ft h ep r o c e s st ob o o tas y s t e m ,i n t e r r u p ta p p l i c a t i o nd e s i g n i n g ,n e t w o r kp r o g r a m m i n ga n dd e v i c ed r i v e rd e s i g n i n g d u et or e l a t i o n sb e t w e e nh a r d w a r ea n ds o f t w a r e ,t h i sp a p e ra l s oi n t r o d u c e sm u c hk n o w l e d g ea b o u th a r d w a r er e s o u r c e so fp cc o m p a t i b l es y s t e m ,s u c ha sp r o g r a m m a b l ei n t e r r u p tc o n t r o l l e r , s y s t e mt i m e r , p c ib u sa n dr e l a t e di n t e r f a c ec h i p :b o t ht h e o r ya n dp r a c t i c ea r ei n t r o d u c e di nt h i sp a p e ra n dt h eg o a lo ft h i sp a p e ri st oh e l pd e v e l o p e r st ok n o wm o r ea b o u tt h er e a lt i m ek e r n e la n dm a k eu s eo fr t o sm o r ee f f i c i e n t l y k e y w o r d :r t o sv x w o r k s # c o s 一1 iy6 9 5 8 3 t创新性声明本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中做了明确的说明并表示了谢意。申请学位论文与资料若有不实之处,本人承担一切相关责任。本人签名:习文牟心日期l 0 0 3 , i 、2 0关于论文使用授权的说明本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究生在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。本人保证毕业离校后,发表论文或使用论文工作成果时署名单位仍然为西安电子科技大学。学校有权保留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。( 保密的论文在解密后遵守此规定)本学位论文属于机密,在一年解密后适用本授权书。本人签名:状多h日期2 0 畋、2 0导师签名:盘f 纠日期! ! :三。茎第一章绪沦第一章绪论1 1 嵌入式技术的发展状况随着计算与通信的融合,计算的无处不在和多媒体信息随手可得的信息化发展大趋势日益明朗,嵌入式系统近年来得到了前所未有的蓬勃发展。嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。在计算机技术对其它行业进行全面渗透的大趋势下,相比传统的计算机分类方法,一种新兴的以应用为中心的分类方法能够更好地反映这种发展变化。这种分类方法按照计算机面向的应用领域将计算机分为嵌入式计算机和通用计算机。通用计算机具有计算机的标准形态,通过安装不同的应用软件,以类似面目出现并应用在社会的各个方面,其典型产品为p c ;而嵌入式计算机则是以嵌入式系统的形式隐藏在各种装置、产品和系统中。近年来,随着半导体技术的飞速发展,3 2 位处理器越来越多地出现在嵌入式应用中。面对极大丰富的系统资源和日趋复杂的应用需求,传统的前后台软件设计模式已显得力不从心,设计师们在自己的嵌入式应用中更多地采用基于嵌入式操作系统的开发模式。从1 9 8 1 年世界上第1 个商业嵌入式实时内核( v r t x 3 2 ) 的诞生,到今天r t o s ( r e a lt i m eo p e r a t i n gs y s t e m ) 已经有2 0 余年的发展历史。如今,3 2 位处理器的广泛使用已经确立了r t o s 在嵌入式系统设计中的主导地位,随着s o c 技术的蓬勃发展,在未来的嵌入式应用中,r t o s 将扮演更为重要的角色。1 2 本课题的主要任务雷达系统由于其特殊的应用领域和自身的工作原理,对于数据处理的实时性有着很高的要求,因此,近年来,实时操作系统正在加速进入这一应用领域,而嵌入式实时操作系统v x w o r k s 也正以其良好的可靠性和卓越的实时性在这一领域逐渐获得广泛应用。本课题的主要任务是为某型号雷达信号处理分系统设计基于v x w o r k s 的通讯控制软件,并开发相应的调试软件,协助硬件设计人员完成系统调试任务。在完成软件设计任务的同时,本文还结合v x w o r k s 和uc o s 一】i 这两种实时操作系统,尝试对r t o s 内核运作t j l 带 j 做深入研究,以期把握其本质,在将来的学习和 二作中,对于其它类型的r t o s 也能够触类旁通。艾时嫌作系统垂二雷达信号处理分系统中的魔州第二章实时操作系统内核分析2 1 实时操作系统简介2 1 1 实时系统的引入在操作系统的发展过程中,当分时系统产生后,虽然己能获得较为令人满意的资源利用率和响应时间,从而使计算机的应用范围日益扩大,但它仍然不能满足以下两个领域的需要:( 1 ) 实时控制当把计算机用于生产过程的控制,以形成以计算机为中心的控制系统时,如工业生产过程控制,武器的自动控制系统,通常把要求进行实时控制的系统统称为实时控制系统。( 2 ) 实时信息处理通常,我们把要求对信息进行实时处理的系统,称为实时信息处理系统。该系统由一台或多台主机通过通信线路连接成百上千个远程终端,计算机接收从远程终端发来的服务请求,根据用户提出的问题,对信息进行检索和处理,并在限定的时间内为用户做出正确的回答。我们把实时控制系统和实时信息处理系统统称为实时系统。实时系统被定义为“那些正确性不仅取决于计算的逻辑结果,也取决于产生结果所花费的时间的系统”。这意味着实时系统必须在一个可预测可保证的时间段内做出对外部事件的反应,可预测性是实时系统的本质特性。2 1 2 实时操作系统与分时操作系统的比较分时操作系统的基本设计原则是:尽量缩短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务。由此可以看出,分时操作系统注重平均表现性能,不注重个体表现性能。也就是说对于整个系统来说,注重所有任务的平均响应时间而不关心单个任务的响应时间,对于某个单个任务来说,注重多次执行的平均响应时间而不关心某次特定执行的响应时间。分时操作系统中采用的很多策略和技巧都体现出了这种设计原则,如虚存管理机制中由于采用了l r u ( l e a s tr e c e n t l yu s e d ) 等页面置换算法,使得大部分的访存需求能够快速地通过物理内存完成,只有很小一部分的访存需求需要通过调页完成,从总体上来看,平均访存时问与不采用虚存技术相比没有很大的增加,同时又获得了虚存空间可以远大于物理内存容量等好处,因此虚存技术在分时操作系统中得到了十分广泛的应用。类似的例子还有很多,由此可见,这种注重平均表现,即统计型表现特性的设计原则的影响是十分深远的。第二草实时操作系统内核分_ l :r |!而对于实r 、:| 操作系统,它除了要满足应用的功能需求以外,更重要的是还要满足应用提出的实时性要求。因此,实时操作系统所遵循的最重要的设计原则是:采用各种算法和策略,始终保证系统行为的可预测性。可预测性是指在一个特定环境( 硬件与软件平台) 下,一个实时应用是否能够满足设计要求的预先估计,它体现实时应用的最本质特性。f 因为如此,与分时操作系统不同,实时操作系统注重的不是系统的平均表现,而是要求每个实时任务在最坏情况下都要满足其实时性要求,也就是说,实时操作系统注重的是个体表现,更准确地讲是个体最坏情况表现。举例来说,如果实时操作系统采用标准的虚存技术,虽然大部分的访存需求能够快速地通过物理内存完成,但是最坏情况下却是每次访存都需要调页,这显然会极大地影响系统的实对性。另外,页面置换算法决定的该过程的不可预测性也是实时操作系统无法接受的。因此,虽然虚拟内存管理机制在分时系统中被广泛应用,它却并不符合实时系统的设计标准。由于实时操作系统与分时操作系统的基本设计原则差别很大,因此在很多资源调度策略的选择上以及操作系统实现的方法上两者都具有较大的差异。2 1 3v x w o r k s 和uc o s i i 简介v x w o r k s 是美国w i n dr i v e rs y s t e m 公司( 风河公司) 推出的一个运行在目标机上的高性能、可裁减的嵌入式实时操作系统。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中。v x w o r k s 是一种功能强大而且比较复杂的操作系统,包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几个部分。v x w o r k s只占用很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。采用b s p 技术尽可能地屏蔽了不同c p u 之间的底层差异,在各种c p u 平台上提供了统一的编程接口和一致的运行特性,应用程序员可以将尽可能多的精力放在应用程序本身,而不必再去关心系统资源的管理。uc o s i i 是一个完整的,可移植、固化、裁剪的抢先式实时多任务内核。它的源代码公开,结构清晰明了,而且大部分源代码都是用大多数编译器都支持的a n s ic 语言编写,只有很少的一部分与微处理器相关的代码是用犯编语言编写。这给我们学习和理解内核代码带来了很大的方便,也使得内核移植工作得到最大程度的简化。经过移植,“c o s i i 可供不同架构的微处理器使用,至今,从8位到6 4 位,pc o s i i 已在超过4 0 神不同架构的微处理器上运行。本课题以v x w o r k s 为开发平台,因此v x w o r k s 是本文的主要研究对象,但是它作为一种商业内核,源代码难以获得,不便于对r t o s 内核做深入研究。与此相反,uc o s i i 内核源码公开,且小巧、高效、可靠,是研究r t o s 内核的极好范例。因此,本文尝试结合v x w o r k s 和uc o s l i 这两种实时操作系统,研究r t o s实时搛作系统扫一雷达信号处理分系统中的府州的应t j 与其内核运作机制。主要以c o s i i 为范例分折r t o s 内核运作机制,实际上,在内核运作的原理方面,很多r t o s 都是相通的;对于v x w o r k s ,本文主要侧重于研究以它为平台的具体应用,对其内核也会做一定分析。2 1 4 层次结构的起点内核现代o s 广泛采用层次式结构,这些层次可以看成为一个倒爱的金字塔,每一层都建立在较低层的功能之上。金字塔的最低层是内核,内核是计算机硬件的第一层扩充软件,它仅提供构造操作系统其他部分所需的最小操作集。在实时操作系统v x w o r k s 和uc o s 1 1 中,内核仅提供多任务环境与任务间通信机制,这已经足够支持实时操作系统在较高层次提供更为丰富的功能。本章将深入分析r t o s内核运作机制,包括多任务与任务间通信机制的实现。作为多任务环境的必要组成部分,时钟管理也将是本章的研究内容之一。2 2 任务管理2 2 1 多任务环境概述多任务和任务间通信是现代实时操作系统的基石。一个多任务的环境允许将实时应用构造成一套独立的任务集合,每个任务拥有各自的执行线程和自己的系统资源集合,完成不同的功能;任务间通信机制可以实现多任务问的通信、同步与互斥,使多任务共同合作来实现整个系统的功能。多任务和任务间通信使得应用可以有效地模拟多样的、离散的真实世界中的各种事件。系统启动后,经过必要的初始化过程进入多任务环境。多任务环境中最基本的执行线程是任务和中断。任务一般是无限循环执行的线程,它由操作系统内核调度执行。所谓的操作系统隐藏在各任务和中断背后,在系统运行时,并不以独立的形式存在,没有自己的执行线程,它只是在系统时钟中断或系统调用发生时,爿+ 会出面协调任务的运行。而中断处理在某些方面超出了操作系统的管理范围,它由外部硬件信号触发,比所有任务都优先执行。中断处理以外剩余的c p u 时间,由各任务依据优先级设置、资源分配和执行流程来共同分享。本节主要研究r t o s中的任务管理,在3 2 3 节中将会以v x w o r k s 为例对r t o s 中的中断应用设计作详细分析。2 2 2 多任务的实现任务是一个动态的抽象对象,可在运行时创建和删除,是多任务环境中最基本的执行单元。每个任务在系统内存中的表现形式,除了有驻留在r o m 或r a m 中的二进制代码外,还对应组数据结构:任务控制块 t c b 和任务栈。任务控制块与任务栈是实现多任务环境的核心数据结构,在uc o s i i 中,各任务的任务控制第二章实时擞仵系统内核分析块j 任务栈问的相互关系如图2 1 所示,这里假设系统中只存在两个任务。o s t c b l i s tn u l l任务1 的t c b任务2 的t c b图21pc o s 1 1 中的任务控制块与任务栈2 2 2 1 任务控制块在l - tc o s i i 中,对于每个创建的任务。内核都会为它从t c b 缓冲池中分配一个t c b ,并用它来表示和控铡该任务。t c b 缓冲池在u c o s i i h 中被定义,如程序清单2 1 所示。程亭清单2 1t c b 缓;串溘的定义0 s j c bo s t c b t b l 0 s _ m a x j a s k s + o s n - s y s t a s k s :序o s _ m a x _ t a s k s :最大的用户任务数 十0 s _ n _ s y s t a s k s :系统任务数 在o s i n i t 函数( 位于o s o r e c 文件) 中。t c b 缓冲池被初始化为单链表形式并以o s t c b f r e e l i s t 指向该缓冲池,如程序清单2 2 所示。程亭清单2 ,2 代b 缓冲池的初始纯!实时操作系统在雷达信号处理分系统中的麻川t y p e d e fs t r u c to ss t ko st c b车o s t c b s t k p t r# i fo st a s kc r e a t ee x te n 0v o i d* o s t c b e x t p t r :o ss t k 0 s t c b s t k b o t t o mi n t 3 2 uo s t c b s t k si z e :i n t l 6 uo s t c b o p t :i n t l 6 uo s t c b i d :# e n d i fs t r u c to s t c b * o s t c b n e x ts t r u c to st c b * o s t c b p r e v# i f ( ( o sq e n 0 ) ( o s _ m a x _ q s 0 ) ) ll ( o s _ m b o x _ e n o ) l ( o s _ s e m _ e n o )( 0 s 一删t e x e n 0 )0 s e v e n t o s t c b e v e n t p t r :# e n d i f# i f ( ( o s _ q - e n 0 ) ( o s _ m a x _ q s 0 ) ) li ( o s _ m b o x e n 0 )v o i d* o s t c b m s g :# e n d i f# i f ( o s v e r s i o n = 2 5 1 ) ( o s f l a g _ e n 0 ) ( o sm a x f l a g s 0 )# i f0 st a s kd e le n 0o s f l a g n o d e * o s t c b f l a g n o d e :# e n d i fo s f l a g so s t c b f l a g s r d y :# e n d j fi n t l 6 ui n t 8 ui n t 8 ui n t 8 ui n t 8 ui n t 8 ui n t 8 uo s t c b d l y :o s t c b s t a to s t c b p r i 0o s t c b x :o s t c b y :o s t c b b it xo s t c b b it y# i 1 1o st a s kd e le n 0如痢一章实时操作系统内核分析b ( ) o i j e a x# e n d i fo st c b下面对o s t c b 数据结构中的若干数据项加以说明:o s t c b s t k p t r ,o s t c b s t k b o t t o m 和o s t e b s t k s i z e :这三个数据项用来描述任务堆栈。uc o s 一1 i 中每个任务有自己的堆栈,堆栈的大小由程序员设定,允许各不相同。有些商业内核要求所有任务堆栈的容量都一样,这种限制浪费了r a m ,因为当各任务需要的栈空间不同时,也得按任务中预期栈容量需求最多的来分配栈空间。o s t c b s t k p t r 是指向任务栈栈顶的指针:o s t c b s t k b o t t o m 是指向任务栈栈底的指针,如果微处理器的栈指针是递减的,即栈存储器从高地址向低地址方向分配,则o s t c b s t k b o t t o m 指向栈空间的最低地址,类似地,如果微处理器的堆栈是从低地址向高地址递增的,则o s t c b s t k b o t t o m 指向任务可以使用的堆栈空间的最高地址;o s t c b s t k s i z e 表示栈中的存储单元数,它等于用字节表示的栈容量除以栈的入口宽度。o s t c b s t k b o t t o m 和o s t c b s t k s i z e 主要用于支持栈检验功能( 在函数o s t a s k s t k c h k 0 中实现) ,即确定一任务实际需要的栈空间,从而避免为任务分配过多的栈空间,减少应用程序所需的r a y l 数量。栈检验功能实现的基本步骤如下,其原理如图2 2 所示,这里假设栈空间由高地址向低地址方向分配。 首先将栈空间全部填充为0 。 然后让应用程序运行足够长的时间,以经历最坏的堆栈使用情况。 实际使用堆栈空间大小= 堆栈总容量一从堆栈入口处开始存储0 的连续内存空间。j0 0 0 0空闲的堆栈空间堆栈增长曾到0 0 0 0达的最低地址牟0 s t c 既堆栈指针当前位置熬i 堆栈增长方向一初始化栈顶1高地址内存圈22uc o si i 的堆栈榆验o s t c b e x t p t r :指向用户定义的任务控制块扩展。通过此数据项用户可以扩展任务控制块,而不必修改pc o s 一1 1 的源代码。作为个简单的例子,我们可以在任实时操作系统r :蔷j 厶信号处理分系统中的麻j务控制块扩展中也录一个i o 地址,每当任务切换时向此地址写数据,这样就j 。以在示波器上观察到任务的切换。深入使用任务控制块扩展,可以使uc o si i 内核功能得以扩展。o s t c b o p t :把“选择项”传给函数o s t a s k c r e a t e e x t 0 。只有当用户将o sc f g h文件中的o s t a s k c r e a t e e x t e n 设为1 时,这个变量才有效。uc o s l i 目前只支持3 个选择项:o s t a s k o p t s t k c h k ,o s t a s k o p t s t k c l r 和o s t a s k o p t s a v e - f p 。ost a s k o p t s t k c h k 用于支持栈检验功能。它告知o s t a s k c r e a t e e x t0 ,在任务建立时,应当支持任务栈检验功能。默认情况下uc o s i i 不会支持堆栈检验,因为这需要占用宝贵的c p u 时间,除非用户明确指出要使用堆栈检验功能。内核不会不断地去检验任务堆栈的使用情况,仅当任务通过调用o s t a s k s t k c h k0 发出堆栈检验命令时,堆栈检验才会执行。 o s _ t a s k o p t s t k l r 也用于支持栈检验功能,它表示任务建立时,任务栈要清o ( 即将任务栈所有存储单元写为o ) ,只有当用户需要有栈检验功能时,才需将栈清0 。ost a s k o p t s a v e _ f p 通知o s t a s k c r e a t e e x t0 ,任务要做浮点数运算。如果微处理器有硬件的浮点协处理器,则建立的任务在做任务调度切换时,浮点寄存器的内容须保存。o s t c b d l y :当需要把任务延时若干时钟节拍时,或者需要把任务挂起一段时间以等待某事件的发生时,须用到这个变量。它保存的值是任务需要等待的时钟节拍数,如果这个变量变为0 ,则表示任务不再延时。操作系统都要管理一个外部时钟源,该时钟源会周期性地触发时钟节拍中断服务程序,uc o s i i 会在此中断服务程序中调用函数o s t i m e t i c k 0 ,该函数会遍历o s t c b l i s t 指向的任务链表,若某任务的t c b 中的o s t c b d i y 项不为0 ,它就会被减1 ,直至被减为0 ,此时o s t i m e t i c k0 会在就绪表中置相应位为1 ,标志该任务进入就绪态。o s t c b s t a t :任务的状态字。在任一给定的时刻,uc o s i i 中任务的状态一定是以下5 神状态之一。 睡眠态( d o r m a n t ) :指任务驻留在程序空间( r o m 或r a m ) ,还没有交给uc o s i i 来管理。把任务交给uc o s i i 管理是通过调用下述2 个函数之一:o s t a s k c r e s t e0 和o s t a s k c r e a t e e x t0 来实现的。这些调用把静态的二进制代码交给内核,并分配相应的t c b 和任务栈,构造成动态的任务;反之,2 个任务的t c b 和任务栈被回收后,便脱离了与内核的关系,其在内存中的存在第二章实时操作系统内核分析形式仅为静念的二进制代码,返回睡目民态可以通过调用o s t a s k d e l0 实现。就绪态( r e a d y ) :处于这种状态的任务除了等待c p u 外,不需要等待其他任何资源。任务一旦被建立,就进入了就绪态,等待被内核调度运行。任务的建立可以是在多任务环境启动之前,也可以是动态地由一个运行着的任务建立。运行态( r u n n i n g ) :调用o s s t a r t0 可以启动多任务环境。o s s t a r t0 函数只能在系统启动时被调用一次,该函数会运行用户初始化代码中已经建立的、进入就绪态的优先级最高的任务。最初的优先级最高的任务就这样进入了运行态。任何时刻只能有一个任务处于运行态,就绪的任务只有当所有优先级更高的任务都转为等待状态,或者是被删除了,才能进入运行态。 等待状态( w a i t i n g ) :正在运行的任务可能会由于两类原因而进入等待状态:将自身延迟一段时间或等待某一事件的发生。个任务可通过调用函数o s t i m e d l y 0 或o s t i m e d l y h m s m 0 进入等待状态,一直到函数中定义的延迟时间到,然后系统服务函数o s t i m e t i c k 0 会使该任务由等待状态进入就绪态。一个任务也可能需要等待某一事件的发生,可以通过调用以下函数之一实现:o s f l a g p e n d ( ) ,o s s e m p e n d ( ) ,o s m u t e x p e n d0 ,o s m b o x p e n d ( ) 或o s q p e n d0 ,如果某事件并未发生,调用上述函数的任务就将进入等待状态,直到等待的事件发生。中断服务态( i s rr u n n i n g ) :正在运行的任务是可以被中断的,除非中断已被关闭。一个任务被中断便是进入了中断服务态,它将被挂起,中断服务程序会控制c p u 的使用权。中断服务程序结束后,该任务或者是继续执行,或者是被一个新出现的优先级更高的任务抢占,自己则进入就绪态。o s t c b p r i o :任务的优先级。uc o s i i 可以管理多达6 4 个任务,每个任务对应一个优先级,各不相同,即共有6 4 个优先级,从0 到o s l o w e s tp r i o ( 在o sc f g u中定义为6 3 ) 。优先级号越低,任务的优先级则越高,即优先级号0 对应最高优先级。uc o s i i 建议用户不要使用最高4 个和最低4 个优先级,这些优先级被保留给系统任务,这样在系统中最多可以同时存在5 6 个用户任务。uc o s 1 1 中有一个数据结构称为优先级表,它在u c o s i i h 中被定义,如程序清单2 4 所示。程寄清单2 4 任务优先级表的定义t c b* o s t c b p r i o t b ll o sl o w e s tp r i o + 1 :对于某优先级s o m e p r i o ,当o s t c b p r i o t b l s o m e p r i o 存储一空指针时,表示该优先级尚未被占用,反之表示该优先级已被某任务占用,所以uc o s i i 中不允许多任务共享同一优先级,实际上,在目前版本的uc o s i i 中,任务的优先级号就是任务编号( i d ) 。1 0实时操作系统在雷达信号处理分系统中的应朋uc o s1 1 支持动态改变任务的优先级,具体来说,就是在程序运行期间,i u 。以调用函数0 s t a s k c h a n g e p r i o ( ) 修改任务的优先级。动态修改优先级可以模拟现实世界中优先于关系的变化。另外,它也是实现优先级继承,进而解决优先级反转问题的前提。o s t c b d e l r e q :一+ 个布尔量,用于表示该任务是否须删除。有时任务会占用些内存缓冲区或信号量一类的资源,这时,假如另一个任务试图删除该任务,这些被占用的资源就会因为没有被释放而丢失。显然,这种情况是任何嵌入式系统都无法接受的。为解决这个问题,pc o s i i 让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己。一个任务总是最了解自己的资源使用情况,所以把删除权交给被删除任务自身是合理的。uc o s i i 中发出删除任务请求的任务和打算被删除的任务都须调用o s t a s k d e l r e q0 函数。发出删除任务请求的任务的代码片断如程序清单2 5 所示。程亭清单2 5 请求秘除一个任务f o r ( :)$ 应用程序代码 i f ( 优先级t a s k j o d e l p r i o 对应的任务需要被删除)w h i l e ( o s t a s k d e l r e q ( t a s k t o d e l p r i o ) ! _ o s t a s k n o t - e x i s t ) ( 1 )o s t i m e d l y ( 1 ) :1肛应用程序代码 该任务在语句( 1 ) 中通过调用o s t a s k d e r e q0 发出删除任务请求,它所做的工作就是将优先级t a s k t o _ d e l p r i o 对应任务的t c b 中的o s t c b d e l r e q 置为删除标志o s t a s k d e l r e q 。语句( 1 ) 将循环执行直至该任务被删除。需要删除自己的任务的代码片断如程序清单2 6 所示。程守清单2 ,5 晌斑积酴请求f o r0胁应用程序代码 if ( o s t a s k d e l r e q ( o s p r i o _ s e l f ) 一o s f l a s k d e l r e q )( 1 )释放所有【i i 川的资源;释放所有动态分配的内存;第一章实时操作系统内核分析旦o s a s k d e l ( o sp r i 【js e l f ) ( 2 ) 府用群序代码 可见,该任务首先会在语句( 1 ) 中调用o s t a s k d e l r e q 0 测试自身是否需要被删除,若是,则会在释放自身占用的资源后,在语句( 2 ) 中调用o s t a s k d e l ( o s p r i o s e l f )删除自己。释放诸如动态分配的内存以及信号量等资源是容易理解的,我们现在来看一下任务删除对任务自身占据的内存区域有何影响。前文曾提及,每个任务在系统内存中的表现形式,除了有驻留在r o m 或r a m 中的二进制代码外,还对应一组数据结构:任务控制块 t c b 和任务栈。在任务删除后,二进制代码区不受影响,继续保留,只是不会再被操作系统调度;t c b 将被系统回收入t c b 缓冲池;至于任务栈,它是由用户负责分配,并将其地址指针在创建任务时作为参数传递给o s t a s k c r e a t e 0 或o s t a s k c r e a t e e x t 0 。因此,理应由用户负责回收,任务堆栈有静态分配和动态分配两种形式,只有当任务堆栈是动态分配内存空间时,用户才需要解决堆栈空间回收问题。v x w o r k s 作为一种商业性的实时内核,其t c b 的结构更为复杂,功能也更为强大,相应的数据结构w i n dt c b 在t a s k l i b h 中被定义。表2 1 列出了v x w o r k s中用于任务创建的函数调用。表2 iv x w o r k s 中的任务创建函数函数调用描述t a s k s p a w n ( )创建并激活一个新任务t a s k l n i t0初始化一个新任务t a s k a c t iv a t e0激活一个已初始化的任务t a s k s p a w n 0 为发起任务而分配的唯一资源是定位在系统内存中的一个特定大小的堆栈。这块内存中包含了任务控制块,剩余的内存空问作为任务堆栈。内存空间示意如图2 3 所示,其中p s t a c k b a s e 和p s t a c k e n d 均为t c b 中的域,分别孰内存高地址w i n dt c bp s t a c k b a s e任务栈:s t a c t图2 3v x w o tk s 中的t c b ;f i 任务栈实时操作系统在雷达信号处理分系毁中的应用用来存储栈的起始地址和结束地址。任务堆栈的每个字节用o x f j :填充,这科- 初始化填充主要用于支持任务堆栈检查函数c h e c k s t a c k 0 ,此函数的工作原理与1 1c o s i i 中的栈检验原理相类似。任务也可以先由t a s k l n i t 0 初始化,再使用t a s k a c t i v a t e 0 激活,与函数t a s k s p a w n 0 不同,这种组合允许将指定的内存区域作为t c b 和任务堆栈,这样用户就可以初始化一个静态的w i n d t c b 变量,或者是为了方便调试,把任务堆栈分配在指定位置。w i n d 内核共有2 5 6 个优先级,编号0 2 5 5 ,优先级o 最高,2 5 5 最低,多个任务可共用同一优先级。w i n d t c b 中可以用p r i o r i t y 和p r i n o r m a l 数据项分别保存任务的当前优先级和原始优先级,并且v x w o r k s 中任务的优先级可通过调用t a s k p r i o r i t y s e t ( ) 进行动态修改,在此基础上,w i n d 支持优先级继承,从而解决了优先级反转问题。w i n d t c b 中用s t a t u s 数据项来存储任务状态。v x w o r k s 中有5 种基本任务状态,在此基础上还有若干组合任务状态,各种可能的任务状态如表2 2 所示。表2 2v x w o r k s 中的任务状态状态符号描述运行( r u n n i n g )独占c p u ,正在运行就绪( r e a d y )仅需等待c p u 资源就可转入运行态阻塞( p e n d )任务由于等待某资源,如信号量,消息等而进入阻塞态睡眠( d e l a y )睡眠状态,一般指任务主动要求等待一段时间再执行挂起( s u s p e n d )处于挂起态的任务不能执行。这种状态主要用于调试,它不会约束任务的状态转换,仅仅约束任务的执行。d e l a y + s既处于睡眠又处于挂起的任务状态p e n d + s既处于阻塞又处于挂起的任务状态p e n d + t带有超时值处于阻塞的任务状态p e n d + s + t带有超时值处于阻塞又处于挂起的任务状态+ i继承优先级状态,优先级被暂时提升,+ i 可以和上面所有状态组合任务可以动态地从系统中删除,v x w o r k s 提供了用于删除任务和保护任务避免被删除的函数调用,如表2 3 。表2 3v x w o r k s 中的任务删除函数函数调用描述e x i t 0终止调用任务的执行,释放占用的内存( t c b 和任务栈) 。任务入口程序的返回将隐含调用e x i t 0 。t a s k d e i e t e0终止一个指定的任务,释放古用的内存( t c 8 和任务栈)t a s k s a f e0保护调用任务不被删除t a s k u n s a f e0解除任务删除保护第一章实时操作系统内核分析任务删除的一个基本原则是要确保不要在+ 个不合适的时刻删除任务,在任务被删除之前,该任务必须释放它所持有的所有资源。v x w o r k s 允许调用t a s k s a f e 0和t a s k u n s a f e 0 来防止非期望的任务删除操作,任务访问临界区时就需要这种保护。程序清单2 7 说明了如何使用t a s k s a f e 0 和t a s k u n s a f e 0 来防止非预期的任务删除操作。程序清单2 7 防止菲期望钓任务张除操作t a s k s a f e 0 :s e m t a k e ( s e m l d ,w a l tf o r e v e r ) :$ 等待信号量可用 a 临界区操作代码$ s e m g i v e ( s e m l d ) :$ 释放信号量。在此之前的任务删除操作将导致信号量不可用。 t a s k u n s a f e0 :为了支持嵌套的删除保护,系统中维护一个计数器,它跟踪调用t a s k s a f e ( ) 和t a s k u n s a f e0 的次数,仅当计数器为0 时允许删除操作。但是这种删除保护机制还不够灵活,例如任务动态分配了一块内存区域,并且在运行时始终要使用,就不能采用这种保护机制,这时我们可以考虑借鉴前文所述uc o s i i 的任务删除机制。另外我们还应当注意,和uc o s i i 一样,v x w o r k s 中的任务删除操作并不会影响任务的二进制代码区,只是该任务的代码不再受操作系统管理,不再参与任务调度。如果需要,我们可以通过调用t a s k s p a w n 0 将该代码区重新交给操作系统管理。2 2 2 2 任务调度任务调度是内核的主要职责之一,就是按照一定的规则决定该轮到哪个任务运行了,然后实现任务的上下文切换,把c p u 的使用权交给需要开始运行的任务。这里有两个要点,一是如何确定该哪个任务运行了,二是如何实现任务的上下文切换。uc o s 1 1 采用的调度法是优先级抢占方式的,它总是找出并运行进入就绪态的任务中优先级最高的任务,这一查找过程是通过就绪表实现的。就绪表数据结构在u c o s i i h 中被定义,它由两个部分组成:o s r d y g r p 和o s r d y t b l 。o s r d y t b l 中的每一位对应一个任务优先级,当该优先级的任务进入就绪态时,相应位被置位。优先级按大小分组,8 个优先级为一组,每一组对应o s r d y g r p 中的一位,若某组中有任务进入就绪态,则o s r d y g r p 中的相应位被置位,这个规则可简要描述为:当o s r d y t b l i 中的任何一位是1 时,o s r d y g r p 的第i 位置1 。o s r d y g r d 和o s r d y t b l 口之i 司的关系见图2 4 。1 4实时操作系统柱r 雷达信号处理分系统中的应刈o s r d y g po s r d y t b i 【o s l o ? e s fp r i o 8 + i 71 52 33 i3 94 75 56 361 42 23 03 84 65 46 251 32 l2 93 74 55 36 141 22 02 83 64 45 26 021 01 82 63 44 25 05 8191 72 53 34 14 95 7081 62 43 24 04 85 61 11 92 73 54 35 l5 9任务的优先级匝匝匹卫圈图24uc o s 1 1 的任务就绪表程序清单2 8 中的代码用于将任务放入就绪表。程守清单2 8 将优先级为醒i o 的任务故入就绪表o s r d y g r pl = o s m a p t b l p r i o 3 :o s r d y t b l p r i o 3 3i = o s m a p t b l p r i o o x 0 7 其中p r i o 是任务的优先级,应该注意到,p r i o 的3 5 位用于确定该优先级对应o s r d y t b l 数组的第几个元素,o 一2 位则用于确定对应此元素的第几位,如图2 4中所示。代码中用到的掩码数组o s m a p t b l 在o s - c o r e c 中定义,如表2 4 所示。表2 4 掩码数组o s m a p t h l 下标位掩码( 二进制)o0 0 0 0 0 0 0 110 0 0 0 0 0 1 020 0 0 0 0 1 0 030 0 0 0 1 0 0 040 0 0 1 0 0 0 050 0 1 0 0 0 0 060 1 0 0 0 0 0 071 0 0 0 0 0 0 0如果要使一个任务脱离就绪态,则用程序清单2 9 中的代码做求反处理。程亭演单2 9 使优先级为p r j o 的任务税离就绪态i f ( ( o s r d y t b l p r i o 3 - 、o s m a p t b l p r i o o x 0 7 ) = = 0 )o s r d y g r p = o s m a p t b l p r io 3 :以上代码将就绪任务表数组o s r d y t b l 中相应元素的相应位清0 :而对于o s r d y g r p ,只有当脱离就绪念的任务所在任务组中,全组任务没有一个进入就绪第二章实州操作系统内核分析态时,才将相应位清0 。也就是说,只有当o s r d y t b p r i o 3 中所有的位都是0 时,o s r d y g r p 的第( p r i 0 3 ) 位才清0 。为了找到进入就绪态的优先级最高的任务,并不需要从o s r d y t b l 0 开始扫描整个就绪任务表,只须查另外一张表,即优先级判定表o s u n m a p t b l 2 5 6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度海绵城市建设施工履约保证金合同
- 高三试卷:江苏省常州市2024-2025学年高三上学期期中质量调研数学试题答案
- 二零二五年度水力发电机工程设计与心得总结合同
- 二零二五版地毯产品绿色家居定制化采购合同
- 2025版楼板浇注材料环保认证与检测合同
- 早期阅读课件
- 二零二五版船舶行业外包工安全培训及管理服务协议
- 二零二五年度钢结构预制构件生产与施工承包合同样本
- 二零二五年度会所装修工程合同范本指南
- 二零二五年度车辆维修配件供应合同
- 铁总物资〔2015〕250号:中国铁路总公司物资采购异议处理办法
- GB/Z 42625-2023真空技术真空计用于分压力测量的四极质谱仪特性
- 人民医院心血管外科临床技术操作规范2023版
- 主要组织相容性复合体及其编码分子
- 助理工程师考试试题以及答案
- 送东阳马生序
- 2017年全国大学生数学建模A题
- 2023年专升本计算机题库含答案专升本计算机真题
- GB/T 1685-2008硫化橡胶或热塑性橡胶在常温和高温下压缩应力松弛的测定
- GB/T 16674.1-2016六角法兰面螺栓小系列
- 住宅项目景观工程施工策划(图文并茂)
评论
0/150
提交评论