[b-free: 298] About Memory Manager

藤永清和 (NBA01614@niftyserve.or.jp)
Mon, 29 May 1995 23:51:00 +0900

 ご指名を受けましたメモリマネージャ担当の藤永です。

 隆一さんの仰るとおり、スワップエリアは、ファイルシステム内に含めるものと考え
ております。

 [スワップ領域(ファイル)]
 スワップ領域は、システム構築(インストール)時に割り当てる(たぶん2次記憶装
置のうちで一番速いものを使うのが望ましいのでしょうが)。

 メモリ管理としては、スワップ領域は、どんな媒体にあろうと感知せず、ファイルと
してアクセスしてよいのではないでしょうか? ファイルマネージャ様いかが?
 ページイン、ページアウトのためのインターフェースを決めねば。

 [プロセスのメモリ]
 プロセス固有のメモリ空間には、つぎの5種類が有る。
 コード領域 = 命令と定数。(ページアウトしない)
 データ領域 = 関数の外で宣言された変数と、関数内の静的変数。
 ローカルメモリー領域 = ヒープ領域。動的に管理される。
 スタック。
 共有メモリ。(他のプロセスとのメモリ共有)

 [データ領域]
 BTRON1プログラミング標準ハンドブックp1ー62の6行目の段落「・・・ロ
ーカルメモリ領域の大きさは固定である」は、誤植でしょうね。

 プロセス生成時にメモリが割り当てられるか否か判定する必要があるでしょうか?
   (他のプロセスがメモリを消費していて、残り少ないときなど)
仮想空間のデータ領域の範囲内で大きな配列を宣言して実際にはとびとびのメモリし
か使わないことも考えられますが・・・

 [ローカルメモリ(ヒープ)]
 get_lmb()はmalloc()、rsz_lmb()はrealloc()、rel_lmb()はfree()に相当する(詳細
や戻り値はちがう)。

 [スタックとサブタスク]
 サブタスク(プロセス内タスク)のスタックは、そのプロセスのスタックエリアから
確保するわけですが、そのとき、箇々のタスク生成時にスタックサイズを指定する必要
はないでしょうか?
 1プロセスにタスクが一つのときはスタック4MB全部割り当てられますが、複数タ
スクの場合には、タスク数が増えると1タスクあたりのスタックが減ります。たいてい
は数十KBあれば良いのでしょうが・・・

付記:メモリ管理について、まだ煮詰まっていないし、勉強しなければならないことが
多いのですが、6月に入ったらkernel-mlのほうで議論をはじめますのでよろしくお願
いします。