第 18 回 BTRON Club 発表用資料(草稿)


B-Free OS 〜 中心核の概要

内藤 隆一 (night@b-free.orient.co.jp)
1997 年 5 月 30 日


中心核

B-Free OS で最もマシン寄りの部分、それが中心核です。 中心核は、それ自体 ITRON 仕様の OS となっています。

中心核と上位の層とのインタフェースは、ITRON システムコールとして決め られたインタフェースを使用しています(一部拡張してあります)。そのため、 異なったCPU上に B-Free OS を移植する場合でも、変更は中心核のみに留め、 上位層の変更は最小限にすることができるようになっています。

本ドキュメントでは、中心核の機能と構造について説明します。

中心核の機能

中心核は、μITRON 3.0 の基本仕様(一部拡張仕様も含む)準拠のカーネル です。

中心核は、周辺核、外核そしてアプリケーションなどの上位層に対して次の機 能を提供します。

この他に μITRON 3.0 では規定されていない次の機能も提供します。

中心核は、基本的な OS の機能を上位層に与えます。

なお、上位層は中心核に対してシステムコールを発行することによって、 中心核の機能を使用します。しかし、中心核より上位の層(周辺核、外核も含 む)は、すべてメッセージの送受信により要求の送受信を行います。システム コール( = CPU でのトラップ)を介して呼び出されるというのは中心核だけで す。

システムコール呼び出しの経路

ユーザアプリケーションが、B-TRON の機能を使用する場合、次のような順 序で処理を行います。

syscall
システムコール呼び出しの経路

  1. ユーザプログラムは、中心核に対してメッセージを送信するシステム コールを発行して、周辺核へメッセージを送る。
  2. 周辺核は、送られてきたメッセージを受けとり、メッセージに書かれ た要求を実行する。
  3. 周辺核は要求を処理すると、結果をメッセージの形にして中心核 を介してアプリケーションへ送る。
  4. ユーザアプリケーションは、返答メッセージを受けとる。 (システムコールの終了)

なお、中心核を呼び出す処理というのは、ライブラリが行うので、アプリケー ションが中心核を意識することはありません。

ファイルの読み書きなどの処理は、周辺核のファイル管理マネージャが、メッ セージを受けとることによって処理します。

接続機能について

また、中心核では、μITRON 3.0 で新たに拡張された接続機能に ついては、サポートしません。異なったホスト間での通信機能については、中 心核よりも更に上位の層でサポートします。

μITRON3.0の接続機能を使用しない理由は次のとおりです。

中心核の構成

中心核の構成を図 に示します。

中心核の構成
中心核の構成

中心核は、いくつかのモジュールに分かれています。

タスク管理部分 タスク管理では、ITRON の意味でのタスクを管理します。タスクは実行 単位としてのプログラムを意味しています。 タスク管理部分では、タスクの生成/削除/実行などの操作の他に、タスク 同士で同期や通信などを行う機能も含んでいます。
メモリ管理部分 メモリ管理部分では、物理メモリの管理を行います。物理メモリは基本的 にページ単位 (80386 で 4K バイト) で管理を行います。しかし、メモリ 管理部分が提供するインタフェースでは、バイト単位での物理メモリの取 得/解放ができるようになっています。
割込み/例外管理部分 割込み管理では、外部割込みおよびトラップ (例外、内部割込み)の割り込みテ ーブルへの登録を行います。また、実際に割り込みが起った場合の各関数 への処理の割り振りも行います。
時間管理部分 一定時間ごとの指定された関数の実行をする機能を提供します。
システム管理部分 バージョン番号などを管理します。
仮想メモリ管理部分 CPU のもつ仮想メモリの管理機構をそのまま提供します。 更に抽象的な仮想メモリの管理については、周辺核のメモリマネージャが 行います。

この仮想メモリの管理は、μITRON 3.0 では規定していないため、B-Free 独自の仕様を定めます。

仮想記憶

i386 での仮想記憶管理機能

インテル i386 プロセッサには、ページ単位での仮想記憶を管理する機能があ ります。

モデル

B-Free での仮想記憶管理をモデル化したものを 図 に示し ます。

仮想記憶のモデル
B-Free での仮想記憶のモデル

仮想記憶は、リージョン (Region) という単位で管理します。 この場合の管理情報は、仮想領域のアドレス、物理メモリのマップ情報、そし て、読み書きの許可を表す permission のことです。

1つのタスクには1つ以上のリージョンを結びつけることができます。 たとえば、BTRON レベルでのユーザプロセス(の中のタスク)は、プログラムの 実行部分(コード部分)が入るテキスト・リージョン、読み書きするためのデー タが入るデータ・リージョン(実際には、データ・リージョンは、恐らく実行 前に値が決まっている変数が入るリージョンと、実行前には領域だけが決まっ ているリージョンそして、ヒープのために使われるリージョンの3つのリージ ョンに分かれます)、そしてスタック領域を表すスタック・リージョンと いう複数の Region と結びついています。

タスクが複数のリージョンを所有するのは、次のような利点があります。

  1. リージョンごとに permission が指定できる。そのことによって、テキス トは実行するだけで読み書きできないなどの指定ができる。すべてひとつ のリージョンにしてしまうと、permission は最少公倍数的なものになって しまうだろう(つまり、読み/書き/実行のすべてを許可した状態になってし まう)。
  2. リージョンを仮想空間の中で離して置くことによって、リージョンの大き さを広げることができる。成長するリージョンにはヒープ、スタックなど があります。

逆に、複数タスクが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 の メモリ管理機能には影響を与えないものもあります。


B-Free オフィシャルホームページへ戻る
Copyright (C) 1996,1997 B-Free Project