vxworks653编程手册_第1页
vxworks653编程手册_第2页
vxworks653编程手册_第3页
vxworks653编程手册_第4页
vxworks653编程手册_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一 .VxWorks653 运行时系统1.1. 运行时层一个 vxworks653 模块由下面四层组成: core OS必需 partition 至少需要一个 (vThreads 或 COIL-based),每个都在一个分区的操作系统之中 APEX shared library ARINC 653 应用所需 POSIX shared library POSIX 应用所需1.1.1. Core OS 层核心操作系统提供服务给分区。缺省的,核心操作系统使用ARINC653规范中的时间抢占的调度(TPS)来调度分区。Vxworks653的核心操作系统还可以采用APPS调度策略在TPS调度的空闲时间内

2、调度优先级抢占调度( PPS)使能的分区。核心操作系统提供给每个VThreads 分区操作系统的服务包括:分区系统资源调度分区代表分区的操作系统执行trap 异常定义和强制分区边界装载分区使用端口和通道在分区间传递消息处理 I/O代表应用完成系统调用支持分区的调试监控分区和系统的健康1.1.2. vThreads层vThreads 分区操作系统在核心操作系统分配给该分区的时间内调度 vThreads 不直接与设备交互,而是通过核心操作系统的系统调用。vThreads 中的线程。1.1.3. APEX层构建在 vThreads 之上,遵循ARINC653规范,并且提供相应功能和API。1.1.4

3、. POSIX 层构建在 vThreads 之上,遵循用于实时扩展的POSIX标准( 1003.1b )。1.2. 装载和启动当目标板加电时,按照下面的步骤进行装载和启动初始的启动码装载核心操作系统,分区操作系统,共享库,以及应用核心操作系统初始化自身,启动它自己的子系统核心操作系统创建分区核心操作系统启动分区调度器,并且让应用初始化自身核心操作系统可以在初始化完成之后下载在线装载的应用程序到分区。之时装载到分区。应用可以在分区运行1.3. 运行时模型核心操作系统处理来自每个分区的系统调用,并且在运行系统调用前校验每个系统调用的语句。使用 vThreads 分区操作系统的应用拥有完全的vThr

4、eads 任务间通信机制。APEX库提供了遵循 ARINC653规范的分区管理, 进程管理以及时间管理; 为分区间通信提供了消息,通道,端口;为分区内通信提供缓冲区,黑板,信号量以及事件。端口映射允许在VxWorks653 模块之外通信。二 .开发 APEX 应用APEX是位于应用程序和支持 ARINC653规范的操作系统之间的 API。对于 VxWorks653,操作系统是 vThreads 分区操作系统和核心操作系统。 APEX给 vThreads 分区提供了时间、进程管理以及管理周期性和非周期性进程的能力。APEX提供如下服务:管理分区管理进程管理时间与其他分区通信(使用消息,端口和通道

5、)分区内的通信(使用缓冲区,黑板,信号量以及事件)监控健康2.1. 分区管理分区的管理包含分配分区内存以及依据ARINC653规范初始化分区。2.1.1. 分配分区内存每个分区的资源分配都定义在基于 XML 的配置和编译过程中,根据指定在该规范中的分区需求,为每个分区分配唯一的物理内存。 通过禁止对超过该分区的内存区域的写访问来确保内存分区。2.1.2. 初始化分区:冷和热启动冷启动:当 VxWorks653 模块加电并且创建分区时,使用冷启动分区操作模式。在冷启动模式下,分区对象被分配并且初始化。热启动: 热启动分区操作模式导致一个分区重新初始化或者由于遇到错误重新启动。动模式下,持久数据不

