[b-free 260] B-Free on Linux

Hidetosi Ochiai (h953046b@ice.nuie.nagoya-u.ac.jp)
Fri, 7 Mar 1997 01:41:05 +0900

B-Free を Linux 上に作ることについて、
いくらか考えてみました。

楽をするために Linux を使うのですから、
カーネルに手を加えなくて済むならそれに越したことは
ありませんので、できるだけ正規のシステムコールを使って
作るように考えてみました。

それでは、プログラミングハンドブックの最初のほうから
見てみましょう。

プロセス管理ですが、ざっと見た感じでは Linux のプロセスを
そのまま利用できるようです。
B-Free の実行形式は Linux の実行形式そのままにして
使うことにします。

プロセスマネージャを Linux のプロセスとして作って、
そこに System V のメッセージを用いてプロセス管理用の
関数とします。
楽をするならプロセスマネージャを作らずに
ライブラリで済ますという方法もできます。
ただ、プロセスの生成(cre_prc)の実現は
ファイルシステムとの関係もありますので、
後でファイルシステムのところで考えましょう。

メッセージは System V のメッセージを使えばできそうな
感じですが、メッセージハンドラが難しそうです。
でも signal あたりを使えばなんとかなりそうな気がします。
メッセージもライブラリでごまかすことができるでしょう。
また、IPC(Inter Process Communication)マネージャを
通じた方法もできます。

セマフォも System V のセマフォをそのまま利用できますので
わざわざ IPCマネージャを使うまでもなく
ライブラリで十分でしょう。

グローバル名は、IPCマネージャを利用する方法と、
共有メモリを使ってライブラリで実現する方法がありますが、
プロセスマネージャを使ったほうが自然な感じがします。

メモリ管理ですが、ローカルメモリは malloc() 等を
そのまま使えば OK です。
一方共有メモリは メモリプールの概念が Linux(System V) に
ないので、メモリマネージャを作る必要があります。
これもライブラリでできないこともありません。

さあ、ついに出ました大物のファイル管理です。
私は2種類考えてみました。
まず1つ目は、ファイルマネージャを用います。
ファイルマネージャは、直接 /dev/hda1 等のデバイスファイルを
読み書きしてファイルの操作をします。
ただ、ファイルシステムはブロック単位でディスクを操作することが
多いので、カーネル内にあるブロックデバイスからブロック単位で
読み書きする関数を外部から呼び出せるようにする
必要があるかもしれません。
前に書いたプロセスの生成(プログラム実行)ですが、
プロセスマネージャに実行の要求が来たら
ファイルマネージャに指令を出して対象プログラムの
オブジェクトレコードを Linux のディスクにコピーして
それを実行するという方法があります。
多少実行に時間がかかるでしょうが、楽です。

もう1つは、Linux やその他の新しい UNIX に見られるような
/proc ファイルシステムと、
林さんの言っておられた
|>あと、ファイルシステムですが、普通のツリー状のファイルシステムの
|>上に実装するとしたら、BTRON の実身1つに Windows の
|>ファイルを1つを対応させて、そのファイルの名前を
|>BTRON のファイル ID の番号にして、特定のディレクトリ上に
|>ファイルをためていく、というのを考えました。
| 似てますが、私は、BTRONの実身1つをWindows(or UNIX)のディレクトリ
|に対応させる方法を考えてました。ディレクトリ名をファイルIDに対応
|させるとかは同じアイデアです。それでBTRONのレコードをファイルに
|対応させるのですね。
を合わせたような物です。
仮にこのファイルシステムを /bfree にマウントしたとします。
この中に各実身のファイルID が名前になったディレクトリがあります。
その中にレコードごとのファイルがあり(名前はレコード番号と
レコードタイプとレコードサブタイプを組み合わせた物)、
あとファイル操作の指示を出すための名前つきパイプみたいな物があります。

/bfree/000000e3/96300000000 オブジェクトレコード
^^^^^^^^ #%%********
ファイルID | | レコード番号
| +-レコードサブタイプ
+---レコードタイプ
/a0000000001 データボックス
/70000000002 機能付箋
/operate ファイル操作用
/00001df7/00000000000 リンクレコード
/00000000001 リンクレコード
/00000000002 リンクレコード
/00000000003 リンクレコード
/00000000004 リンクレコード
/10000000005 TAD主レコード
/80000000006 実行機能付箋
/operate ファイル操作用

実際に /bfree のなかにファイルがあるわけではなく、
あるように見えるだけで、/bfree の中を操作すると
BTRON形式のディスクを操作する事になります。
この方法は本当にうまく行くのかいまいちわからないのですが、
何となく良さ気に見えます。たぶんよく考えたら問題あるでしょう。
また、ファイルシステムを作るのが大変です。

イベントは、IPCマネージャを通じてやりとりするのがよいでしょう。
これもライブラリと共有メモリでやりとりできないこともありませんが、
かえって難しい気もします。

デバイス管理は、Linux の /dev/* を使うように
ライブラリで対処するのが簡単です。
デバイスの状態やパーミッションを細かく管理したいなら
デバイスマネージャを利用した方が良いです。
このことはデバイス管理に限らず他のマネージャにも言えることです。

時間管理は、ライブラリで済まします。

システム管理機能は、なくても済んだり必要でなかったりするので
今のところ考えていません。

まずはこんな所です。

落合秀俊 名古屋大学工学部電気電子情報工学科
h953046b@ice.nuie.nagoya-u.ac.jp