Files:
Date 2021-11-30
File Size 1.03 MB
Download 1

摘要: 由于我国的空间技术的迅速发展,航天嵌入式系统的复杂性急剧增加。在航天领域要求对嵌入式操作系统vxWorks进行剪裁工作以适应航天设计的要求,而剪裁掉文件系统的VxWorks操作系统存在地面不能对星上的事件进行有效干预的问题。文中在“龙芯”计算机平台上通过对VxWorks 操作系统进行配置,设计了一种可在轨编程的方案,并针对其中的出现的修改后的函数中全局变量和调用函数的链接地址发生变化的问题提出了解决方案并完成了软件实现该功能。文中CPU采用 wh1770,通过修改原被调用函数的初始代码实现对于新函数的调用,并针对全局变量以及调用函数在更新函数中链接地址发生变化设计了在轨更新接口函数和更新代码提取工具,从而实现函数的在轨更新,给出了部分设计流程图以及代码提取工具的测试结果。测试结果显示该工具实现了设计目的,在航天工程领域具备一定的利用价值。

Due to the booming in the space technology, the complexity of RTOS in aerospace is increasing, It is necessary to tailor embedded operating system to adapt the demand of aerospace design. And there comes the problem that the VxWorks OS which is tailored File System can't tackle the event on the satellite efficiently. By the configuration on the VxWorks OS which is based on the Loongson computer platforms, I design a software which can realize On-orbit programming. And the resolution and a software for the issue that link address of the global variable and called function may change is given. The CPU in the article is wh1770. Based on modifying the first several codes of the old called function and designing the interface function and tools for extracting modified codes ,we can realize the on-orbit function updating. Part of the flow charts and test result are also given. This software can achieve the purpose of the design and has some value in aerospace applications.

1.信号

信号作为一种操作系统机制,用于处理异常条件并对控制流进行异步通知。在很多方面,信号是一种类似于硬件中断的软件机制。为响应总线错误、浮点数异常等,操作系统都会产生对应的信号。信号机制提供了用于产生与管理信号的API。

对于应用程序,信号最适合用于错误和异常处理,对于任务间通信则不太适合。常见的使用方式包括:使用信号杀死进程和任务、当定时器到达或当一个消息到达消息队列,则发送一个信号事件,等等。

为了与POSIX保持一致,VxWorks提供了63个信号,每个信号都有单独的信号值以及默认的动作(在signal.h中定义)。NULL signal将使用预留的信号值0。

信号可以在任务到任务或任务到进程之间发送。任务可以选择接受或忽略一个信号。信号是被接收或被忽略,都取决于信号掩码(signal mask)的设置情况。在内核中,信号掩码是任务所特有的,如果没有任务被设置为接受某个特定的信号,那么这个信号将被忽略。在用户空间中,信号掩码是进程所特有的。有些信号如SIGKILL和SIGSTOP是不能被忽略的。

为了响应信号,可以创建并注册信号处理函数,使得任务可以响应一个特定的信号。一个内核任务或ISR可以向特定的任务和进程发送信号。在内核中,信号的产生与传递过程都是在产生信号的任务上下文或ISR中进行。为了与POSIX标准保持一致,一个发送给进程的信号,都是由第一个已经设置了可以处理该信号的进程负责。

每个内核任务都有一个与之相关的信号掩码。信号掩码决定了任务将接受哪些信号。默认情况下,信号掩码在初始化时被设置为不屏蔽任何信号(在内核中不存在掩码继承)。可以使用sigprocmask()函数修改掩码。

在内核中,可以为一个特定的任务注册信号处理函数。信号处理函数在接收信号的任务的上下文中执行,并且使用了该任务的执行栈空间。即使任务被阻塞,也会调用信号处理函数。

VxWorks提供了软件信号机制,其中包括了POSIX函数、UNIX BSD兼容的函数以及VxWorks原生的函数。POSIX兼容的信号接口既包括由POSIX1003.1规定的基本信号接口,也包含了由POSIX1003.1B规定的队列信号扩展。

此外,非POSIX API提供了内核与用户应用程序之间的信号。包括taskSigquue()、rtpSigqueue()、rtpTaskSigqueue()、taskKill()、rtpTaskKill()、taskRaise()。

在VxWorks内核中(为了向后兼容),当类POSIX接口需要使用进程ID作为其参数时,应该使用任务ID代替。

一个RTP任务(用户模式)可以向如下目标发送信号:

1. VxWorks7内存管理模型

VxWorks7为执行在内核态与用户态的所有代码都提供了内存管理机制。对于32位与64位CPU,VxWorks7所提供的内存管理机制是相同的。

内核上下文不是一一映射的,也就是说虚拟内存地址与物理地址不是一一映射的。虚拟内存被分区管理,每个分区具有专门的用处和相应的分配机制。

VxWorks7内存模型用于:

  • 使系统能够支持更大容量的RAM;
  • 使系统能够支持RAM中不连续的块空间;
  • 更快、更高效的系统调用内存验证;
  • 减少了虚拟地址空间碎片;
  • 可以根据需求实现内存与I/O空间的动态映射(而不是使用静态配置的代码);
  • 简化使用标准ABI开发共享库的过程,该过程需要基于预定义的虚拟内存布局实现标准的重叠地址空间管理;

显示内存布局信息

shell中的adrSpaceShow()函数(针对C解释器)或adrsp info命令(针对命令解释器),可以用于显示当前地址空间使用的概况。这两者分贝包含在INCLUDE_ADR_SAPCE_SHOW与INCLUDE_ADR_SPACE_SHELL_CMD两个组件中。

虚拟内存区域

VxWorks定义了多个虚拟内存区域。这些区域是根据处理器架构进行地址和大小划分的,具有特定的作用。虚拟内存区域如下图所示。

1. 任务与多任务

多任务环境允许实时应用程序由一系列独立的任务构成,这些任务拥有自己的执行与系统资源。

2. VxWorks系统任务

根据具体的配置,VxWorks在启动时将运行各种系统任务,其中有些任务会一直运行。

VxWorks基础任务如下:

国外论文:针对航电系统的实时操作系统VxWorks 7的安全评估