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

[OSASK 3034] Re: adelaid6.



  こんにちは、川合です。


KOYANAGI Masaaki さんは 2002/01/26 10:08:16 の「[OSASK 3032] Re:
 adelaid6.」で書きました:

>adelaid6 を試しました。

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

>やはりファイル書き込みをサポートするとテスト項目が増えますね。

  ええ、けっこうめんどうです(笑)。

>サイズ 0のファイルを tviewc05 や bmpv03 で開くと、
>INT 0x0D General Protect
>CS:EIP = 90:387 EC=0 が出ました。
>beditc00 では問題ないのでアプリケーションでチェックが足りない
>のかもしれません。

  これについて原因が分かりました。アプリケーション側の問題なので
すが、結局、僕が悪いのです。

  tviewc05や、bmpv03のモジュールマッピングのサンプルになったであ
ろうと思われるintroc01のtviewc00では、

    lib_mapmodule(0x0000 /* opt */, 0x0210 /* slot */, 0x5 /* R-mode */,
        (filesize + 0xfff) & ~0xfff /* map-window size */, fp, 0);

のような方法でマッピングしていました。問題はこの4番目の引数です
。

  "map-window size"というのはようするに貼付け先のメモリ空間の広
さです。最大でこのサイズまで貼ってよいという指示なのです。この説
明は、introc01のtviewc00.txtにも書かれています。

  本来、ここはファイルサイズとは無関係に、map-window sizeである
ところのareasizeを指定するべきでした。つまり、

    lib_mapmodule(0x0000 /* opt */, 0x0210 /* slot */, 0x5 /* R-mode */,
        areasize /* map-window size */, fp, 0);

としていれば良かったのです。それなのに、filesizeを4KB単位に切り
上げた値を指定するようにしていました。

  filesizeが0でないあいだは、これでもうまくいきました。しかし、f
ilesizeが0になると、"map-window size"として0を指定したことになり
ます。こんな指定はナンセンスです。貼るためのスペースがないくせに
マッピングを指示するなんていうことに意味があるでしょうか?・・・
したがってこの引数を0にするのは許されない指定だったのです。アプ
リ安全モードなら、間違いなくエラーになるところです。そしてシステ
ムはこの状況に混乱して、死んでしまいました。

  beditc00の方は、ファイルサイズに依存することなくlib_mapmodule(
)していました。だから問題がありませんでした。

  tviewc05の方も、このように修正しました。tviewc5cです。はっきり
いってfilesizeを4KBに切り上げるための余計な計算をしなくていい分
だけ、プログラムがコンパクトになっています(笑)。おせっかいな処
理のために死んでいたなんて、なさけないことこの上なしです。

  もちろんこのtview5cを今までのOSASKで動かすことも問題なくできま
す。tviewc5cはとりあえずベータリリースです。

>CS=90 が示す場所はどこでしたっけ?

  CS = 0x0090は、PAPIです。

>現在のCSとモジュールの場所の対応関係を分かりやすい
>サブジェクトで新規に投稿していただけると助かります。

  はい、そうします。"エラー情報解説(1)"というサブジェクトで今日
中に投稿します。

>> 2.アプリケーションプログラムによるファイルサイズ変更をサポート
>アプリケーションがファイルを作成したい場合はシェルに依頼する
>のでしょうか?

  アプリケーションは、基本的にはファイルを作りません。

  設定ファイルやログなどのファイル名を固定したファイルは作業ディ
レクトリ内に作るかもしれませんが、それ以外の一般的なファイルは作
らせないというのが方針です。

  これはもうちょっと詳しく説明した方が分かりやすいでしょう。

  OSASKではメモリマップトファイルというアクセスの都合もあって、
たいていのアプリケーションでは、ファイル名を決めないままファイル
をいじったりはしないでしょう。・・・そうですねえ、テキストエディ
ターを例に取りましょう。

  Windowsのメモ帳などのテキストエディターでは、ファイルを指定し
ないで起動することができて、その場合、終了時に保存先を決めるか、
編集内容を破棄します。しかしOSASKのテキストエディターでは、こう
いう仕様ではないかもしれません。起動時にファイルセレクターが出て
編集ファイル名を決めなければいけないかもしれません。

  その場合、ファイルセレクター内で新規ファイルを作ります。もちろ
