[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)