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

[OSASK 1583] Re: townes1.



  こんばんは、川合です。


Koyanagi Masaaki さんは 2001/03/12 21:46:32 の「[OSASK 1581] Re:
 townes1.」で書きました:

>>   どうにかこうにか、TOWNSでもマウスが使えるようになりました。そ
>> の他の変更点は以下の通りです。
>こんなに早くマウスが使えるようになってうれしいです。

  僕もうれしいです。がんばりました。

>マウスでウインドウの移動とウインドウを閉じることができました。
>かなり完成度が高くなりました。

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

>> ・FDDのアクセスランプ問題について対処してあります。
>アクセスして一定時間経過するとちゃんと消えるようになりました。
>アクセスランプの制御ができたりするのでしょうか?

  はい。TOWNSはAT互換機よりもずっとよい設計がなされていて、実際
のアクセスとは独立してアクセスランプを制御できます。複数のランプ
を同時に点けることだってできます。これはとても好ましい仕様だと僕
は考えています。

  僕の「ぼやき」ページにはAT互換機のFDC(フロッピーディスクコン
トローラー)には、ディスクが挿入されたことや取り出されたことを検
知する仕組みすらないという愚痴を書き連ねている部分がありますが、
TOWNSはこれらのイベントをちゃんと検出できます。いいハードウェア
ですねえ。・・・「いい」っていうより、これが当然だと僕は思います
が。

>> ・「SYSREQ」などを押しても平気です。
>できれば「HOME」と「END」がpokonで有効になるとうれしいです。
>通常キーでは「HOME」はありますが「END」が無いので、「半角/全角」を
>「END」の替わりとして使えてもいいかなと思います。

  SYSREQと同列にある「HOME」と「END」を、AT互換機の「Home」と「
End」と同じ機能を持つようにするっていうのには賛成です。しかし、
「半角/全角」キーを代わりにするっていうのには賛成ではないです。
この辺の代用は、ユーザーが動的に変更できるべきだと思っています。
そのための布石を考えているところですので、しばらくお待ちください
。

>起動してから COUNTUP4 のみを起動すると、Pentium90MHzで
>townes0 では 2202?kc/s
>townes1 でマウスを動かさないと 2199?kc/s
>マウスを動かすと 最低値が 2176?kc/s くらいでした。

  マウスを動かすと遅くなるというのはしょうがないので、僕としては
気にしていません。僕が気にしているのは、動かさなくても遅くなって
しまう問題です。この場合、差は0.14%くらいですね。僕があらかじめ
示した「0.5%以下」を満たしていて僕は満足です。この負荷を減らす
ために、それなりのテクニックを使っています。

  TOWNSはマウス周りの設計はAT互換機に負けています。AT互換機のPS/
2マウスでは、状態変化があった時だけ本体側にシグナルを送ります。T
OWNSのマウスはいわゆるMSXマウスですが、これにはそういう機能はあ
りません。一定の時間間隔で状態を読み取って、変化があるかどうかを
判断しなければいけません。今は、20ミリ秒に一度の間隔で状態変化の
有無をチェックしています。この間隔をもっと長くすれば、マウスを動
かさない時の速度ダウンは減らせます。

  MSXマウスの状態を読み出すためには、数十マイクロ秒オーダーの時間
待ちを4回ほどやる必要があります。これはかなり微妙です。たとえば、
40マイクロ秒といったら、386TOWNS(16MHzの場合)にとってはわずか640
クロックです。このような少ない時間間隔を確保するには、CPUの割り込
みを禁止してアイドリングループによるソフトウェアウェイトをかける
のが普通のセンスです。実際、V98ではそういうアルゴリズムになってい
ます。

  townes1では違う方法を使っています。というのは、この方法は小柳さ
んのPentium 90MHzには40マイクロ秒という時間はたかだか640クロック
の損失ではなく、3600クロックもの損失だからです。386にとっての640
クロックのロスはせいぜい200命令の損失ですが、Pentiumの3600クロッ
クは3600命令もの大損失です。これは僕にはあきらめきれない損失です
。

  アイドリングループを嫌うなら、タイマー割り込みを使うのが普通で
す。しかし数十マイクロ秒オーダーの割り込みを正確におこせるでしょ
うか。普通のOSですとこれは期待できません。そしてあまりもたもたし
ているとMSXマウスはこちらの期待に添わない動作をしてしまいます。
それで結局、アイドリングループにならざるをえないのです。確かめて
いないので断言はできませんが、今までのTOWNS用のソフトウェアでマ
ウスを使っているものは全てアイドリングループを使っていることでし
ょう。

  しかし、OSASKば普通のOSではありません。数十マイクロ秒オーダー
の割り込み制御だって、(かなり限界には近いですが)なんとかこなし
ます。速いCPUならこなせるのは当たり前です。しかし16MHzでもこなす
のです。これを検証するのは簡単です。高速モードではなく、互換モー
ドでtownes1を起動してください。全体的にかなり遅くなります。しか
し、マウスカーソルが動かなくなったり飛んだりはしません。僕はCPU
の速度によってアルゴリズムを変えるような複雑なことはしていません
(これは月末のソース公開まで確認できませんが)。

  最後に、一つの数字を出したいと思います。もし、アイドリングルー
プでマウス状態を読み出すなら、一回の読み出しに際して200マイクロ
秒(=80+40x3)の間CPUは他に何もできません。1秒間に50回サンプリ
ングするなら、1秒間に10ミリ秒もの間CPUが他に仕事のできない状態に
なっていることになります。つまり、きっかり1%だけCPUの処理能力が
落ちるのです。この1%という数字はCPUのスピードに関わらず、1%で
す。

  それをtownes1はPentium 90MHzで0.14%にまで下げたのです。・・・
ですから、townes0に比べて遅くなったなんてがっかりだ、なんて思わ
ないでほしいのです(文面からすると小柳さんはがっかりしているよう
には見えませんが、他の方でがっかりなさっている方がおられるかもし
れないと思いました)。本当は1%以上の低下があるはずのに、それを0
5%以下に抑えているんです(16MHzだとさすがに1%になるかもしれま
せん。ご了承ください)。

(winman0のバグ)
>が起きた時に左上に白文字で000000C0 FFFFED40 と出ます。

  ご報告ありがとうございます。明日以降にこの結果について考察して
みます。

>また現在winman0.c を改良して、アクティブではないウインドウを一度
>アクティブにしてもう一度ウインドウドラッグや終了ボタンを押すという
>手順を踏まずに、アクティブではないウインドウをドラッグするとアクティブ
>になってそのままウインドウ移動ができたり、終了ボタンを押すと終了したり
>するようにしたいと思ってソースをいじっているのですが、まだできて
>いません。

  ああ、なるほど。

  ええと、今の仕様は明らかにWindowsとは異なっています。そして小
柳さんが上記で書かれているような仕様こそWindowsと同じ仕様です。

  それで僕が現在の仕様にしたのは、難しいとか面倒だとかいう理由で
はなくて、単に僕の好みだったからです。もし小柳さんが上記ルーチン
を書いてくださったら、切り替えられるようにします(それと余計な混
乱を起さないために、デフォルトは小柳さんの方にします)。


  それでは。

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