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

[OSASK 1506] Re: memory management.



  こんばんは、川合です。


nabe さんは 2001/02/15 20:58:05 の「[OSASK 1505] Re: memory mana
gement(Re: web pages).」で書きました:

>>  はい。TSSは、なんだかんだいっても、かなり高速なタスク切り換え
>>方法だというのが僕の見解です。現在のバージョンでもふんだんに使っ
>>ています。
>管理もしやすいですしね。GDT に ごろごろ TSS が出てくるのが
>チョェトだけアレですけど(^^;;

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

>>>私は、メモリの管理機能を細分化するのがいいのかなぁーとか思ってます。
>>  細分化???
>役割ごとにコードを分けるという意味です。
>ただ、分けすぎるとダメダメになりますので、難しいところです……。

  これは、メモリの用途によって管理方法を変える、ということなんで
すか?・・・うーん、メリットは僕には分かりませんが、新しい考え方
かもしれません。

>>  タスクはそれぞれディレクトリを持っていてそのディレクトリの中に
>>スタックやワークエリアのファイルが作られるわけです。タスクに関す
>>るあらゆる情報はこのディレクトリに集中しています。これをまとめて
>>1つのファイルにすれば、それがタスクセーブです。
>なるほどそういうことだったのか……。面白いです。
>タスクセーブで疑問に思ってたのですか、
>使用してるドライバの状態(例えるなら I/O の状態)とかも
>やっぱりこの中ってことになるんでしょうか。

  もちろんです(きっぱり)。

  タスクを再開するのに必要な外部情報は、保存されます。そうでない
とタスクセーブの意義が無くなってしまいますから。

>必要になるたびにメモリを張り付けて……と。
>今想定してるのは、cs = ds = ss な環境ですか?
>(無論 cs と ds などは alias の関係)

  いいえ。今の標準でさえ、CSはDSやSSに等しくありません。・・・こ
れは単にセグメントセレクタ値が等しくないという意味ではなくて、ベ
ースアドレスからして違うという意味です。

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

  32bitのCの処理系で、この僕の意図を反映できるものは見つかりませ
んでした。それで、現在はスタートアップルーチンを埋め込んでいます
。このスタートアップルーチンはCSの内容をリードしてDSにコピーしま
す。

  ASKAでは、もちろんCS == DS == SSのような暗黙の了解がないので、
自由に記述できます。コードのコピーもしないので、ワークエリアはコ
ードよりも必ず大きくなければいけない、なんていうばかばかしい制約
もありません。・・・ただいきなりfarポインタの世界に突入しても困
惑するだろうと思いますので、今はDS == ES == SSの範囲でプログラミ
ングできるように、説明を書いています。この範囲でなら、セグメント
オーバーライドプリフィックスを意識しなくてもいいですから。

  現在の設計では、CS, DS, ES, FS, GS, SSの全てのセグメントセレク
タが別々のところを指していてもまったく問題ないように設計されてい
ます。ただし、C用のライブラリなどでは、DS == ES == SSを想定して
いるものもあります。

  これは余談ですが、OSASKでは基本的にコードが書き換えられること
はないため、同じコードで走るプログラムが複数走っている場合、メモ
リ上にコードは1つしかロードされません(今はこの機能が有効にされ
ていませんが)。これによりメモリが節約されます。DLLもコードなの
で、書き換えを許しません。したがって、DLLコードが複数のタスクで
利用されていても1つ分しかロードされません。これもメモリ節約に貢
献するのは自明です。・・・ただC言語で書かれたプログラムだと、各
タスクごとに用意されたDS内にコードがコピーされるので、メモリ節約
効果はあまり期待できないです。

>これを関係を壊すと、CPU 的には美しいと私は考えてるのですか、
>そんな出力をするコンパイラを見たことがありません(汗)

  MS-Cなどは、メモリモデルをhugeにすれば、そういうコードを出力で
きたように思います。でも、それが32bitに対応したVCに引き継がれて
いるかどうかは知りません。

  結局、しょせんC言語はその程度の表現力しか持たない言語だったと
いうことです。僕が本命視しているのはCASKAという言語で、これはAS
KAとC言語の混在を許した言語です。それまではマルチセグメントにあ
こがれるユーザーは、ASKAでプログラミングするしかないでしょう。

---

  僕は今まで、OSASK-MLの皆さんにOSASK用のアプリを書いてみるよう
に薦めてきました。これは、OSだけができてもつまらないから書いてく
ださいという意味ではなくて、アプリを書いてみることで少しずつOSAS
Kの仕組みを体得してもらうためです。

  ASKAの良さは、使ってみなければ分かりません。それはハードルが高
すぎるという人のためにC言語でOSASK用のアプリを書く道も用意してい
ます。決して充分ではありませんが、サンプルも用意されています。

  シェル(winman0とpokon0)はあえてC言語で書かれており、ASKAの知
識がなくても改良できます。自分の書いたアプリとwinman0がどのよう
に交信するのかを探ってみるのは面白いでしょう。ASKAに慣れれば、シ
ェル以外のコードも改良できるようになります。

  最近はCでもASKAでも小柳さんの活躍がめざましく、僕はとてもうれ
しく思っています。その小柳さんの活躍に合わせて内部資料公開を整備
しようと考えているところです。

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


  それでは。

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