RTEMS:浮点运算任务
9.2.7: 浮点运算任务
%A
%A 在RTEMS 中,为了合理分配和利用资源,特别定义了使用浮点运算的浮点任务。RTEMS使用RTEMS_FLOATING_POINT 参数创建浮点运算任务。和普通任务不同,浮点任务需要使用浮点运算协处理器(例如i386的浮点协处理器),在任务切换的时候也就需要为浮点运算器使用的浮点寄存器分配内存空间,同时也需要在任务控制块任务中为使用协处理器的任务分配额外的空间存储任务状态。正是这个原因,使用 RTEMS_NO_FLOATING_POINT 参数创建的普通任务占用的资源更少,创建和切换的时候也会更快。
%A
%A 由于RTEMS最开始是为数字计算密集型的军事和航天领域应用设计创造的,所以RTESM为浮点任务做了大量的优化。在RTEMS中,如果系统里只用一个浮点任务,或者这个任务是最后一个使用浮点运算器的任务,那么该浮点任务被调度的时候,数值协处理器的状态可以不用保存。
%A
%A 虽然调度RTEMS_FLOATING_POINT任务强的开销已经作过优化,但是任然会有任务希望在使用浮点运算单元的同时完全避免与 RTEMS_FLOATING_POINT任务相关的开销。这可以通过下面的方式来实现。首先是一旦浮点任务开始执行,就不让其他任务将其调度出去,由于不参与调度,避免了不必要的开销。同时该方式也避免了为浮点运算任务分配与协处理器相关的任务上下文。然而,如果使用了这个方法,虽然可以减少浮点运算任务的开销,但是程序员需要保证其他的任务不会以浮点运算任务的形式创建,也不会使用浮点运算单元,否则,浮点任务的任务上下文就可能出现不一致,这是因为 RTEMS认为RTEMS_NO_FLOATING_POINT不会对数字协处理器进行操作。
%A
%A 如果处理器没有硬件浮点单元,或者系统缺乏数值协处理器,RTEMS 将不会为这样的目标系统提供浮点任务支持。在这种情况下,无论使用RTEMS_FLOATING_POINT或者 RTEMS_NO_FLOATING_POINT创建任务,任务实际上都是RTEMS_NO_FLOATING_POINT的。为了在这种硬件系统中实现浮点运算,必须使用软件浮点库实现浮点操作。
%A
%A 在一些处理器上,可以动态地将浮点单元屏蔽掉。在这样的目标系统中,RTEMS可以使用处理器的这个能力,在创建RTEMS_FLOATING_POINT任务的时候才激活浮点运算单元。在这种操作模式下,RTEMS_NO_FLOATING_POINT任务如果对浮点协处理器进行操作,就会产生异常。
%A%A
%A
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。