6、会重新初始化,分区代码也不会重新装载。在热启每个分区所使用的资源(如通道、进程、队列、信号量或事件等)在系统编译时指定。在分区的初始化阶段,创建分区所需的资源,然后分区进入NORMAL 模式。2.1.3. 分区属性分区属性定义在XML 配置文件中。固定的分区属性包括:标识符:定义在VxWorks653 模块上唯一的分区标识符。内存需求:分配给分区的物理内存周期:分区的激活周期。 用来确定核心操作系统的整个时间帧内的分区激活的运行时位置。持续时间:分区的每个周期内核心操作系统给予的处理器时间。关键级别:分区的RTCA/DO-178B认证级别。通信需求:分区与其他分区通信的通信通道分区健康监控表(

7、健康监控配置):健康监控器对于故障的动作指令。2.1.4. 获得分区状态GET_PARTITION_STATUS函数可以获得当前情况下的分区状态。type PARTITION_STATUS_TYPE is recordIDENTIFIER: PARTITION_ID_TYPE;PERIOD: SYSTEM_TIME_TYPE;DURATION: SYSTEM_TIME_TYPE;LOCK_LEVEL: LOCK_LEVEL_TYPE;OPERATING_MODE: OPERATING_MODE_TYPE;START_CONDITION : START_CONDITION_TYPE; end r

8、ecord;type OPERATING_MODE_TYPE is (IDLE, COLD_START, WARM_START, NORMAL); type START_CONDITION_TYPE is (NORMAL_START,PARTITION_RESTART,HM_MODULE_RESTART,HM_PARTITION_RESTART);Where:NORMAL_STARTPARTITION_RESTARTHM_MODULE_RESTARTis a normal power-up.is either due to COLD_START or WARM_START by the par

9、titionitself, through the SET_PARTITION_MODE service.is a recovery action taken at module level by the HM.HM_PARTITION_RESTART is a recovery action taken at partition level by the HM.2.1.5. 设置分区模式SET_PARTITION_MODE函数可以设置分区模式为 IDLE,COLD_START,WARM_START,NORMAL。其中IDLE 模式:分区关闭。 分区未被初始化,没有进程正在运行,但是分配给该分

10、区的时间窗口未被改变。COLD_START模式:分区重启使用冷启动初始化。WARM_START模式:分区重启使用热启动初始化。NORMAL 模式:激活的进程被调度。2.1.6. 控制分区中的抢占进程的 LOCK_PREEMPTION函数可以为分区中的抢占上锁。该函数增加了分区的锁级,使得进程不能在分区中重调度。当进程访问临界区时,或资源被同一分区中的多个进程共享时,这个能力十分重要。LOCK_PREEMPTION函数不会影响其他分区的调度。如果一个位于临界区的进程由于分区窗口结束而被中断时,当分区再次运行时仍然是该进程最先运行。UNLOCK_PREEMPTION函数可以解锁分区的抢占。这个函数

11、降低了分区的锁级,仅当锁级达到零时,进程的重调度才能恢复。2.1.7. 分区调度对于时间分区,ARINC653 提供了两级调度机制。在核心模块级,采用预先确定的基于时间窗的循环调度算法来调度各个分区,分区没有优先级。核心操作系统根据每个分区的周期与持续时间信息, 维护一个固定时间长度的主时间帧,该主时间帧的时间长度为所有分区周期的最小公倍数。 静态调度算法为每个分区生成该主时间帧内相应的分区调度窗口,每个分区调度窗口由从主时间帧开始的偏移和期待的持续时间来定义。分区的调度窗口事先定义在配置表中。 每个分区在其分区调度窗口内被激活并占用CPU,并保证每个分区在其调度窗口内运行时不被其他分区打断。

12、主时间帧在模块的运行期内周期性的重复,每个主时间帧中拥有相同的分区调度窗口执行次序。2.2. 进程管理APEX进程是包含在 APEX分区内的编程单元。 同一分区内的进程可以并发执行。 进程由可执行程序、数据和栈、程序计数器、栈指针以及优先级期限组成。进程管理包含创建进程、改变进程当前优先级、得到进程的当前状态、得到进程和恢复进程、停止和启动进程、控制抢占等函数。ID、挂起2.2.1. 进程类型周期性进程非周期性进程2.2.2. 进程调度在分区级,调度单元是APEX进程。每个进程拥有优先级,调度算法是优先级抢占的。分区级操作系统总是选择处于就绪状态且具有最高优先级的进程获得处理器资源。如果多个进

