Preempt RT

实时Linux内核(PREEMPT_RT)

RTLinux官方简介

PREEMPT_R通用平台安装方法:

实时Linux内核(PREEMPT_RT)的编译安装以及测试

PREEMPT_RT在NVIDIA开发套件(以JetsonNX为例)中的安装方法:

Jetson Xavier NX 内核编译移植

官方安装指导:

如何使用 PREEMPT_RT 正确设置 Linux

实时操作系统配置

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 调度的任何任务。