Мне нужно реализовать многозадачную систему с MPU для процессоров ARM Cortex M3/M4.
В этой системе будет ядро, которое управляет ресурсами в привилегированном режиме и пользовательскими приложениями в непривилегированном режиме. И я хочу отделить пользовательское приложение от остальных и системных ресурсов.
Поэтому, когда я переключаюсь на новую задачу, я освобождаю область стека и глобальной памяти пользовательского приложения. Это можно легко сделать с помощью регистров ARM Cortex MPU.
Но проблема в том, что когда происходит переключение контекста, мне нужно использовать еще и некоторые глобальные переменные ядра.
Например, я вызываю функцию для получения следующего TCB в обработчике PendSV во время переключения контекста, но пул задач находится вне области пользовательского приложения и защищен от пользовательского приложения.
Итак, кажется, должен быть баланс, не так ли? Каковы безопасные и эффективные стратегии защиты памяти?
Привилегированный режим можно поднять перед переключением контекста при вызове функции Yield, но это не кажется хорошим решением.
Каковы общие стратегии по этому вопросу?