13、程拥有相同的优先级,则分区操作系统选择就绪队列中第一个进程。进程将控制处理器资源直到另一个进程重调度事件发生。2.2.3. 进程状态变迁2.3. 时间管理2.3.1. 调度分区见 2.1.7 分区调度2.3.2. 系统时钟时间系统时钟时间为系统提供了唯一的时间。GET_TIME函数可以获得系统时钟时间。2.3.3. 请求资源和超时当进程请求一个APEX资源(例如信号量或事件)时,可以指定下列超时类型之一:INFINITE_TIME_VALUE从不过期。永久等待ZERO_TIME_VALUE不等待资源。如果资源不可得,则返回一个错误Finite value of timeout等待一个资源的最大

14、时间超时单元是SYSTEM_TIME_TYPE类型,纳秒单位。2.3.4. 调度进程APEX时间管理函数让分区来控制进程。在每个处理周期 ( cycle)的末尾, 一个周期性的进程请求 PERIODIC_WAIT服务来获得一个新的期限。通过这个进程的下个周期的释放点来计算新的期限。对于所有进程, TIMED_WAIT 服务让进程将自己悬挂一段时间。在等待时间过去后,进程能够被调度。REPLENISH服务让进程将它的当前期限推迟一段已过的时间。分区内的每个进程可以指定一段逝去的时间(叫做时间能力) 。时间能力用来设置处理期限时间, vThreads 周期性的评估该时间以确定是否进程在分配的时间内

15、能够完成它的处理。2.3.5. 期限每个进程关联了一个固定的时间能力,表示分配给它的响应时间用于满足它的处理需求。期限时间可以确定是否进程能够在它的时间能力内完成它的处理。可以通过REPLENISH服务增加期限时间,在下一次激活时将创建新的期限。有三种类型的期限:硬期限如果进程不能在一个指定的时间周期内满足一个硬期限,vThreads 将采取补救动作软期限如果进程不能在一个指定的时间周期内满足一个软期限,失效将被记录, 并且处理继续没有期限如果进程不能在一个指定的时间周期内完成处理,将不采取任何动作对于一个周期性进程, 当进程的激活周期开始时, 期限时间的倒计时也同时开始。 当进程请求 PER

16、IODIC_WAIT服务时,倒计时停止( disabled )。当进程被停止或当它调用REPLENISH或 PERIODIC_WAIT服务时, 期限时间结束 ( ended )。当分区处于除NORMAL模式以外的模式时,倒计时被反激活(deactivated )对于一个非周期性进程,当进程启动并且分区模式是 NORMAL 时,期限时间的倒计时开始。当进程请求一个 REPLENISH服务时,期限时间为当前时间加上额外的时间能力。当进程被停止时或当分区状态不是 NORAML 时,期限结束。在图 4-5 中,周期性线程处于下面的状态:1. DORMANT2. RUNNING(or READY if

17、another process has preempted it).3. WAITING4. RUNNING (or READY if another process has preempted it)5. READY until the health monitor takes an action. The process has not completed within the deadline interval.1 DORMANT.2 RUNNING (or READY if another process has preempted it)3 RUNNING (or READY if

18、another process has preempted it)4 WAITING.5 RUNNING (or READY if another process has preempted it).6 READY until the health monitor takes an action. The process has not completed within the deadline interval.2.3.6. 释放点周期性线程的第一次释放点相对于主时间帧内的它所在的分区的第一个窗口的开始。在DELAYED_START服务中使用DELAY,可以将进程调度向后推延。接下来的释放点

19、基于前面的释放点和进程周期。2.4. 分区间通信分区间通信包括在一个VxWorks653 模块上的两个或多个分区间的通信。端口,通道与其他分区通信。APEX分区通过消息,消息可以从一个源端口发送到一个或多个目的端口,进程从这些目的端口读取消息。消息通信系统的配置在VxWorks 653 模块配置时进行定义。2.4.1. 用于分区间通信的APEX 限制尽管 ARINC653标准制定了下面的通信类型,但是APEX不支持它们:多播和客户服务器消息(multicast and client-server messages )消息确认( acknowledgement of messages )2.4.

