
实时调度概述
实时编程并非遥不可及的神秘领域,它关乎软件在现实世界中的时间约束。根据POSIX.1b实时扩展标准,实时性被定义为“操作系统在限定响应时间内提供特定服务水平的能力”,这一原则同样适用于应用程序或库开发。
“限定”的响应时间核心在于“可预测性”,而非单纯追求速度。必须能够明确一个时间跨度,确保一系列操作在该时段内完成。例如,控制核反应堆的系统要求极端严格的响应,而多数应用程序虽要求较低,但仍需在“确定性响应时间”内交付可靠服务。实时编程的本质是让软件与物理时间同步。
实时编程通常分为两大范畴:“硬实时”指系统必须绝对满足时间约束,否则可能导致严重后果,如飞机导航延迟引发的坠毁;硬实时由物理现实定义,不容妥协。“软实时”则允许偶尔的调度偏差,后果相对较轻,适用于大多数需要时间保障的场景。
调度策略与优先级
在POSIX多线程编程框架下,线程调度策略主要包含SCHED_FIFO(先入先出)和SCHED_RR(轮循),两者均基于优先级管理。
SCHED_FIFO策略允许线程持续运行,直至更高优先级线程就绪或自身主动阻塞。在该策略中,就绪线程会立即执行,除非有同等或更高优先级线程已在运行。
SCHED_RR策略与SCHED_FIFO相似,但引入了时间片概念。如果一个SCHED_RR线程执行超过固定时间片而未阻塞,且存在相同优先级的SCHED_RR或SCHED_FIFO线程就绪,当前线程将被抢占,以便就绪线程获得执行机会。
优先级唤醒机制:当SCHED_FIFO或SCHED_RR线程在条件变量上等待锁定同一互斥量时,它们按优先级顺序被唤醒。例如,低优先级和高优先级线程同时等待,互斥量解锁后,高优先级线程总是优先解除阻塞,这保障了关键任务的及时响应。
|