SCHED_FIFO und SCHED_RR sind sogenannte "Echtzeit"-Richtlinien. Sie implementieren das vom POSIX-Standard spezifizierte Echtzeit-Scheduling mit fester Priorität. Tasks mit diesen Richtlinien präzipitieren alle anderen Tasks, die daher leicht verhungern können (wenn sie die CPU nicht freigeben).
Der Unterschied zwischen SCHED_FIFO und SCHED_RR besteht darin, dass SCHED_RR unter Tasks mit derselben Priorität einen Round-Robin mit einer bestimmten Zeitscheibe durchführt; SCHED_FIFO benötigt stattdessen die Aufgabe, den Prozessor explizit zurückzugeben.
SCHED_OTHER ist die gemeinsame Round-Robin-Time-Sharing-Planungsrichtlinie, die eine Aufgabe für eine bestimmte Zeitscheibe plant, abhängig von den anderen Aufgaben, die im System ausgeführt werden.
Aktualisieren :Seit Linux 3.14 gibt es eine zusätzliche Richtlinie namens SCHED_DEADLINE. Diese Richtlinie implementiert den Constant Bandwidth Server (CBS)-Algorithmus zusätzlich zu den Earlyest Deadline First-Warteschlangen. Jeder Aufgabe unter dieser Richtlinie wird eine Frist zugewiesen, und die Aufgabe mit der frühesten Frist wird ausgeführt. Die beste Ressource, die diesen Algorithmus beschreibt, ist Deadline Scheduling im Linux-Kernel.
Aktualisierung 2 :Seit Linux 4.13 hat SCHED_DEADLINE CBS durch den Greedy Reclamation of Unused Bandwidth (GRUB)-Algorithmus ersetzt.
Hier sind die Unterschiede zwischen SCHED_OTHER, SCHED_FIFO und SCHED_RR basierend auf dem Linux-Handbuch (http://man7.org/linux/man-pages/man7/sched.7.html)
SCHED_FIFO:First-In-First-Out-Planung
SCHED_FIFO kann nur mit statischen Prioritäten höher als 0 verwendet werden, was bedeutet, dass, wenn ein SCHED_FIFO-Thread lauffähig wird, er immer sofort jeden aktuell laufenden SCHED_OTHER-, SCHED_BATCH- oder SCHED_IDLE-Thread verdrängt. SCHED_FIFO ist ein einfacher Scheduling-Algorithmus ohne Time-Slicing.
SCHED_RR:Round-Robin-Planung
SCHED_RR ist eine einfache Erweiterung von SCHED_FIFO. Alles, was oben für SCHED_FIFO beschrieben wurde, gilt auch für SCHED_RR, außer dass jeder Thread nur für ein maximales Zeitquantum laufen darf. Wenn ein SCHED_RR-Thread für eine Zeitdauer gleich oder länger als das Zeitquantum läuft, wird er für seine Priorität an das Ende der Liste gesetzt.
SCHED_OTHER:Standard-Linux-Time-Sharing-Planung
SCHED_OTHER kann nur mit der statischen Priorität 0 verwendet werden (d. h. Threads unter Echtzeitrichtlinien haben immer Vorrang vor SCHED_OTHER-Prozessen. SCHED_OTHER ist der Standard-Linux-Time-Sharing-Scheduler, der für alle Threads gedacht ist, die die speziellen Echtzeitmechanismen nicht benötigen.