20、2. APEX 消息APEX消息是连续的数据块。ARINC653 标准使得消息在发送前,分解成小的数据块,单个的送到目的地,然后在交付前进行重组。但是, VxWorks 653 仅仅传输完全的消息,避免消息完整性和重传段的检查。消息可以是固定长度或可变长度。 当消息被发送时, 发送者指明长度。 为了适应各种消息长度,消息系统为资源分配最大长度。消息可以被周期性发送或者按需发送(非周期性)。任何给定的消息仅仅只能从一个单个的分区发送。着不太可能请求该消息的旧版本。另外, 一旦被投递, 消息被毁坏,即意味2.4.3. APEX 通道通道定义了:一个源端口和一个或多个目的端口间的逻辑链接消息从源到目

21、的的传输模式被发送消息的特征发送到一个目的端口的消息叫做一个有向消息。发送到多个目的端口的消息叫做广播消息。每个通道可以通过配置操作在指定的模式之下置的一致性在编译时间和启动时间进行检查。接收端口的大小。(端口和相关的通道定义在 XML 配置中)。配对于一个通道, 发送端口的大小不能超过任何两种传输模式分别是:采样模式和队列模式。采样模式:消息携带相同的但是更新的数据(messages typicallycarry similar, but updated,data)。消息没有排队。消息保留在源端口直到它被发送出去或被覆写。当消息到达目的端口时, 每个新消息覆盖前面的消息, 该消息保留在目的端

22、口直到它自己被覆写。 采样模式支持变长消息。采样模式的刷新率(Refresh Rate):刷新率指明从消息被目的端口接收开始,一个有效性消息允许的最大可接受时间。当创建端口时,指明该属性。 当消息被读取时, 一个有效性输出参数用来指明是否接收消息的时间与端口的刷新率一致。队列模式: 一个消息的每个新实例可以包含唯一的不同数据。因此,在传输时不允许覆写前面 的 消 息 。 消 息 在 源 端 口 排 队 直到 它 们 被 发 送, 没 有 消 息 丢失 ( 除 了 在 一个 带 有RECEIVER_DISCARD的满消息队列的情况下) 。消息被存储在接收端口直到一个进程读取它们。队列模式支持可变

23、长度的消息。2.4.4. 端口端口拥有下面几种类型:本地端口( Local Ports)本地端口是APEX端口,使得应用可以与同一VxWorks 653 模块上的应用进行通信。本地端口被附加到模块上的分区上。伪端口( Pseudo-Ports)伪端口可以用来在VxWorks 653 模块之外通信。伪端口连接一个端口到驱动上。直接访问端口(Direct-Access Ports)直接访问端口实现了APEX队列端口而没有软件缓冲区。它们也可以用来在VxWorks 653模块之外通信。 拥有一个直接访问端口的通道必须有一个单源和一个单目的。直接访问端口可以在分区或伪分区中。空端口端口占位端口的属性在

24、 XML 配置文件中指明。在运行时通过调用参数,可以从核心操作系统获得相应的配置值。configRecordFieldGet( )以及合适的2.4.5. 队列消息函数创建队列端口:CREATE_QUEUING_PORT服务创建一个空的队列端口,并返回一个端口ID。QUEUING_DISCIPLINE属性指定了阻塞的进程排队的方式是FIFO 或基于优先级次序。发送队列消息:SEND_QUEUING_MESSAGE服务发送消息到指定的队列端口。如果队列端口有充足的空间, 则将消息加到端口队列的尾端。如果没有充足的空间, 则发送进程阻塞,并且将发送进程按照排队规则加入到发送进程的队列中。 进程在发送

