||
Nucleus的核心是一个实时的多任务内核——Nucleus PLUS,具有以下特性(Accelerater Technology公司宣称的):
可移植性:
Nucleus PLUS可用于大多数流行的处理器。因为Nucleus PLUS主要是用标准C写的,移植到新的处理器系列相对很直接。这也就意味着用Nucleus PLUS开发的应用程序也具有很高的可移植性。
可用性:
不像其他的商业内核,Nucleus PLUS的系统调用名直接表明了它的功能。比如,你可以通过Nu_Create_Task系统调用来创建一个任务。Nucleus PLUS的系统调用都设计成具有类似的入口参数和返回值类型。Nucleus PLUS的对象都不隐式地和别的对象相关。比如,邮箱和任务之间是不相关的。因此,用户可以利用多个Nucleus PLUS对象之间的结合形成混合系统调用。
配置:
Nucleus PLUS最终是以C库的形式提供给用户,你可以选择所需要的部分链入到你的应用程序中。但是,其可裁剪性并不好,如果某些系统功能不要的话,必须在Nucleus.h的头文件中加一些宏定义,比如定义:#define NU_ENABLE_STACK_CHECK,那么每个系统调用时都要进行堆栈检查,否则就不进行堆栈检查,可以删除的功能并不多。VxWorks的可裁剪性就强多了,有300多个独立模块,微内核6K,最小系统<30K,配全了可达到几百K。
特性:
①、快速响应时间:对临界资源的检测时间不依赖于占有该临界资源的线程执行时间的长短,一旦低优先级线程释放掉临界资源(不管其是否执行完),高优先级线程就会抢占运行。
②、每个任务的执行时间和其他任务的处理时间无关。
③、较高吞吐量:随着任务数目的增多,任务的调度时间为常数。
④、可扩展性:利用现有系统调用的结合可得到新的系统调用。
Nucleus PLUS提供其他实时内核都具有的系统服务,比如:任务控制、任务通信、任务同步、内存管理、可编程的定时器、标准的输入/输出设备接口等。对任务的调度依赖优先级、时间片的方法,可以选择挂起一个任务按照先入先出(FIFO)的顺序或按照优先级的顺序。所有的操作系统对象(任务、邮箱、队列、管道等)都可以动态地创建和删除。创建一个对象时,要指定指定其控制块的内存区域和其它的数据要求(堆栈空间等)。
Nucleus在任务调度时,首先查看任务是否可以抢占,如果不能抢占,则一直执行到任务完成或任务放弃时间片;否则,依靠优先级进行调度,先调入优先级最高的任务,对于优先级相同的任务则分享时间片、轮流调度。
优点:
①、堆栈管理比较好,中断时线程堆栈和系统堆栈分开。系统空闲时使用系统堆栈,中断不嵌套的话会很快地释放掉上、下文保护占用的堆栈区(直接切换至系统堆栈顶部),中断嵌套时,使用的都是系统堆栈,所以系统堆栈必须开得很大。线程的堆栈空间占用比较少,中断时首先为当前线程建立一个中断类型的堆栈帧,然后就会切换至系统堆栈,如果中断嵌套的话,使用的都是系统堆栈,因此,线程堆栈中通常最多只有一个中断类型的堆栈帧。
②、中断嵌套处理比较简单。中断嵌套时,上、下文保护和恢复都直接返回,要做的只是在LISR激活HISR时,要修改TCD_Execute_HISR,或者使已激活HISR的激活次数加1,然后执行RTE指令,继续完成被嵌套的中断处理。(什么含义?)
③、内核比较简练,任务抢占的延迟可能会比较短。
④、内核和网络协议都以源码的形式提供,用户可以根据需要修改,这是Nucleus最显著的特点。
⑤、不用写板支持软件包(BSP),可以缩短开发周期,降低开发难度。
缺点:
①、系统定时器中断的处理容易产生堆栈格式错误这种致命的错误,算是操作系统的一个BUG(见定时器部分)。
②、 Nucleus堆栈的安全性得不到保证,因为中断、系统调用和任务数据使用的都是一个堆栈,其中如果有一处把堆栈破坏了,任务就会崩溃。
PSOS的每个任务都有一个系统栈和私有栈,中断和系统调用使用的是系统栈,任务自己的数据放在私有栈中,安全性比Nucleus好。
VxWorks则是由操作系统管理一个中断栈,所有的中断服务程序都使用这个中断栈,安全性也比Nucleus好。
③、对中断的响应可能会比较慢。因为Nucleus的很多系统调用时都要把中断屏蔽掉,比如下面的这些函数都是要屏蔽中断的:TCT_Protect,TCT_Unprotect,TCT_Schedule_Protected TCT_Interrupt_Context_Save,TCT_Interrupt_Context_Restore,TCT_Control_To_System TCT_HISR_Shell等。如果有很多这种系统调用的话,就会造成中断的响应比较慢。
VxWorks声称其内核调用时不屏蔽中断,因此对中断的延迟时间短。
④、内核简练可能又是它的另一个缺点,因为它提供的功能比较简单。比如:I/O Driver,只提供一种标准的接口。()
⑤、当操作系统出现系统错误时,比如:没有注册的中断向量产生中断时,这时操作系统所有的任务都会死掉,进入ERC_System_Error死循环。VxWorks就不是如此,当某个任务运行时出现系统错误时,只有这一个任务会死掉,其它任务可以正常运行。(有待学习确定)
⑥、内核裁剪性不好,对于用户不需要的功能要做一番源码修改,才能去掉这些功能,以使编译后的内核变小。
⑦、Nucleus的内核目前不支持多CPU,没有多CPU间的通信机制。pSOS和VxWorks都有支持多处理器的版本,支持多处理器间的远程服务调用RSC。
⑧、Nucleus的保护性措施很少,不提供虚拟内存接口VMI,操作系统比较重要的数据结构不能保护起来,比如:中断向量表等。VxWords提供的VxVMI技术的一个重要功能就是由操作系统来保证任务的私有空间不被其它任务修改,从而保证任务和操作系统不会因不慎写操作而崩溃。当然,VMI技术与CPU的类型有关,要求CPU具有MMU(Memory Management Unit),已知具有MMU的CPU有Intel 80386、MIPS、PowerPC、MC68040、MC68060。
⑨、Nucleus的代码可重入性要通过TCT_Protect进行保护,不支持全局变量和静态变量的可重入,当多个任务都要操作某个全局变量时,要注意保护,尤其全局变量是一个链表结构时很容易把链表给破坏。
VxWorks宣称,除了纯代码的可重入外,还提供全局变量、静态变量和可变全局变量的可重入