ん今のpokonはバカなので、ファイルセレクター内で新規ファイルを作
ることができず、へっぽこコンソールを使わなければいけません。しか
し将来はそうではないでしょう。pokonのファイルセレクター内でしか
るべき操作をすれば、新規ファイルが出現するのです(Windowsでも右
クリックして、新規作成→テキスト文章と選んでいけばできますが、そ
れと同じ事です)。・・・そして、できた新規ファイルを即座に選択す
るわけです。

  これが、OSASKのファイル作成のスタイルなのです。ようするに、ア
プリケーションは自分の力でファイルを作る必要がないのです。

  しかしもちろん、アーカイブの解凍とか、ワーキングディレクトリ内
のテンポラリファイルの生成など、ユーザーにファイル名を決めさせる
必要が全くなくて、そんなところでいちいちファイルセレクタが出てき
たらみっともないし、事前に空のファイルを作っておかなければいけな
いというのも不便なだけ、という状況ももちろんありえます。・・・そ
のために、ファイルの生成や削除も将来はできるようになります。でも
今は面倒なのでまだ作っていません。そういうことです。

  なお、メモリマップトファイルであっても、Windowsのように出力先
を決めないまま気軽にエディットして、終了時に出力先を決めるという
こともアプリケーション側でちょっと工夫すれば簡単に実現できます。
それはようするに、自分の作業ディレクトリ内に、適当なテンポラリの
テキストファイルを作ってそれを編集すればいいというだけのことです
。まあ、この機能をサポートしないアプリに対しては、シェルが代行し
てファイルを作ってやってもいいですが。・・・ようするに、どうにで
もできるわけです。

  ここで出てきた「作業ディレクトリ」というのは、アプリのタスクデ
ィレクトリのことです(タスクごとに生成され、タスクが生存している
間、ずっと存在する)。ログなどのずっと残しておきたいファイルは、
他の種類のアプリディレクトリに作ればいいでしょう。

>また test028 を終了しないと、コピー元のファイルもコピー先のファイル
>も更新できないのですが、 test028 の方でコピーした後も
>ファイルをオープンしたままということでしょうか?

  いえ、そんなことはないはずです。・・・ということで追試しました
。

(1)create aaa.txt
(2)test028で、適当なテキストファイル(418バイト)をソースとして指定
(3)続いて、aaa.txtをデスティネーションとして指定
(4)test028のウィンドウに「Copyed!」と表示されたのを確認
(5)test028を終了することなく、pokonでaaa.txtを指定
(6)ちゃんとコピーされているようです

・・・ということで、僕の方ではtest028の終了の前にもアクセスでき
ることは確認しました。

  ええともし、小柳さんのおっしゃっていることが、test028を終了し
ないとdeleteやresizeなどができないというご指摘でしたら、それはそ
のとおりです。ファイルハンドルを再初期化していないので、test028
ではオープンしっぱなしのようにシェルから扱われています。

  (実は、pokonの手抜きというか、えせファイルシステム全体の手抜
きのせいで、アプリがファイルハンドルを再初期化しても、タスクを終
了するまでオープン中の扱いを受けます。・・・すみません。)

---

  さあ、根性さえあれば、コンパイラやテキストエディターを作れる状
況になりました。もちろん、バッチファイルなどを作ってコンパイルか
らリンクまでを自動的にやる、なんてことは夢のまた夢ですが、まあ自
分でアプリを起動するなどの手間さえかければ(そしていちいち出てく
るであろうファイルセレクタで入力ファイルと出力ファイルを選択すれ
ば)、とりあえずネイティブのアプリ開発環境が構築できます。

  こうなると、「OSとして落ちない」ことが重要になってきます。アプ
リ安全をサポートする日も近いかもしれません。その時には、「落とせ
るものなら落としてみろコンテスト」みたないものを開催するかもしれ
ません(笑)。みんなでめちゃくちゃなことをするアプリを作って、そ
のタスク以外に影響を及ぼせたら勝ち、というものです。


  それでは。

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