[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 2344] Re: trevize2, estoril2.
- Subject: [OSASK 2344] Re: trevize2, estoril2.
- From: Hidemi KAWAI <kawai !Atmark! imasy.org>
- Date: Sat, 20 Oct 2001 06:03:19 -0000
こんにちは、川合です。
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/