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

下载本文档

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

文档简介

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

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

3、时扩展的POSIX标准(1003.1b)。装载和启动 当目标板加电时,按照下面的步骤进行装载和启动初始的启动码装载核心操作系统,分区操作系统,共享库,以及应用 核心操作系统初始化自身,启动它自己的子系统核心操作系统创建分区 核心操作系统启动分区调度器,并且让应用初始化自身核心操作系统可以在初始化完成之后下载在线装载的应用程序到分区。应用可以在分区运行之时装载到分 区。运行时模型核心操作系统处理来自每个分区的系统调用,并且在运行系统调用前校验每个系统调用的语句。使用vThreads分区操作系统的应用拥有完全的vThreads任务间通信机制。APEX库提供了遵循ARINC653规范的分区管理,进程

4、管理以及时间管理;为分区间通信提供了消息,通道, 端口;为分区内通信提供缓冲区,黑板,信号量以及事件。端口映射允许在 VxWorks653 模块之外通信。开发APEX应用APEX是位于应用程序和支持ARINC653规范的操作系统之间的AP。对于VxWorks653,操作系统是vThreads分区操作系统和核心操作系统。APEX给vThreads分区提供了时间、进程管理以及管理周期性和非周期性进程的能力。APEX提供如下服务:管理分区管理进程管理时间与其他分区通信(使用消息,端口和通道) 分区内的通信(使用缓冲区,黑板,信号量以及事件) 监控健康分区管理分区的管理包含分配分区内存以及依据ARIN

5、C653规范初始化分区。分配分区内存每个分区的资源分配都定义在基于 XML 的配置和编译过程中, 根据指定在该规范中的分区需求, 为每个分 区分配唯一的物理内存。通过禁止对超过该分区的内存区域的写访问来确保内存分区。初始化分区:冷和热启动冷启动:当 VxWorks653 模块加电并且创建分区时,使用冷启动分区操作模式。在冷启动模式下,分区对 象被分配并且初始化。热启动:热启动分区操作模式导致一个分区重新初始化或者由于遇到错误重新启动。在热启动模式下,持 久数据不会重新初始化,分区代码也不会重新装载。每个分区所使用的资源(如通道、进程、队列、信号量或事件等)在系统编译时指定。在分区的初始化阶段,

6、创建分区所需的资源,然后分区进入NORMAL模式。分区属性分区属性定义在 XML配置文件中。固定的分区属性包括:标识符:定义在 VxWorks653 模块上唯一的分区标识符。 内存需求:分配给分区的物理内存 周期:分区的激活周期。用来确定核心操作系统的整个时间帧内的分区激活的运行时位置。 持续时间:分区的每个周期内核心操作系统给予的处理器时间。关键级别:分区的 RTCA/DO-178B认证级别。通信需求:分区与其他分区通信的通信通道 分区健康监控表(健康监控配置) :健康监控器对于故障的动作指令。获得分区状态GET_PARTITION_STATl函数可以获得当前情况下的分区状态。 type P

7、ARTITION_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 record;type OPERATING_MODE_TYPE is (IDLE, COLD_START, WARM_START, NORMAL); type ST

8、ART_CONDITION_TYPE is (NORMAL_START,PARTITION_RESTART,HM_MODULE_RESTART,HM_PARTITION_RESTART);Where:NORMAL_STARTis a normal power-up.PARTITION_RESTART is either due to COLD_START or WARM_START by the partitionitself, through the SET_PARTITION_MODE service.HM_MODULE_RESTART is a recovery action taken

9、 at module level by the HM.HM_PARTITION_RESTART is a recovery action taken at partition level by the HM. 设置分区模式SET_PARTITION_MOD函数可以设置分区模式为 IDLE COLD_START WARM_START NORMAL。其中IDLE模式:分区关闭。分区未被初始化,没有进程正在运行,但是分配给该分区的时间窗口未被改变。COLD_STAR模式:分区重启使用冷启动初始化。WARM_START模式:分区重启使用热启动初始化。NORMAL模式:激活的进程被调度。控制分区中的抢占

10、进程的LOCK_PREEMPTIO函数可以为分区中的抢占上锁。该函数增加了分区的锁级,使得进程不能在分 区中重调度。当进程访问临界区时,或资源被同一分区中的多个进程共享时,这个能力十分重要。LOCK_PREEMPTIONi数不会影响其他分区的调度。 如果一个位于临界区的进程由于分区窗口结束而被中断 时,当分区再次运行时仍然是该进程最先运行。UNLOCK_PREEMPTIOr函数可以解锁分区的抢占。这个函数降低了分区的锁级,仅当锁级达到零时,进程 的重调度才能恢复。分区调度对于时间分区,ARINC653提供了两级调度机制。 在核心模块级,采用预先确定的基于时间窗的循环调度算法来调度各个分区,分区

