实时Linux内核(PREEMPT_RT)
RTLinux官方简介
PREEMPT_R通用平台安装方法:
实时Linux内核(PREEMPT_RT)的编译安装以及测试
PREEMPT_RT在NVIDIA开发套件(以JetsonNX为例)中的安装方法:
官方安装指导:
实时操作系统配置
RT应用开发
内存锁定
看这里
RT线程的堆栈
看这里
调度 - 策略和优先级
根据所选任务策略和相关规则,调度程序决定换出哪个任务以及接下来处理哪个任务。Linux 内核实现了多种调度策略。它们分为非实时和实时策略。调度策略已经在主线 Linux 中实现。
非实时策略:
- SCHED_OTHER:每个任务都有一个所谓的“不错的价值”。它是一个介于 -20(最高 nice 值)和 19(最低 nice 值)之间的值。任务执行时间的平均值取决于相关的 nice 值。
- SCHED_BATCH:此策略源自 SCHED_OTHER 并针对吞吐量进行了优化。
- SCHED_IDLE:它也是从 SCHED_OTHER 派生的,但它的值比 19 弱。
实时政策:
- SCHED_FIFO:任务的优先级介于 1(低)和 99(高)之间。在此策略下运行的任务将被调度,直到它完成或更高优先级的任务抢占它。
- SCHED_RR:此策略源自 SCHED_FIFO。与 SCHED_FIFO 的区别在于任务在定义的时间片的持续时间内运行(如果它没有被更高优先级的任务抢占)。一旦时间片用完,它可以被具有相同优先级的任务中断。时间片定义在 procfs (/proc/sys/kernel/sched_rr_timeslice_ms) 中导出。
- SCHED_DEADLINE:此策略实施全球最早截止日期优先 (GEDF) 算法。在此策略下调度的任务可以抢占使用 SCHED_FIFO 或 SCHED_RR 调度的任何任务。