Any plan to support MMU in FreeRTOS?

Hi Team,

Do we have any plans to support MMU and Task Isolation/User-kernel separation in FreeRTOS? (for ARM, RISCV, etc CPU Architectures)

Although I do not have any stake i making decisions about this, my gut feeling is that there is not an urgent need for that feature. In all practical deeply embedded systems, all tasks interoperate rather closely with one another, meaning that if one task faults, there is no graceful recovery of the system as a whole. Coversely, there are no immediate benefits of shielding tasks against each other.

But that is just my opinion, others may feel different.

We already support task isolation on Cortex-M platforms with Memory Protection Unit (MPU). The following docs provide more details:

Would you please describe your use case?

For example, Zephyr has MMU support for ARM, Xtensa, RISC-V

ARM cortex M series processors itself doesn’t support MMU, so there MPU + FreeRTOS works fine.

But for, example ARM cortex A series have MMU. FreeRTOS going to support MMU for those architectures?

yes, and 1+1 = 2. I believe that everybody here on the forum knows what MMU and MPU stands for. Does that contribute anything new to the discussion?

1 Like

@RAc,

I have asked question as well. It would be helpful if you focus that also.

Thanks

We have done a lot of work on MPU support recently, and we are aware of users using an MMU as an MPU (i.e. using isolation, but not virtual memory). There currently isn’t a plan to support virtual memory in FreeRTOS.

My thoughts is that MMU as MPU works for isolation, but the sort of things FreeRTOS is built for don’t need the address translation ability of an MMU. “real-time” tasks need to be locked into memory as “swapping” defeats the ability to make real-time requirements.

I suspect that trying to add the ability to support a MMU for some non-real-time tasks in the system will just add overhead to the operations that the real-time tasks would be using.

There may be enough space above the space currently occupied by FreeRTOS and below the “real-time Linux” versions, for another product, It likely is enough different from the current FreeRTOS to make it not viable as a “fork” of FreeRTOS. You might be able to make a light-weight virtual memory OS that uses something based on FreeRTOS as a subsystem to handle real-time tasks, all in one common MMU configuration, with other non-real-time tasks as FreeRTOS “idle” priority that switch to other MMU configurations (likely with 1:1 address mapping) that access the FreeRTOS structures through wrappers that handle the MMU issues.

1 Like

@richard-damon ,

Thanks. Understood !!!

It’s worth noting that I’ve implemented MMU support for the Xtensa processor in FreeRTOS, but in a proprietary manner.

However, I’m interested in extending this support to ARM processors if there’s sufficient demand within the community.