11、没有优先级。核心操作系统根据每个分区的周期与持续时间信息,维护一个固定 时间长度的主时间帧,该主时间帧的时间长度为所有分区周期的最小公倍数。静态调度算法为每个分区生 成该主时间帧内相应的分区调度窗口,每个分区调度窗口由从主时间帧开始的偏移和期待的持续时间来定义。分区的调度窗口事先定义在配置表中。每个分区在其分区调度窗口内被激活并占用CPU并保证每个分区在其调度窗口内运行时不被其他分区打断。主时间帧在模块的运行期内周期性的重复,每个主时间帧 中拥有相同的分区调度窗口执行次序。进程管理APEX进程是包含在 APEX分区内的编程单元。同一分区内的进程可以并发执行。进程由可执行程序、数据 和栈、程序计

12、数器、栈指针以及优先级期限组成。进程管理包含创建进程、改变进程当前优先级、得到进程的当前状态、得到进程ID、挂起和恢复进程、停止和启动进程、控制抢占等函数。进程类型周期性进程非周期性进程进程调度在分区级,调度单元是 APEX进程。每个进程拥有优先级,调度算法是优先级抢占的。分区级操作系统总 是选择处于就绪状态且具有最高优先级的进程获得处理器资源。如果多个进程拥有相同的优先级,则分区 操作系统选择就绪队列中第一个进程。进程将控制处理器资源直到另一个进程重调度事件发生。进程状态变迁时间管理调度分区见 2.1.7 分区调度系统时钟时间系统时钟时间为系统提供了唯一的时间。GET_TIME函数可以获得系

13、统时钟时间。请求资源和超时 当进程请求一个 APEX资源(例如信号量或事件)时,可以指定下列超时类型之一:INFINITE_TIME_VALUE 从不过期。永久等待ZERO_TIME_VALUE不等待资源。如果资源不可得,则返回一个错误Finite value of timeout 等待一个资源的最大时间 超时单元是SYSTEM_TIME_TYP类型,纳秒单位。调度进程APEX时间管理函数让分区来控制进程。在每个处理周期(cycle)的末尾,一个周期性的进程请求PERIODIC_WAIT服务来获得一个新的期限。通过这个进程的下个周期的释放点来计算新的期限。对于所有进程,TIMED_WAIT服务

14、让进程将自己悬挂一段时间。在等待时间过去后,进程能够被调度。 REPLENISH服务让进程将它的当前期限推迟一段已过的时间。分区内的每个进程可以指定一段逝去的时间(叫做时间能力)。时间能力用来设置处理期限时间, vThreads周期性的评估该时间以确定是否进程在分配的时间内能够完成它的处理。期限 每个进程关联了一个固定的时间能力,表示分配给它的响应时间用于满足它的处理需求。期限时间可以确定是否进程能够在它的时间能力内完成它的处理。可以通过REPLENISH服务增加期限时间,在下一次激活时将创建新的期限。有三种类型的期限:硬期限如果进程不能在一个指定的时间周期内满足一个硬期限,vThreads将

15、采取补救动作软期限如果进程不能在一个指定的时间周期内满足一个软期限,失效将被记录,并且处理继续 没有期限如果进程不能在一个指定的时间周期内完成处理,将不采取任何动作 对于一个周期性进程,当进程的激活周期开始时,期限时间的倒计时也同时开始。当进程请求PERIODIC_WAIT服务时,倒计时停止(disabled )。当进程被停止或当它调用REPLENISH或PERIODIC_WAIT服务时,期限时间结束(ended)。当分区处于除 NORMAL模式以外的模式时,倒计时 被反激活( deactivated )对于一个非周期性进程,当进程启动并且分区模式是NORMAL时,期限时间的倒计时开始。当进程

