[kernel-ml 16] Re: MemoryManager

Naitoh Ryuichi ((no email))
Thu, 1 Jun 1995 23:21:39 +0900

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

# カーネル部分にも関係が深い議論なので、kernel-ml にも振っておきます。

>> On Thu, 01 Jun 1995 21:13:00 +0900, 藤永清和 <NBA01614@niftyserve.or.jp> said:

> 隆一さん、永代さん、ありがとうございます。誤植でなく、わたしの誤読だったの
> ですね。
> 「ローカルメモリ領域の大きさ」はプロセスの最大メモリ使用量といった意味。であ
> れば、よく理解できます。

> プロハンでは、「実行プログラム内で指定された大きさ、すなわちリンク時に決ま
> る大きさ」と書かれているので、ヒープではなくグローバル変数やスタティック変数
> のことかと思ったのでした。
> じっさい、1Bでは、プログラマがローカルメモリの最大サイズを指定しているの
> でしょうか?

プログラミング標準ハンドブックを見るかぎりでは、何らかの仕組みがあると
思うのですが、どうなんでしょう? > 1B プログラミング経験者

ただ、あらかじめ大きさを決めるという仕様は、CPU が 80286 前堤にしてい
るためと思われます(これは想像ですが)。

> 隆一さんの指摘どおり、B-Free OS では、最大メモリサイズを指定する必要は無い
> と考えています。
> 実メモリもスワップ領域も使い果したときには、新規プロセスの生成ができないこ
> とはあります。

>  [スタックとサブタスク]
> 4M バイトのサイズのスタックというのはその成長するときの最大サイズという意味
> だと理解しています。
>  ただし、ひとつのプロセス空間のなかに複数のタスクが存在する場合、この4MB
> を分割して各タスクのスタックとして割り当てることになるのではないでしょうか?

案1) あるプロセスに属しているタスクは、同じ仮想空間に属している。
よって、スタックも同じ領域を分割して使用する。

案2) あるプロセスに属しているタスクは、同じ仮想空間に属している。
しかし、スタックについては、タスクごとに違う領域を使用する。
各タスクのスタックは、同じ仮想空間に属しており、すべてのタスク同
士がアクセスできるようになっている。

案3) あるプロセスに属しているタスクは、コード部分とデータ部分が仮想空
間に属している。
しかしスタック領域については、異なった物理メモリを使用する(スタッ
ク上のアドレスが同じでも違うタスクにはアクセスできない)。

>  プロセスの生成時には、スタックに実メモリを1ページだけ割り当てておき、スタ
> ックが成長してページフォルトが発生したら新しいページを割り当てるつもりです(
> 最初に割り当てたページがページアウトすることもある)。

私もこれがいいと思います。
あと、ページフォールトが発生し、そのアドレスがスタックをアクセスしたた
めに発生したのかをチェックする方法が必要ですね。

-- 
内藤隆一 (ggc00661@niftyserve.or.jp/night@bfree.rim.or.jp)