25、进程的队列中等待直到超时或者队列端口变得空闲。接收队列消息:RECEIVE_QUEUING_MESSAGE服务从指定队列端口接收消息。如果队列端口不为空, 则队列端口的头部消息被移除并返回给调用进程。如果队列端口为空,则进程阻塞直到超时或者有消息到达。获 得 队 列 端 口 信 息 : GET_QUEUING_PORT_ID服 务 获 得 指 定 队 列 端 口 的 端 口ID 。GET_QUEUING_PORT_STATUS服务获得队列端口的状态信息,包括端口方向,在端口的消息数目,等待进程的数目,大小。2.4.6. 采样消息函数创建采样端口:CREATE_SAMPLING_PORT服务创建

26、一个空的采样端口,并返回一个端口ID。写采样消息: WRITE_SAMPLING_MESSAGE服务写消息到一个指定的采样端口,覆写前面的消息。读采样消息: READ_SAMPLING_MESSAGE服务在指定的采样端口读取消息,并且返回一个合法性参数,用来指明是否消息的时间( age)同端口的刷新率一致。消息的时间( age)是消息写入到端口到消息在目的端口被读取的时间之差。得 到 采 样 端 口 信 息 : GET_SAMPLING_PORT_ID服 务 获 得 指 定 采 样 端 口 的 端 口ID 。GET_SAMPLING_PORT_STATUS服务获得采样端口的状态信息, 包括端口

27、方向, 刷新率,大小,在指定采样端口上次读取的消息的合法性。2.5. 分区内通信APEX提供下列APEX对象使得分区内的进程能够相互通信。缓冲区黑板信号量事件2.5.1. 使用 APEX 缓冲区通信APEX缓冲区使得分区内的进程可以互相通信。通信是不直接的:进程间通过缓冲区通信而不直接通信。缓冲区在消息队列中存储多个消息。创建 APEX 缓冲区: APEX缓冲区仅仅当分区被初始化时(除NORMAL 模式以外)被创建。进程可以创建尽可能多的缓冲区, 只要提前分配给分区缓冲区的内存能够支持创建这些缓冲区。CREATE_BUFFER服务创建了一个空的缓冲区, 带有名字、 最大消息数目、 最大消息大小

28、以及等待进程的队列规则( FIFO或 PRIORITY)。服务返回一个缓冲区 ID。发送消息给 APEX缓冲区: SEND_BUFFER服务发送消息给一个指定的缓冲区。如果缓冲区为空,那么消息按照 FIFO 规则存储在缓冲区的消息队列中,如果此时有进程正在等待接收消息,那么从接收进程等待队列中取出第一个进程, 并且置该进程为就绪状态。 如果缓冲区为满,则发送进程阻塞, 处于等待状态, 并且将发送进程按照队列规则放入到发送进程等待队列,并指定一个超时值。如果服务超时,则返回TIMED_OUT。从 APEX缓冲区接收消息: RECEIVE_BUFFER服务从一个指定的缓冲区接收消息。如果缓冲区不空

29、,那么消息从缓冲区的FIFO 消息队列中移除;如果缓冲区为满并且有进程正在等待发送消息,那么消息从缓冲区的 FIFO 消息队列中移除,将等待发送进程队列中的第一个发送进程移出队列, 并置于就绪状态。如果缓冲区为空,则接收进程进入等待状态,并且按照队列规则放入到等待接收进程队列中, 并指定一个超时值。 如果服务超时, 则返回 TIMED_OUT。获得 APEX缓冲区信息: GET_BUFFER_ID服务获得指定缓冲区的缓冲区ID。GET_BUFFER_STATUS服务获得指定缓冲区的信息, 包括当前消息数目, 等待进程数目, 最大可允许的消息数目,最大可允许的消息大小。2.5.2. 使用 APE

