Это простой вопрос: обрабатывает ли freeRTOS несколько потоков в нескольких процессах, как это делает «настоящая» система Linux?
freeRTOS и параллельная обработка
Ответы (5)
FreeRTOS — это не Linux и не претендует на то, чтобы быть таковым, хотя само по себе является кросс-платформенным стандартным ядром, поскольку оно поддерживает 26 различных ядер, но оно предназначено для микроконтроллеров, а не для микропроцессоров. Однако большинство этих ядер не используют MMU, поэтому нет понятия процесса. Если хотите, все задачи представляют собой «потоки», работающие в одном «процессе». Вот почему я использую термин «задача», чтобы не вызывать путаницы. Однако существуют версии FreeRTOS, которые поддерживают использование MPU, что позволяет разбивать память и права доступа, как MMU, но в линейном, а не в виртуальном адресном пространстве.
FreeRTOS использует простой планировщик приоритетов, описанный здесь.
Я не уверен, что вы подразумеваете под обработкой потоков, как это делает Linux, но если все потоки имеют одинаковый приоритет, им должно быть справедливо выделено процессорное время.
Да, rmh прав, что задачам с одинаковым приоритетом также будет выделено процессорное время. Это можно увидеть на следующем веб-сайте:
http://www.freertos.org/implementation/a00007.html
В качестве дополнительного момента FreeRTOS, как следует из названия, является операционной системой реального времени. При этом FreeRTOS можно настроить так, чтобы она работала как система с разделением времени, как в Linux, и наоборот.
Надеюсь, это помогло. Ваше здоровье!
Нет. (Бесплатная) RTOS обычно не имеет тех же представлений о процессах и потоках, которые используются в обычных GPOS, таких как Linux. Вместо этого часто используется термин «задача», чтобы избежать путаницы.
Тем не менее, вы можете взглянуть на сопрограммы FreeRTOS, которые являются своего рода потоками исполнения. -задача в FreeRTOS.
Каждый процесс/поток/задача имеет свой стек. Для этой цели FreeRTOS выделяет память из кучи. Вот что делает FreeRTOS при переключении контекста с Task_A на Task_B: (1) Помещает все содержимое из регистров CPU в стек Task_A. (2) Сделать так, чтобы указатель стека ЦП ссылался на стек Task_B вместо Task_A. (3) Стек Task_B имеет регистры ЦП наверху, которые представляют «сохраненное состояние» ЦП, когда Task_B был переведен в спящий режим. Теперь пришло время восстановить эти значения в регистрах ЦП. (4) Продолжайте выполнять задачу B.
Это переключение контекста обычно очень часто происходит в FreeRTOS. Таким образом, операционная система FreeRTOS может гарантировать, что все задачи с наивысшим приоритетом получат долю процессорного времени. Задачи с более низким приоритетом получают процессорное время, когда задачи с более высоким приоритетом не могут быть запущены, например. когда они ждут очередь, семафор,..
Насколько я знаю, FreeRTOS не поддерживает многоядерность. FreeRTOS обычно работает на крошечных микроконтроллерах с одним ядром ЦП.