[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1759] devers1, lisbon1.



  こんにちは、川合です。

  devers1とlisbon1ができました。例によって、主な変更点を列挙しま
す。

・32bitメモリが認識できなかったバグを修正。
・「えせ」仮想記憶を搭載。
・前回入れ忘れた"hlftstc0"を入れた。

  「えせ」仮想記憶というのは、しょせんは仮想記憶もどきで、本当の
仮想記憶ではないからこそ「えせ」なのですが、どういう仕様なのかを
説明します。

  現在、OSASKはハードディスクへのアクセスをサポートしていません
。ですから仮想記憶機構ができても、ページをハードディスクへ書き込
んだり読み込んだりはできません。そこで、書き込み遅延最低時間を無
限大に設定し、メモリがあふれるまで実メディア(ハードディスク)へ
の書き戻しをしないように設定しました。・・・これが、「えせ」のゆ
えんです。

  この状態と今までと何が違うのかといえば、実メモリ以上のメモリを
mallocできるというだけのことです(註:この言い方は厳密ではない。
詳しくは後述)。実際にアクセスするまでは仮想記憶と実メモリとの対
応づけは行われないので、mallocするだけならできます。mallocした領
域を読んだり書いたりしていけば、それにつれてメモリは消費されてい
き、メモリが無くなった時点でブレークポイントに引っかかって止まり
ます。

  何を言っているのかよく分からないでしょうから、実例を挙げましょ
う。アーカイブ内の"bigstkc"を実行してみてください。この実行バイ
ナリーはスタックサイズに1000KBを指定してあるので、従来のバージョ
ンのOSASKでは1MB近くメモリを消費します。しかしdevers1などで実行
すれば、たったの20KBしか使いません。・・・"bigstkc"内ではmalloc
などはしていませんが、500KBをmallocしても消費メモリはたいして変
わらないでしょう。10KBくらいは増えるかもしれませんが、500KBでは
ありません。・・・もちろん、mallocした領域をゼロクリアするなどの
実際のアクセスを行えば、消費メモリは500KB増えます。

  この効果は、malloc領域だけではなくローカル変数にも有効です。

void test()
{
    char bigarray[500000];
    bigarray[0] = 1;
    bigarray[499999] = bigarray[0] * 3;
    return;
}

のような場合もいいわけです。この場合、間の要素へのアクセスは一つ
もありませんから、その分のメモリは割り当てられません。static変数
や外部変数は、アプリ起動時に必ず初期値(たいてい0)を書き込まれ
ますので、確保した分だけメモリを食います。

  なんだかとっても賢くなったように思えるかもしれませんが、ちょっ
とした副作用もありまして、リアルメモリの消費量が増えています。こ
れは、プロテクトメモリを初期化する前に確保したメモリを、後になっ
て転送するアルゴリズムが使えなくなってしまったせいです。転送ルー
チンを仮想記憶対応に書き直せばいいだけなんですが、面倒なのでやっ
ていません。

  以上の点は、へっぽこコンソールでmemoryコマンドを実行してみれば
すぐに確認できます。

  先ほど「実メモリ以上のメモリをmallocできる」と書きましたが、こ
れはメモリが少ないマシンでは正しいですが、そうでないマシンには正
しくありません。というのは、今のバージョンでは仮想メモリとして使
えるのは64MB程度までで、それ以上の準備をしていないせいです。また
exe2bin1でスタックサイズを1000kよりも大きくすると、今度はそのア
プリを起動できなくなるという問題もあります(かつての手抜きのなご
りです)。現在のmallocの仕様ではスタック領域からmallocしてくるこ
とになっているので、mallocの合計サイズも1タスクあたり1000KB未満
でないと暴走するでしょう。

  結局、メモリの減りが少ないのを確認するのが精いっぱいで、実メモ
リ以上の利用を試すことはできないでしょう(メモリを抜いて、4MBく
らいにすれば試せるでしょうが)。

  このバージョンが一般公開候補版になるかどうかははっきりしていま
せんが、次の改良に時間がかかりそうなので、候補になる可能性は高い
です。

  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/