16、请求一个REPLENISH服务时,期限时间为当前时间加上额外的时间能力。当进程被停止时或当分区状态不是 NORAML 时,期限结束。在图 4-5 中,周期性线程处于下面的状态:1. DORMANT2. RUNNING(or READY if 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 complet

17、ed within the deadline interval.1 DORMANT.2RUNNING (or READY if another process has preempted it)3 RUNNING (or READY if 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

18、within the deadline interval. 释放点周期性线程的第一次释放点相对于主时间帧内的它所在的分区的第一个窗口的开始。在DELAYED_STAR服务中使用DELAY可以将进程调度向后推延。接下来的释放点基于前面的释放点和进程周期。分区间通信分区间通信包括在一个 VxWorks653模块上的两个或多个分区间的通信。APEX分区通过消息,端口,通道与其他分区通信。消息可以从一个源端口发送到一个或多个目的端口,进程从这些目的端口读取消息。 消息通信系统的配置在 VxWorks 653模块配置时进行定义。用于分区间通信的 APEX限制尽管ARINC653标准制定了下面的通信类型,

19、但是APEX不支持它们:多播和客户服务器消息( multicast and client-server messages ) 消息确认( acknowledgement of messages )APEX消息APEX消息是连续的数据块。ARINC653标准使得消息在发送前, 分解成小的数据块,单个的送到目的地,然后在交付前进行重组。 但是, VxWorks 653 仅仅传输完全的消息,避免消息完整性和重传段的检查。消息可以是固定长度或可变长度。当消息被发送时,发送者指明长度。为了适应各种消息长度,消息系统 为资源分配最大长度。消息可以被周期性发送或者按需发送(非周期性) 。 任何给定的消息仅仅

20、只能从一个单个的分区发送。另外,一旦被投递,消息被毁坏,即意味着不太可能请 求该消息的旧版本。APEX通道通道定义了:一个源端口和一个或多个目的端口间的逻辑链接 消息从源到目的的传输模式被发送消息的特征 发送到一个目的端口的消息叫做一个有向消息。发送到多个目的端口的消息叫做广播消息。 每个通道可以通过配置操作在指定的模式之下(端口和相关的通道定义在XML配置中)。配置的一致性在编译时间和启动时间进行检查。对于一个通道,发送端口的大小不能超过任何接收端口的大小。 两种传输模式分别是:采样模式和队列模式。采样模式:消息携带相同的但是更新的数据( messages typically carry s

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

22、带有RECEIVER_DISCAR的满消息队列的情况下)。消息被存储在接收端口直到一个进程读取它们。队列模式支持可变长度的消息。端口 端口拥有下面几种类型:本地端口( Local Ports)本地端口是 APEX端口,使得应用可以与同一VxWorks 653模块上的应用进行通信。本地端口被附加到模块上的分区上。伪端口( Pseudo-Ports)伪端口可以用来在 VxWorks 653模块之外通信。伪端口连接一个端口到驱动上。直接访问端口( Direct-Access Ports)直接访问端口实现了 APEX队列端口而没有软件缓冲区。它们也可以用来在VxWorks 653模块之外通信。拥有一个

23、直接访问端口的通道必须有一个单源和一个单目的。直接访问端口可以在分区或伪分区 中。空端口端口占位端口的属性在 XML 配置文件中指明。在运行时通过调用configRecordFieldGet( )以及合适的参数,可以从核心操作系统获得相应的配置值。队列消息函数创建队列端口: CREATE_QUEUING_POR服务创建一个空的队列端口,并返回一个端口ID。QUEUING_DISCIPLIN属性指定了阻塞的进程排队的方式是FIFO或基于优先级次序。发送队列消息:SEND_QUEUING_MESSAG服务发送消息到指定的队列端口。如果队列端口有充足的空间, 则将消息加到端口队列的尾端。如果没有充足

24、的空间,则发送进程阻塞,并且将发送进程按照排队规则加 入到发送进程的队列中。进程在发送进程的队列中等待直到超时或者队列端口变得空闲。接收队列消息:RECEIVE_QUEUING_MESSAE务从指定队列端口接收消息。如果队列端口不为空,则队 列端口的头部消息被移除并返回给调用进程。如果队列端口为空,则进程阻塞直到超时或者有消息到达。获得队列端口信息:GET_QUEUING_PORT_ID艮务获得指定队列端口的端口ID。GET_QUEUING_PORT_STATUS服务获得队列端口的状态信息,包括端口方向,在端口的消息数目,等待进程的数目,大小。采样消息函数创建采样端口: CREATE_SAMP

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

26、端口上次读取的消息的合法性。分区内通信APEX提供下列APEX对象使得分区内的进程能够相互通信。缓冲区黑板/亠口 曰信号量事件使用APEX缓冲区通信APEX缓冲区使得分区内的进程可以互相通信。 通信是不直接的:进程间通过缓冲区通信而不直接通信。 缓冲区在消息队列中存储多个消息。创建APEX缓冲区:APEX缓冲区仅仅当分区被初始化时(除 NORMAL模式以外)被创建。进程可以创建尽 可能多的缓冲区,只要提前分配给分区缓冲区的内存能够支持创建这些缓冲区。CREATE_BUFFE服务创建了一个空的缓冲区,带有名字、最大消息数目、最大消息大小以及等待进程的队 列规则(FIFO或PRIORITY 服务返

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

28、在等待发送消息,那么消息从缓冲区的FIFO消息队列中移除,将等待发送进程队列中的第一个发送进程移出队列,并置于就绪状态。如果缓冲区 为空,则接收进程进入等待状态,并且按照队列规则放入到等待接收进程队列中,并指定一个超时值。如 果服务超时,则返回 TIMED_OUT。获得APEX缓冲区信息:GET_BUFFER_ID艮务获得指定缓冲区的缓冲区 ID。GET_BUFFER_STATUS务获得指定缓冲区的信息,包括当前消息数目,等待进程数目最大可允许的消息 数目,最大可允许的消息大小。使用APEX黑板通信APEX黑板支持一个分区内的进程间通信。 通信是不直接的:进程间通过缓冲区通信而不直接通信。创建

29、黑板:APEX黑板仅仅当分区被初始化时(除NORMAL模式以外)被创建。进程可以创建尽可能多的黑板,只要提前分配给分区黑板的内存能够支持创建这些黑板。CREATE_BLACKBOAR服务创建了一个空黑板,包括名字、最大消息数目信息,服务返回一个黑板ID。展示黑板消息:DISPLAY_BLACKBOAR服务写一个消息到黑板上,并从等待进程队列中移除所有的等待进 程,并置于它们到就绪态。消息仍然保留在黑板上。读黑板消息:如果指定黑板不空,则READ_BLACKBOAR从黑板上读取消息。如果黑板为空,则读消息进程被置为等待状态,并且指定一个超时值。如果服务超时,则返回TIMED_OUT。清除黑板:C

30、LEAR_BLACKBOAR服务从指定黑板清除消息,结果黑板变空。得到黑板信息:GET_BLACKBOARD_I服务获得指定黑板的 ID。GET_BLACKBOARD_STATUS务获得指定黑板的信息,包括状态(EMPTY或者OCCUPIED,等待消息的数目,允许的最大消息大小。 黑板的状态变迁: 使用APEX信号量通信APEX信号量是计数信号量。 进程等待信号量来获得访问资源的权利,当进程访问完资源后释放信号量。信号量的当前值表明当前能够获取该信号量的次数。创建APEX信号量:APEX信号量仅仅当分区被初始化时(除NORMAL模式以外)被创建。进程可以创建尽可能多的信号量,只要提前分配给分区

31、信号量的内存能够支持创建这些信号量。CREATE_SEMAPHOR服务创建了一个信号量,包含名字,最大值,当前值,排队规则(FIFO或PRIORITY, 服务返回一个信号量 ID。等待APEX信号量:如果指定的信号量的当前值不为零,那么WAIT_SEMAPHORE服务减少这个当前值,进程继续运行。如果当前值为零,那么进程被放入到等待状态,并且根据信号量的排队规则进行排队,并指 定了一段超时值,如果服务超时,返回TIMED_OUT。释放(Signalling) APEX信号量:如果没有进程等待指定的信号量,那么SIGNAL_SEMAPHOR服务增加信号量的当前值。如果有进程等待信号量,则服务使用

32、信号量的排队规则来确定哪个进程将接收sig nal,并且设置那个进程的状态为就绪。获得APEX信号量信息:GET_SEMAPHORE_I服务获得指定信号量的 ID。GET_SEMAPHORE_STATUS务获 得指定信号量的信息,包括当前计数,等待信号量的进程数目,最大值。使用APEX事件通信APEX事件使得分区内的进程同步化。当条件发生时,等待这个条件的进程会被通知。事件可以处于两种状态之一:UP或DOWN。事件队列:当进程试图等待一个处于 down 状态的事件时,进程重调度会发生。调用进程排队一段指定的时间。如果事件在这段时间内还没有被设置为UP,则VxWorks 653自动的从队列移除进

33、程,设置返回码为TIMED_OUT,进程返回到就绪状态。创建APEX事件:APEX事件仅仅当分区被初始化时(除 NORMAL模式以外)被创建。进程可以创建尽可能 多的事件,只要提前分配给分区事件的内存能够支持创建这些事件。CREATE_EVEN服务创建一个带有指定名字的事件,该服务返回一个事件ID,事件启动于 DOWN状态。设置和重设置APEX事件:SET_EVENT服务设置指定的事件到 UP状态。所有等待该事件的进程被置于就绪 状态。RESET_EVEN服务设置指定的事件到 DOWN状态。等待APEX事件:如果指定的事件处于DOWN状态,则 WAIT_EVENT服务将调用进程从运行态切换到等待态。如果事件处于 UP状态,则调用进程继续运行。获得APEX事件信息:GET_EVENT_I:服务获得指定事件的事件 的状态信息,包括状态(UP或DOWN),等待进程的数目。 APEX事件的状态变迁健康监控介

温馨提示

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

评论

0/150

提交评论