30、X 黑板通信APEX黑板支持一个分区内的进程间通信。通信是不直接的:进程间通过缓冲区通信而不直接通信。创建黑板: APEX黑板仅仅当分区被初始化时(除NORMAL 模式以外)被创建。进程可以创建尽可能多的黑板,只要提前分配给分区黑板的内存能够支持创建这些黑板。CREATE_BLACKBOARD服务创建了一个空黑板,包括名字、最大消息数目信息,服务返回一个黑板 ID。展示黑板消息: DISPLAY_BLACKBOARD服务写一个消息到黑板上,并从等待进程队列中移除所有的等待进程,并置于它们到就绪态。消息仍然保留在黑板上。读黑板消息: 如果指定黑板不空, 则 READ_BLACKBOARD从黑板上

31、读取消息。 如果黑板为空,则读消息进程被置为等待状态, 并且指定一个超时值。 如果服务超时, 则返回 TIMED_OUT。清除黑板: CLEAR_BLACKBOARD服务从指定黑板清除消息,结果黑板变空。得到黑板信息:GET_BLACKBOARD_ID服务获得指定黑板的ID。 GET_BLACKBOARD_STATUS服务获得指定黑板的信息,包括状态( EMPTY 或者 OCCUPIED),等待消息的数目,允许的最大消息大小。黑板的状态变迁:2.5.3. 使用 APEX 信号量通信APEX 信号量是计数信号量。进程等待信号量来获得访问资源的权利,当进程访问完资源后释放信号量。信号量的当前值表明

32、当前能够获取该信号量的次数。创建 APEX 信号量: APEX信号量仅仅当分区被初始化时(除 NORMAL 模式以外)被创建。进程可以创建尽可能多的信号量, 只要提前分配给分区信号量的内存能够支持创建这些信号量。CREATE_SEMAPHORE服务创建了一个信号量,包含名字,最大值,当前值,排队规则(或 PRIORITY),服务返回一个信号量ID。FIFO等待 APEX信号量: 如果指定的信号量的当前值不为零, 那么 WAIT_SEMAPHORE服务减少这个当前值, 进程继续运行。如果当前值为零, 那么进程被放入到等待状态, 并且根据信号量的排队规则进行排队,并指定了一段超时值,如果服务超时,

33、返回 TIMED_OUT。释放( Signalling)APEX信号量: 如果没有进程等待指定的信号量, 那么 SIGNAL_SEMAPHORE 服务增加信号量的当前值。 如果有进程等待信号量, 则服务使用信号量的排队规则来确定哪个进程将接收 signal,并且设置那个进程的状态为就绪。获 得APEX 信 号 量 信 息 : GET_SEMAPHORE_ID 服 务 获 得 指 定 信 号 量 的IDGET_SEMAPHORE_STATUS服务获得指定信号量的信息,包括当前计数, 等待信号量的进程数。目,最大值。2.5.4. 使用 APEX 事件通信APEX 事件使得分区内的进程同步化。当条件

34、发生时,等待这个条件的进程会被通知。事件可以处于两种状态之一: UP 或 DOWN。事件队列:当进程试图等待一个处于down 状态的事件时,进程重调度会发生。调用进程排队一段指定的时间。如果事件在这段时间内还没有被设置为UP,则 VxWorks 653 自动的从队列移除进程,设置返回码为TIMED_OUT,进程返回到就绪状态。创建 APEX 事件: APEX事件仅仅当分区被初始化时(除NORMAL 模式以外)被创建。进程可以创建尽可能多的事件,只要提前分配给分区事件的内存能够支持创建这些事件。CREATE_EVENT服务创建一个带有指定名字的事件,该服务返回一个事件ID,事件启动于DOWN 状态。设置和重设置 APEX事件: SET_EVENT服务设置指定的事件到 UP 状态。所有等待该事件的进程被置于就绪状态。 RESET_EVENT服务设置指定的事件到 DOWN 状态。等待 APEX事件:如果指定的事件处于DOWN 状态,则 WAIT_EVENT服务将调用进程从运行态切换到等待态。如果事件处于UP 状态,则调用进程继续运行。获得 APEX事件信息: GET_EVENT_ID服务获得指定事件的事件ID。 GET_EVENT_STATUS服务获得指定事件的状态信息,包括状态(UP 或 DOWN),等待进程的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论