μT-Kernelでは、実行時の保護レベルとして0~3の4段階(特権モード/ユーザモードなどに相当)、アクセス対象となるメモリの保護レベルとしても0~3の4段階がそれぞれ定義されており、現在実行中の保護レベルと同じか、それより低い保護レベルのメモリにのみアクセスができる。この機能は、ユーザプログラムの不正なアクセスから、OSなどのシステムを保護するために役立つ。
各保護レベルは次のような用途に使用する。
ただし、CPUによっては、特権モード(スーパバイザモード)とユーザモードの2段階の保護レベルしかない場合もある。そのような場合は、特権モードを保護レベル0、ユーザモードを保護レベル3として扱う。この場合には、保護レベルとして1~2を指定しても、保護レベル0を指定したものと解釈され、保護レベル0を指定した時と同等の動作をする。たとえば、tk_cre_tskのtskatr
でTA_RNG2を指定した場合でも、TA_RNG0を指定した場合と同じく、生成されたタスクは特権モード(保護レベル0)で動作する。また、tk_cre_mplのmplatr
でTA_RNG2を指定した場合でも、TA_RNG0を指定した場合と同じく、生成されたメモリプールのアクセスを制限する保護レベルが0となる。なお、この場合はサービスプロファイルTK_MEM_RNG0、TK_MEM_RNG1、TK_MEM_RNG2の定義値を0とする。
特権モードとユーザモードの区別もないCPUの場合は、保護レベル0のみを使用する。この場合には、保護レベルとして1~3を指定しても、保護レベル0を指定したものと解釈される。また、サービスプロファイルTK_MEM_RNG0、TK_MEM_RNG1、TK_MEM_RNG2、 TK_MEM_RNG3の定義値を0とする。
実行時の保護レベルが、アクセス対象となったメモリの保護レベルよりも低い場合には、メモリアクセス権の違反が検出され、CPU例外を発生する。
実行時の保護レベルの遷移は、システムコールまたは拡張SVCの呼出、および割込み・CPU例外により行われる。
非タスク部(タスク独立部、準タスク部など)は保護レベル0で実行する。保護レベル1~3で実行できるのはタスク部のみである。保護レベル0でもタスク部は実行可能である。