Каждый процесс / поток / задача имеет свой стек. FreeRTOS выделяет память из кучи для этой цели.
Вот что делает FreeRTOS при переключении контекста с Task_A на Task_B:
(1) Перетащите все содержимое из регистров ЦП в стек Task_A.
(2) Сделайте так, чтобы указатель стека ЦП ссылался на стек Task_B вместо Task_A.
(3) Стек Task_B имеет вверху регистры CPU, которые представляют «сохраненное состояние» CPU, когда Task_B переводился в спящий режим. Настало время восстановить эти значения в регистрах ЦП.
(4) Продолжить выполнение задачи B.
Это переключение контекста обычно происходит очень часто в FreeRTOS. Таким образом, операционная система FreeRTOS может гарантировать, что все задачи с наивысшим приоритетом получают долю процессорного времени. Задачи с более низким приоритетом получают процессорное время, когда задачи с более высоким приоритетом не могут быть запущены, например. когда они ждут очереди, семафор, ..
FreeRTOS не поддерживает многоядерные - насколько я знаю. FreeRTOS обычно работает на крошечных микроконтроллерах, имеющих только одно ядро процессора.