中心核と上位の層とのインタフェースは、ITRON システムコールとして決め られたインタフェースを使用しています(一部拡張してあります)。そのため、 異なったCPU上に B-Free OS を移植する場合でも、変更は中心核のみに留め、 上位層の変更は最小限にすることができるようになっています。
本ドキュメントでは、中心核の機能と構造について説明します。
中心核は、μITRON 3.0 の基本仕様(一部拡張仕様も含む)準拠のカーネル です。
中心核は、周辺核、外核そしてアプリケーションなどの上位層に対して次の機 能を提供します。
この他に μITRON 3.0 では規定されていない次の機能も提供します。
中心核は、基本的な OS の機能を上位層に与えます。
なお、上位層は中心核に対してシステムコールを発行することによって、 中心核の機能を使用します。しかし、中心核より上位の層(周辺核、外核も含 む)は、すべてメッセージの送受信により要求の送受信を行います。システム コール( = CPU でのトラップ)を介して呼び出されるというのは中心核だけで す。
ユーザアプリケーションが、B-TRON の機能を使用する場合、次のような順 序で処理を行います。
なお、中心核を呼び出す処理というのは、ライブラリが行うので、アプリケー ションが中心核を意識することはありません。
ファイルの読み書きなどの処理は、周辺核のファイル管理マネージャが、メッ セージを受けとることによって処理します。
また、中心核では、μITRON 3.0 で新たに拡張された接続機能に ついては、サポートしません。異なったホスト間での通信機能については、中 心核よりも更に上位の層でサポートします。
μITRON3.0の接続機能を使用しない理由は次のとおりです。
中心核は、いくつかのモジュールに分かれています。
タスク管理部分 | タスク管理では、ITRON の意味でのタスクを管理します。タスクは実行 単位としてのプログラムを意味しています。 タスク管理部分では、タスクの生成/削除/実行などの操作の他に、タスク 同士で同期や通信などを行う機能も含んでいます。 |
メモリ管理部分 | メモリ管理部分では、物理メモリの管理を行います。物理メモリは基本的 にページ単位 (80386 で 4K バイト) で管理を行います。しかし、メモリ 管理部分が提供するインタフェースでは、バイト単位での物理メモリの取 得/解放ができるようになっています。 |
割込み/例外管理部分 | 割込み管理では、外部割込みおよびトラップ (例外、内部割込み)の割り込みテ ーブルへの登録を行います。また、実際に割り込みが起った場合の各関数 への処理の割り振りも行います。 |
時間管理部分 | 一定時間ごとの指定された関数の実行をする機能を提供します。 |
システム管理部分 | バージョン番号などを管理します。 |
仮想メモリ管理部分 |
CPU のもつ仮想メモリの管理機構をそのまま提供します。
更に抽象的な仮想メモリの管理については、周辺核のメモリマネージャが
行います。 この仮想メモリの管理は、μITRON 3.0 では規定していないため、B-Free 独自の仕様を定めます。 |
インテル i386 プロセッサには、ページ単位での仮想記憶を管理する機能があ ります。
B-Free での仮想記憶管理をモデル化したものを 図 に示し ます。
仮想記憶は、リージョン (Region) という単位で管理します。 この場合の管理情報は、仮想領域のアドレス、物理メモリのマップ情報、そし て、読み書きの許可を表す permission のことです。
1つのタスクには1つ以上のリージョンを結びつけることができます。 たとえば、BTRON レベルでのユーザプロセス(の中のタスク)は、プログラムの 実行部分(コード部分)が入るテキスト・リージョン、読み書きするためのデー タが入るデータ・リージョン(実際には、データ・リージョンは、恐らく実行 前に値が決まっている変数が入るリージョンと、実行前には領域だけが決まっ ているリージョンそして、ヒープのために使われるリージョンの3つのリージ ョンに分かれます)、そしてスタック領域を表すスタック・リージョンと いう複数の Region と結びついています。
タスクが複数のリージョンを所有するのは、次のような利点があります。
逆に、複数タスクが1つのリージョンを所有することもできます。この場合、複数のタ スクから所有されるリージョンは、共有メモリとなります。
B-Free OS では、デフォルトでデータを共有することはしません。しかし、プ ログラムの実行部分についてはデフォルトで共有します。これは、プログラム の実行部分は大抵の場合変更しないため、共有しても他のプロセスに影響をお よぼすことがないからです。
プログラムの実行部分を変更するような場合、リージョンを共有しないように システムに要求する必要があります。もし、共有しているプログラムの実行部 分を変更しようとした場合、メモリの保護違反となりプログラムは、強制終了 します。
複数のリージョンが、仮想空間の中で重なりあうことはできません。
タスクは、リージョンの情報を直接操作することはできません。 そのためリージョンの内容を変更する場合、中心核(ITRON)のシステムコール を実行する必要があります。
中心核のもつリージョン操作関数を表 に示します。 もともと ITRON では、仮想記憶操作については定義していません。 そのため、リージョン操作システムールは ITRON で規定している独自システ ムコールとしてシステムコール名の最初に 'v' がつきます。
システムコール名 | 機能 |
vcre_reg | リージョンの生成 |
vcre_reg | リージョンの生成 |
vdel_reg | リージョンの削除 |
vmap_reg | リージョンのマップ |
vunm_reg | リージョンのアンマップ |
vdup_reg | リージョンの複製を作る |
vprt_reg | リージョンのプロテクト情報の設定 |
vshr_reg | タスク間でのリージョンの共有 |
vput_reg | リージョンへの書き込み |
vget_reg | リージョンからの読み込み |
vsts_reg | リージョンの情報 |
これらのシステムコールは、リージョンの情報をアクセスするだけで CPU の メモリ管理機能には影響を与えないものもあります。