#
第 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 の基本仕様(一部拡張仕様も含む)準拠のカーネル です。

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

- タスク管理
- 同期・通信機能(IPC)
- メモリプール管理機能
- 割り込み管理機能
- 例外管理機能
- 時間管理機能
- システム管理機能

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

- 仮想メモリ管理機能

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

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

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

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

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

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

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

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

#### 接続機能について

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

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

- μITRON 3.0 での通信機能は組み込み機械で CPU が複数ある場合を 想定している。
- 基本的に CPU がひとつだけ入っており、他のマシンとは比較的大域 の広いインタフェース (Ethernet など)が使えるパソコンとは相性が悪い。

### 中心核の構成

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

中心核の構成

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

タスク管理部分 | タスク管理では、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