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

[OSASK 714] Re: ssizz1.



  こんばんは、川合です。


Koyanagi Masaaki さんは 2000/06/01 23:47:51 の「[OSASK 711] Re: 
ssizz1.」で書きました:

>> に、TAPIが急におかしくなって、悩まされてしまったのです。・・・し
>> かも、情けないことに、TAPIは全くバグがなく、単に僕の勘違いだった
>> のです。丸一日がこれに費やされました。
>さし使えなければ、具体的に教えて下さい。技術勉強になるかもしれないので。

  差し支えはないので、お教えいたしますが、あまりにくだらないので
技術的な勉強にはならないでしょう。

  まず、ssizz0とssizz1とは、内部的には大きな違いがあります。ssiz
z0は全タスク数が4つですが、ssizz1は全タスク数が6つです。その内
訳は、以下のようになっています。

  ssizz0
    ・count up - 1
    ・count up - 2
    ・count up - 3
    ・そのほかの全てをこなすビッグタスク

  ssizz1
    ・count up - 1
    ・count up - 2
    ・count up - 3
    ・music player
    ・scratch pad
    ・そのほかの雑用(入力切り替え処理など)・・・シェル的存在

  この移行作業中に、トラブルが起きました。メモによると5/30の出来
事です。・・・なんと、入力をかちゃかちゃと切り替えると、不意に、
カウンターが停止してしうのです。

  そこで、原因を探るべく、調査が始まりました。カウンターがとまっ
てしまう原因は、複数考えられます。

  1.timerがなんかの拍子に暴走した。
  2.TAPIが狂って、時分割マルチタスクできなくなった。
  3.アプリケーションがバグって、高い実行レベルにとどまっている
      。
      などなど・・・

  で、地道な調査の結果、このカウンター停止は雑用タスクから"scrat
ch pad"タスクへカーソルブリンキング停止シグナルを送信した直後だ
けに起きることがわかりました。それで、タスク間通信ルーチンが一番
怪しいと、目星をつけました。

  それで、ソースのあちこちにブレークポイントを仕掛けて、タスク間
通信後に何が起こっているのかを調べました。このブレークポイントの
セットは、素敵なデバッガがあるわけではないので、ソースを直接いじ
って、レジスタの内容をダンプさせるルーチンに分岐させているだけで
す。俗に言う、printfデバッグってやつですね。

  それで、地道に流れをたどったところ、数字時間後に、ついに、TAPI
が悪いと分かったのです。雑用タスクから"scratch pad"にカーソルブ
リンキング停止シグナルを送信したあと、すぐに雑用タスクはスリープ
するのですが、このスリープが効いていないのです。それで、ソースを
じっと見て、僕は考えました。スリープが失敗してしまう理由というの
が分からなかったのです。TAPIのソースを引っ張り出して、すみからす
みまでアルゴリズムを洗いましたが、そんなことは起きるわけがないの
です。・・・そうは言っても起きているわけで、ああ、僕のプログラミ
ング能力もここまでかと、あきらめモードに入りました。それで、とり
あえずブリンクはやめて、この問題はソース公開のときにTAPIを作り直
すことで解決させよう、と何度も思いました。でも、そのたびに、いや
、そんなことじゃだめだと、考え続けたのです。

  ・・・くたくたになったころ、ふと、思いました。そういえば、TAPI
の初期設定のところで、タスク数の設定があったよなあ。あれ、ちゃん
と増やしておいたかなあ?うん、多分増やしたな。・・・ま、一応確認
しておくか・・・。・・・あれ、ssizz0のときと同じ設定になっていた
よ。じゃあ、ちゃんと増やしておこう。・・・あーあ、こんなところを
修正しても「不眠症バグ」(スリープできなくなったから、こう呼んで
いたんです)には関係ないよなあ。なんでだろう。どうしてここのポイ
ンタがくるうんだよぉ〜。そんなことありえないのに。・・・ブリンク
やめようかなあ・・・。

  さて、日が昇りはじめる時刻になって、最後にコンパイルし直して、
実行して、もう寝ることにしました。・・・すると、奇跡が起きて、不
眠症バグは直っていたのです。その時のメモ。

  「・・・よくわからないうちに、直った。もしかして、本当にタスク
    数を間違えたのが原因なのか?」

  「めでたいが、なんだか非常にくやしい。」

  ちゃんちゃん。

  なお、確かにタスク数の設定の間違えれば、不眠症になりうるかもし
れないとソースレベルで確認しています。もっと早く、これに気付いて
いれば・・・。

  これに懲りて、すぐにTAPIの初期化ルーチンの自動化(タスク数を数
えるとか)をしたのは、言うまでもありません。

>>   TAPIのコアがしっかりしてきているので、デバッグがやりやすくなっ
>> ています。だから、バグはほとんど残っていないはずです。ぶい!
>デバッグはシステムコンソールにメッセージを表示してやっているので
>しょうか?ssizz1のデバッグモードに入るオプションがあったりして。

  するどい!・・・あまりにも鋭い指摘です。デバッグモードに入るオ
プションはないですが、それに相当する隠し機能が存在しています。メ
モリの好きな場所を覗く機能です。16バイトずつしか表示しませんが。

  ここまで書いてしまうと、やってみたい、といわれるのは必定なので
、やり方も書いておきます。

  "scratch pad"で、「dump 0」と入力して、Enterを押してみてくださ
い。「d」の前にスペースがあってはいけませんし、dumpは必ず小文字で
入れてください。後ろの数は16進数です。これは、そんなに厳密なエラ
ーチェックをしているわけではありません。変な入力をすれば、暴走す
るかもしれません。だから、秘密です。


  それでは。

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