Scheduler
Basic Concepts
The OpenHarmony LiteOS-A kernel uses the preemptive scheduling mechanism for tasks. The tasks with a higher priority are scheduled first, and the tasks with the same priority are scheduled using the time slice polling. The system runs based on the real-time timeline from the startup, which ensures good real-time performance of the scheduling algorithm.
The OpenHarmony scheduling algorithm is embedded with the tickless mechanism, which ensures lower power consumption and on-demand response to tick interrupts. This minimizes useless tick interrupt response time and further improves the real-time performance of the system.
OpenHarmony supports SCHED_RR (time slice round robin) for process scheduling and SCHED_RR and SCHED_FIFO (first in, first out) for thread scheduling .
Threads are the minimum scheduling units in OpenHarmony.
Working Principles
OpenHarmony uses process priority queue and thread priority queue for scheduling. The process priority ranges from 0 to 31, and there are 32 process priority bucket queues. Each bucket queue corresponds to a thread priority bucket queue. The thread priority ranges from 0 to 31, and a thread priority bucket queue also has 32 priority queues.
Figure 1 Scheduling priority bucket queue
The OpenHarmony system starts scheduling after the kernel initialization is complete. The processes or threads created during running are added to the scheduling queues. The system selects the optimal thread for scheduling based on the priorities of the processes and threads and the time slice consumption of the threads. Once a thread is scheduled, it is deleted from the scheduling queue. If a thread is blocked during running, the thread is added to the corresponding blocking queue and triggers scheduling of another thread. If no thread in the scheduling queue can be scheduled, the system selects the thread of the KIdle process for scheduling.
Figure 2 Scheduling process
Development Guidelines
Available APIs
API | Description |
---|---|
LOS_Schedule | Triggers system scheduling. |
LOS_GetTaskScheduler | Obtains the scheduling policy of a task. |
LOS_SetTaskScheduler | Sets the scheduling policy for a task. |
LOS_GetProcessScheduler | Obtains the scheduling policy of a process. |
LOS_SetProcessScheduler | Sets scheduling parameters, including the priority and scheduling policy, for a process. |
How to Develop
NOTE
Scheduling cannot be triggered during the system initialization process.