[b-free: 201] Re: API for 3B(get_lmb)

内藤 隆一 (GGC00661@niftyserve.or.jp)
Sat, 01 Apr 1995 21:20:00 +0900

隆一です。
B-Free メイリングリストの皆さん、こんにちは。

真鍋さん、BTRON3 のローカルメモリ獲得方法についての質問に回答していた
だきありがとうございます。

>> On Sat, 01 Apr 1995 00:33:00 +0900, 真鍋 さん said:

>  御質問の件ですが、3Bではアプリケーションが特別に確保しなくても、始め
> からローカルメモリーを使用することが可能です。3Bに於ける個別半空間(論
> 理アドレス)のアドレス割り当てを以下に示します。

> 00000000h------------------0M
>      謎の未使用領域
> 00100000h------------------1M
>      ユーザープログラム/
>      データ空間:コード部とデータ部はリンカーが4K単位で分割する。
>      ------------------

>      ↓ローカルメモリ空間

> 08000000h------------------128M

> 0FC00000h-----------------252M
>      スタック空間
> 10000000h------------------256M
>      (未使用)
> 7FFFFFFFh------------------

>  ローカルメモリ空間のメモリー割り当て処理は、プログラムがそのアドレスを
> アクセスした時点に行うデマンドページング処理によって実現されるため、3B
> ではローカルメモリーブロック操作関連のシステムコールは削除されました。

特にアプリケーションがローカルメモリを確保しないというのは意外でした。
(確かに技術的には困難ではないですが)

ところで、このような方法をとった場合、次のような問題があると思いますが、
どうでしょうか?

仮想空間のサイズはスワップエリアの領域のサイズ分に制限されます。
(あるいは、スワップエリア + 実メモリかもしれません)
ユーザプロセスが陽にメモリを取得する方式の場合、スワップエリア分の仮想
空間を取りつくしてしまうとエラーになります。ユーザプロセスは、メモリ取
得でエラーチェックをすることにより、回復処理をすることができます。

BTRON3 では仮想空間をとりつくした場合に、ユーザプログラムはどうなるの
でしょうか?
単純に考えると、メモリアクセスをした瞬間にスワップエリアを取ろうとして、
エラーになると思いますが、この場合ユーザプロセスはどのようなことになる
んでしょうか? メモリアクセス時にいちいちチェックをすることはできない
し、非同期のメッセージとしてエラーが伝わるのでしょうか?

-- 
内藤隆一 (ggc00661@niftyserve.or.jp)