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

[OSASK 1508] Re: memory management.



Hidemi KAWAI さんへ

>  GDTはTSSとLDTと一部のドライバーくらいにしか使わないので、まあ
>べつにいいんじゃないかと思っています。

言われてみればたしかに。どうも、run386 に慣れすぎてしまったみたいです(汗)

>>役割ごとにコードを分けるという意味です。
>>ただ、分けすぎるとダメダメになりますので、難しいところです……。
>  これは、メモリの用途によって管理方法を変える、ということなんで
>すか?・・・うーん、メリットは僕には分かりませんが、新しい考え方
>かもしれません。

いや全然関係ないです。モジュール化です。
しごく当たり前すぎてるだけなのかも(汗)
マイクロカーネルって分かりますよね、そのことを言ってるんです。
そういう方法で、メモリを管理させたらスマートかな。

#管理方法というよりも、管理実現方法ですね……

>>使用してるドライバの状態(例えるなら I/O の状態)とかも
>>やっぱりこの中ってことになるんでしょうか。
>  タスクを再開するのに必要な外部情報は、保存されます。そうでない
>とタスクセーブの意義が無くなってしまいますから。

とするとドライバはそれ用に作成されるということなんですね。
バッファをユーザ側に持つのでしょうけど、
(現状まで再現すべき)状態もそこに持たなければはいけないと。

#うーん何やら難しそうに感じてしまいます(苦笑) >ドライバ作成

>  これは、CSが指しているコードが書き換えられることを僕が毛嫌いし
>ているせいです。コードは、コード中に埋め込まれているstaticな変数
>も含めて、書き換え禁止です。

私も嫌いなんですけど、なんというか実現方法が思いつかないんです。
フルアセンブラならしごく簡単な話なのですが、
C言語を考え出すと、自動変数という問題と
スタティック変数とヒープメモリにある変数……これをどうやって
配置すればいいのか(一緒にしてしまえばそれだけですが)。
DS が不確定のときにどう読み出せばいいか(まぁOSの役目でしょうが)

特に問題は自動変数なのですが……。
私はスタックがメモリを食いつぶすしたり、
そのこめに余計にスタックを獲得しておくのは大嫌いなのですか、
セグメントを分けてしまうと、参照問題がいろいろと……。

#ページングと上方伸長スタックセグメントを使えばなんとかなるか?

>それで、現在はスタートアップルーチンを埋め込んでいます。
>このスタートアップルーチンはCSの内容をリードしてDSにコピーします。

なるほど、たしかに問題なしですね。でもメモリが無駄に……。
ん? ページングテーブルの Write bit でやればなんとか
なるのかな(^^;;

>同じコードで走るプログラムが複数走っている場合、メモリ上にコードは
>1つしかロードされません(今はこの機能が有効にされていませんが)。

これ理想ですよね。本当にそう思います、はい。

>  僕が本命視しているのはCASKAという言語で、これはASKAとC言語の
>混在を許した言語です。それまではマルチセグメントにあこがれる
>ユーザーは、ASKAでプログラミングするしかないでしょう。

なんと。それは魅力ですね。
たしかに C言語って、マルチセグメントを想定されてませんね。

>  他のみなさんも、今はお忙しいことと思われますが、機会があったら
>手ごろなところからチャレンジしてみてください。

なんか私は、こういう意味で役立てそうになくて
ごめんなさいです(汗) ほんとうに。

---
なべちゃん !Atmark! abk   ## This mail address is official. ##
 (web-site http://100.abk.nu/html/top.htm)