2016-10-21 11 views
0

ARM Cortex M3/M4プロセッサ用のMPUを備えたマルチタスキングシステムを実装する必要があります。ARM Cortex CPUのメモリ保護戦略には何が必要ですか?

このシステムでは、PrivilegedモードのリソースとUnrivilegeモードのユーザーアプリケーションを管理するKernelが存在します。私はユーザーアプリケーションの残りとシステムリソースから分離したいと思います。

したがって、新しいタスクに切り替えると、ユーザーアプリケーションのスタックおよびグローバルメモリ領域が解放されます。 ARM Cortex MPUレジスタを使用して簡単に実行できます。

しかし、問題は、コンテキスト切り替えが発生したときに、カーネルのいくつかのグローバル変数も使用する必要があるということです。

たとえば、コンテキスト切り替え中にPendSV Handlerで次のTCBを取得する関数を呼び出していますが、タスクプールはユーザーアプリケーション領域外であり、ユーザーアプリケーションから保護されています。

だから、バランスが取れているようですね。メモリ保護のための安全で効率的な戦略は何ですか?

Yield関数が呼び出されたときにコンテキスト切り替え前に特権モードを呼び出すことはできますが、それは良い解決策ではありません。

その問題に関する一般的な戦略は何ですか?

+1

コンテキストスイッチになる可能性があるオペレーティングシステムの機能は、特権モードに移行し、コンテキストスイッチを完了するために「戻る」後にのみ特権モードに戻らなければならないようです。これは私が作業したカーネルがコンテキストスイッチを処理する方法です。特権モードでは、保護されるメモリの領域はコンテキストスイッチの一部として必要に応じて変更できます。 – rcgldr

答えて

2

おそらく、既存のオープンソース実装を見て、そこで何がなされたのかを知るかもしれません。例えば、FreeRTOSはCortex-M MPUをサポートしていますhere;それはあなたの正確な質問に直接答えないかもしれませんし、完全な詳細を得るためにソースコードを調べなければならないかもしれません。

おそらく、データメモリをユーザー、カーネル、共有の3つの領域に分割します。

関連する問題