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

[OSASK 2344] Re: trevize2, estoril2.



  こんにちは、川合です。


Koyanagi Masaaki さんは 2001/10/20 11:26:46 の「[OSASK 2342] Re:
 trevize2, estoril2.」で書きました:

>trevize2 を試しました。

  ご報告ありがとうございます。

>これですが、例えば16ドットフォントでコードが16ビットなら
>
>( 0x0000 〜 0xffff ) * 16ドットフォントのデータ長(32バイト) = 2 MB
>
> のメモリ空間を用意して、フォントデータの存在する部分だけ書き込んで
>いけば、OSASK のメモリ管理では、書き込み/読み込みを行わないページは
>実際にはメモリは消費されないので、問題ないと思いますがどうでしょうか?

  なるほど、これはなかなか面白い案です。

  しかし残念ながら、話はそう簡単には行かないかもしれません。

  今のOSASKは、事前に文字フォントデーターをvgadrv0内のワークエリ
アへ転送しておいて、文字を表示する時はそのワークエリアからフォン
トを転送するようになっています。これはルーチンの簡略化と高速化の
ためです。

  仮にvgadrv0のワークエリアを2MBにすれば、確かに小柳さんの方法が
使えるようにはなるでしょう。

  一方、vgadrv0はシステム共有アドレス空間に配置されるべきという
扱いをしています・・・と言っても意味が分かりにくいので説明し直し
ます(笑)。

  OSASKは多くのシステムルーチンから構成されています。そして、OSA
SKではシステムルーチンを2つの種類に分けています。

・タスク寄生型(モノリシックカーネル風)
・独立タスク型(マイクロカーネル風)

  独立タスク型のシステムルーチンは、そのルーチン全体が「タスク」
として扱われるもので、高い独立性と安定性、開発の容易さが特徴です
。もし全てのシステムルーチンをこの独立タスク型にすれば、OSASKは
完璧にマイクロカーネルOSになります。現在のところ、winman0とpokon
0が独立タスク型です。

  一方、タスク寄生型のシステムルーチンは、独立した「タスク」を割
り当てられません。それはアプリケーションタスクのあまったメモリ空
間を占領して、必要に応じて呼び出されて稼動します。tapi0やvgadrv0
などがこれに分類されます。呼び出しのためのオーバヘッドが小さくて
済むという特徴があります。もし全てのシステムルーチンをこのタスク
寄生型にすれば、OSASKはモノリシックカーネルOSになります。

  僕の設計方針では、頻繁に呼び出されるもの(=頻繁に出たり入った
りするもの)はタスク寄生型にして、それ以外は独立タスク型にすると
いうものです。なにしろ、タスク切り換えというのはコストのかかる処
理です。システムコールごとにタスクディスパッチャーをくぐるなんて
いう「暴挙」は僕にはできません(これを厭わないのがマイクロカーネ
ルOSです)。

  それでvgadrv0はタスク寄生型のシステムルーチンなので、どのタス
クからも一様にアドレス空間をもぎ取る事になります。アプリケーショ
ンの自由になるアドレス空間は基本的には4GBですが、ここから2MBがvg
adrv0だけで消費されるわけです。アドレス空間の広さというのは、CPU
のアーキテクチャーに依存する枠で、これは増やせません。その限られ
たリソースをメガバイト単位で食ってしまうというのは、僕にはためら
われます(いや、必要があって使うならいいと思うんですが、必要ない
のに使うっていうのが・・・)。

>http://homepage1.nifty.com/dreaming/osask/jpn16s2.lzh
>に置きました。

  ありがとうございます。

>半角カタカナのマッピング位置が変更されたようです。
>元の JPN16.FNT に 0x7421〜0x7426 を加えただけのものだと半角カタカナが
>正しく表示されません。

  ダウンロードしてソースを見ました。・・・ああ、やっぱり(笑)。

  問題のget_offset_hankaku()ですが、[OSASK 2334]の書き方に修正さ
れていました。しかし、ええ、これでも駄目なのです。

>result = (high - 0x21) * 0xbc0 + (low - 0x40) * 0x10;

この式では、0x2e40をコンバートすると、0x09ca0ではなくて0x098c0に
なってしまうのです。ですから正解は、

result = (high - 0x21) * 0xbc0 + (low - 0x40) * 0x10 + 0x03e0;

なのです。ちなみに、僕の好みでは、

result = (jiscode - 0x2e40) * 0x10 + 0x09ca0;

です。

  いや、きっと[OSASK 2334]は小柳さんの書き間違いだろうと思ってい
たので、あまり気にしていなかったのです。不親切ですみませんでした
。

>2000JIS を調べてみようとは思っていますが、少し時間がかかりそうです。

  ええ、時間がかかりそうな事は、僕も少し手を出してみてよく分かり
ました(笑)。来月以降でかまいませんので、分かったら教えてくださ
い。お願いいたします。

># テストに使用していた FD が 1枚不良セクタが出ました。
># 1 か月前に使用開始してまだ20〜30回くらいしか書き込みを行っていない
># のですが。捨てることにしました。

  以前の僕と似たような状況です。

  最近思うのは、「ドライブをクリーニングして、ブランドものを使う
と結構長持ちするなあ」ということです。maxellは今のところ全く痛ん
でいません(笑)。


  それでは。

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