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

[OSASK 2771] Re: beditc00.



  こんばんは、川合です。


I.Tak. さんは 2001/12/22 11:49:25 の「[OSASK 2769] Re: beditc00.
」で書きました:

>>  beditc00をベータリリースします。
> 使ってみました。

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

> OSASK/AT1.9.で試したところ、bedit終了後も変更が生きているようでした。

  いや、その、状況によってはそういう事もあります(笑)。・・・厳
密にいうとそのファイルへのアクセス権をもった全てのタスクが終了す
ると、書き換えが破棄されてしまいます(本来ならこの時点までに実メ
ディアへライトバックしておくべきなのですが)。

>また、セキュリティ上問題に思えることがあります。試験は以下のとおりです。
>       1.countdownを起動(1)
>       2.beditを起動
>       3.countdwn.binを開き、GO!をToTに書きかえる
>       4.countdownを起動(2)
>       5.beditを終了
>       6.countdownを起動(3)
>この試験で書き換えの影響を受けるのは(2)のcountdownだけのはずです。

  いや、ところがどっこい、これこそアーキテクチャー上は正しい動作
なのです。

>しかし、実際に影響されたのは全てのcountdownでした。これはかなりまずいの
>ではありませんか? 実際、beditc00.binを書き換えたら、スタック保護例外で
>死にました。

  OSASKのメモリレス・アーキテクチャーでは、実行しているのも、エ
ディットしているのもすべてディスク上のデーターです。イメージとし
てはCPUが直接ディスクから内容をフェッチしていると想像してくださ
い。そして同じ対象をエディットすれば、それはもちろん影響するので
す。

  他の普通のOSでは、ディスク上のデーターを「ロード」しているため
ディスク上のデーターをいじってもロードされた部分に影響する事はあ
りません。しかしOSASKはメモリはキャッシュのようなもので、つまり
は透明な存在なのです。アドレス空間に「マッピング」することはでき
ますが、「ロード」という概念はなく、どうしても同じ事がやりたけれ
ばまずコピーを作って、そのコピーをマッピングしてください。そうす
ればそのコピーをいじられない限り、本元のデーターがどれだけいじら
れても影響しなくなります。

  これはセキュリティー上の問題を引き起こす事はありません。あるプ
ログラムが、現在使用中のファイルに書き込んで悪さをしようと思うか
もしれませんが、それを阻止するのは基本的にシェルの仕事です。シェ
ルはどのファイルがどのタスクによって使用されているかを把握できま
すし、各タスクがアクセスしたいと言ってきた時に本物を渡してもいい
ですしコピーした偽者を渡してもいいのです(もちろん、エラーという
ことにして要求を撥ね付ける事もできます)。

  またユーザーが「あえてやりたい」というなら、その時は本物を渡す
べきです。シェルがその辺の具合をちゃんと判断しなければいけません
(将来的にはセキュリティー関係をシェルから切り離して、シェルがこ
のルーチンにセキュリティー判定を依頼するようになるかもしれません
が)。

> まさか、デバッガの代わりに使えるから、とか……あ、便利ですね(^^;

  共有モジュールによるタスク間通信は、まさにこのアーキテクチャー
を使います。同じモジュールをオープンして、一方のタスクが書き込め
ば、すぐにもう一方から読める状態になるわけです。


  それでは。

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