RTOS(实时操作系统)主要分为硬实时操作系统软实时操作系统两大类,其核心区别在于对任务截止时间(Deadline)的保证严格程度。

特性维度 硬实时操作系统 (Hard RTOS) 软实时操作系统 (Soft RTOS)
核心要求 必须在绝对确定的时间内完成任务响应,错过截止期将导致灾难性后果 任务有截止期要求,但偶尔、有限度地错过截止期是可以接受的,只会导致性能下降
确定性 极高,系统行为在时间上完全可预测。 较高,但允许一定的时间偏差。
应用场景 航空航天(如飞行控制)、汽车(如ABS、安全气囊)、医疗设备(如心脏起搏器)、工业控制(如安全急停)。 消费电子(如音视频播放)、网络设备(如路由器)、一些用户交互系统。
典型代表 VxWorks, QNX, SylixOS, μC/OS-II/III, FreeRTOS(经正确配置可满足许多硬实时需求)。 某些嵌入式Linux变体(如带有PREEMPT_RT补丁的Linux)、Windows CE。

RTOS与通用操作系统(如Linux)的主要区别在于设计目标和内核机制:

对比项 实时操作系统 (RTOS) 通用操作系统 (如 Linux)
设计目标 确定性可预测的响应时间是首要目标。 高吞吐量公平性平均性能是首要目标。
调度策略 基于优先级的抢占式调度。高优先级任务就绪可立即抢占低优先级任务,且调度延迟有界且极短。 通常采用公平调度(如CFS),兼顾响应时间和吞吐量,调度延迟不确定且通常较长。
内核类型 多为微内核设计,仅将最核心的调度、通信等作为内核,其他服务运行在用户空间,减少关中断时间,提高响应性。 多为宏内核,大量服务在内核态运行,功能强大但关中断区域可能较长,影响实时性。
中断处理 中断服务程序(ISR)极其简短,通常只做标记,唤醒高优先级任务进行实际处理,以最小化关中断时间。 中断处理可能较复杂,虽然也有下半部机制,但整体关中断时间仍可能影响硬实时需求。
系统开销 极小,内核精简,内存占用少(可小至KB级),适用于资源受限的微控制器(MCU)。 较大,内核复杂,内存占用大(通常MB级以上),适用于资源丰富的应用处理器。
时间管理 提供精确的相对延时(如 vTaskDelay)和绝对延时(如 vTaskDelayUntil)API,后者能避免累积误差,适用于周期性任务。 延时API精度相对较低,受系统负载影响大,不保证严格的时间确定性。

RTOS与裸机程序的区别主要体现在任务管理和资源协调方式上:

对比项 使用 RTOS 裸机开发
程序结构 多任务模型。将应用分解为多个独立任务,每个任务拥有独立的栈和优先级,代码逻辑更清晰。 超级循环前后台模型。主循环中顺序调用函数,中断处理异步事件,逻辑复杂时易混乱。
并发处理 通过任务调度器实现多任务并发执行(宏观上)。调度器决定何时运行哪个任务。 本质是顺序执行。通过状态机、标志位等在循环中模拟并发,复杂度高。
延时处理 提供非阻塞延时。任务调用延时函数会主动让出CPU,调度器可立即运行其他就绪任务,CPU利用率高。 通常使用阻塞延时(如空循环)。在延时时CPU被独占,无法执行其他工作,效率低。
资源同步/通信 提供丰富的IPC机制(如队列、信号量、互斥量、事件标志组),方便任务间安全地共享数据和同步。 需开发者自行管理全局变量、标志位,并注意中断与主循环间的数据竞争,容易出错。
实时性保障 通过优先级和抢占机制,高优先级任务可及时响应。例如,中断唤醒高优先级任务后,调度器可使其立刻运行。 依赖于循环执行速度和中断响应。低优先级函数执行时间长会阻塞高优先级事件的响应,实时性难保证。

代码示例:FreeRTOS中的相对延时与绝对延时

// 相对延时示例:每次循环的间隔时间会受任务执行时间和调度影响而产生累积误差
void vTaskFunction( void * pvParameters ) {
    for( ;; ) {
        performOperation(); // 执行操作
        vTaskDelay( pdMS_TO_TICKS( 100 ) ); // 相对延时100毫秒 
    }
}

// 绝对延时示例:固定周期的任务,能避免累积误差
void vPeriodicTaskFunction( void * pvParameters ) {
    TickType_t xLastWakeTime = xTaskGetTickCount();
    const TickType_t xFrequency = pdMS_TO_TICKS( 100 ); // 周期100毫秒 for( ;; ) {
        performOperation(); // 执行操作
        vTaskDelayUntil( &xLastWakeTime, xFrequency ); // 绝对延时,直到下一个周期点 
    }
}

参考来源

 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