メモリ

アドレス空間

メモリのアドレス空間は、共有空間とタスク固有空間に区別される。共有空間は、すべてのタスクから同じようにアクセスできる空間で、タスク固有空間はそのタスク固有空間に属しているタスクからのみアクセスできる(図8)。1つのタスク固有空間に複数のタスクが属している場合もある。

タスク固有空間と共有空間の論理アドレス空間は、CPU(およびMMU)の制限に依存するため実装依存となるが、タスク固有空間を低位アドレス、共有空間を高位アドレスにおくことを原則とする。

図 8. アドレス空間

割込みハンドラなどのタスク独立部は、タスクでないためタスク固有空間を所有しない。そのため、タスク独立部では、タスク独立部に入る直前に実行していたタスクのタスク固有空間に属するものとする。これは、tk_get_tid で返される現在実行状態のタスクのタスク固有空間と一致する。実行状態のタスクがない時は、タスク固有空間は不定である。

共有空間およびタスク固有空間に関しては、tk_cre_tskメモリプールシステムメモリ管理機能にも関連する説明がある。

MMUのない(またはMMUを使用しない)システムにおいては、タスク固有空間が存在しないものと考える。

非常駐メモリ

メモリには常駐メモリと非常駐メモリがある。

非常駐メモリは、そのメモリをアクセスすることにより、ディスク等からメモリへデータの転送などが行われる。そのため、デバイスドライバによるディスクアクセスなどの複雑な処理が必要になる。したがって、非常駐メモリをアクセスする時には、デバイスドライバなどが動作できる状況でなければならない。そのため、ディスパッチ禁止中や割込み禁止中、タスク独立部実行中などの状況でアクセスすることはできない。

同様に、OS内部の処理においても、クリティカルセクション内で非常駐メモリにアクセスしないようにする必要がある。特に、システムコールのパラメータとして渡されるメモリアドレスが、非常駐メモリを指している場合が考えられる。システムコールのパラメータが非常駐メモリにあることを許すか否かは、実装依存とする。

非常駐メモリのアクセスによるディスク等からの転送は、μT-Kernelでは行わない。通常は、仮想記憶管理などを行うサブシステムがμT-Kernelに組み合わされる。

仮想記憶を使用しないシステムにおいて、システムコール等で非常駐メモリが指定された場合は、単に無視してすべて常駐メモリとして扱えばよい。

保護レベル

μT-Kernelでは、0~3の4段階の保護レベルを仮定する。

各保護レベルは次のような用途に使用する。

保護レベル用途
0カーネル、サブシステム、デバイスドライバなど
1システムアプリケーションタスク
2(予約)
3ユーザアプリケーションタスク

非タスク部(タスク独立部、準タスク部など)は保護レベル0で実行する。保護レベル1~3で実行できるのはタスク部のみである。保護レベル0でもタスク部は実行可能である。

MMUによっては、特権とユーザの2段階の保護レベルしかない場合もある。そのような場合は、保護レベル0~2を特権、保護レベル3をユーザとして4段階に見立てて扱う。MMUのないシステム、またはMMUを使用しないシステムでは、保護レベル0~3をすべて同一に扱えばよい。