Time-slicing for equal priority tasks in FreeRTOS - Time & Space Complexity
We want to understand how the CPU time is shared when tasks have the same priority in FreeRTOS.
How does the system decide how long each task runs before switching?
Analyze the time complexity of the following code snippet.
// Two tasks with equal priority
void Task1(void *pvParameters) {
for (;;) {
// Task1 work
vTaskDelay(1); // Yield after some work
}
}
void Task2(void *pvParameters) {
for (;;) {
// Task2 work
vTaskDelay(1); // Yield after some work
}
}
// Both tasks run with same priority
xTaskCreate(Task1, "Task1", 1000, NULL, 2, NULL);
xTaskCreate(Task2, "Task2", 1000, NULL, 2, NULL);
This code creates two tasks with the same priority that repeatedly run and yield control.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Each task runs an infinite loop doing work and then yields.
- How many times: The loop repeats indefinitely, switching between tasks each time.
As the number of equal priority tasks increases, the CPU time is divided among them.
| Number of Tasks (n) | Approx. CPU Time per Task |
|---|---|
| 2 | About half the CPU time each |
| 5 | About one fifth the CPU time each |
| 10 | About one tenth the CPU time each |
Pattern observation: Each task gets a smaller slice as more tasks share the same priority.
Time Complexity: O(1/n)
This means the CPU time per task decreases linearly as the number of equal priority tasks increases.
[X] Wrong: "All tasks run fully one after another regardless of priority."
[OK] Correct: When tasks have equal priority, FreeRTOS switches between them frequently to share CPU time fairly, not running one task completely before switching.
Understanding how time-slicing works helps you explain multitasking fairness and responsiveness in real-time systems.
"What if one task had higher priority than the others? How would the time complexity of CPU sharing change?"
Practice
Solution
Step 1: Understand time-slicing concept
Time-slicing means the CPU divides its time between tasks that have the same priority.Step 2: Apply to FreeRTOS behavior
FreeRTOS automatically switches between equal priority tasks to share CPU time fairly.Final Answer:
The CPU time is shared fairly among tasks with the same priority. -> Option BQuick Check:
Time-slicing = fair CPU sharing [OK]
- Thinking only one task runs until it finishes
- Believing tasks run sequentially without switching
- Assuming lower priority tasks pause higher priority ones
Solution
Step 1: Check task priority parameters
In FreeRTOS, the fifth parameter in xTaskCreate is the task priority.Step 2: Identify equal priorities
Both tasks have priority 2 in xTaskCreate(task1, "Task1", 1000, NULL, 2, NULL); xTaskCreate(task2, "Task2", 1000, NULL, 2, NULL);, making them equal priority tasks.Final Answer:
Both tasks have priority 2, so they have equal priority. -> Option AQuick Check:
Same priority number = equal priority [OK]
- Assigning different priority numbers to tasks
- Confusing task stack size with priority
- Using priority 0 and 1 as equal
Solution
Step 1: Understand FreeRTOS scheduling for equal priority tasks
FreeRTOS uses time-slicing to switch between tasks of equal priority.Step 2: Predict scheduler behavior
The scheduler switches tasks periodically, giving each task CPU time in turn.Final Answer:
The scheduler switches between tasks periodically to share CPU time. -> Option DQuick Check:
Equal priority tasks share CPU via switching [OK]
- Thinking tasks run one after another without switching
- Assuming tasks run simultaneously on one core
- Believing one task blocks the other forever
Solution
Step 1: Check task states in FreeRTOS
Even with equal priority, a task that is blocked or waiting will not run.Step 2: Identify why a task never runs
If a task never runs, it is likely blocked or waiting indefinitely, not ready to run.Final Answer:
The task that never runs is blocked or waiting indefinitely. -> Option CQuick Check:
Blocked task = no CPU time [OK]
- Assuming higher priority task blocks lower priority always
- Believing FreeRTOS lacks time-slicing
- Ignoring task states like blocked or suspended
Solution
Step 1: Understand time-slicing with equal priority tasks
FreeRTOS scheduler switches tasks periodically to share CPU time fairly among equal priority tasks.Step 2: Analyze effect of different run durations before yielding
Even if tasks run different times before yielding, the scheduler enforces time slices to balance CPU time.Final Answer:
Each task gets equal CPU time slices regardless of run duration before yielding. -> Option AQuick Check:
Time-slicing ensures fair CPU time despite run length [OK]
- Assuming longer running tasks get more CPU time
- Thinking tasks can starve others with longer runs
- Believing task creation order controls CPU time
Ready to prove it?
Pass the test and this pattern moves unknown
