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

[OSASK 653] タスク間通信一般論.



  こんばんは、川合です。

  相変わらず、TAPIを書いています。早くTAPIを切り上げて、ディスク
アクセスルーチンに着手したいんですが・・・。

  OSASKでのタスク間通信の仕様がだいたい決まりました。イメージを
説明しましょう。

  タスク間通信とは、自分以外のタスクに向かって、メールを送るよう
なものです。マルチスレッドのアプリケーションの場合に、スレッド間
のやり取りに使います(マルチスレッドの場合、ファイルを共有するこ
とで、データーを緊密に交換するという手法もある・・・この方法もも
ちろん可能)。

  この「メール」というたとえが、一番いいのです。手紙というと、い
つ届いたのかが、郵便受けを見張っていないと分からないイメージがあ
るし、かといって電話だと、どうでもいいようなことでもリンリンと呼
び出されるイメージがあるからです。タスク間通信では、送ったことを
知らせるために受け取り人をたたいたり、つねったりすることができま
すが、それはやってもやらなくてもいいんです。たたくかつねるか何も
しないかのどれにするかを、送信者と受信者の両方から設定できます。

  このメールは、システムからの通知にも使われます。終了しなさい、
とか、「ABCDE」と入力されました、とか、ボタン#12がクリックされま
した、とか、そういう通知です。もし、タイマーをセットしたなら、時
間になりました、なんていう通知も来ます。

  このメールに関してですが、誰に送るかを決めるときに、メールアド
レスのようなものが必要になります。しかし、このメールアドレスはシ
ステムのセキュリティーのために完全に秘密にされます。具体的なメー
ルアドレスは分からないまま、タスク間通信をしなければいけないので
す。じゃあ、どうやって相手を指定するのかというと、送信先のタスク
に「あだ名」を付けます。けんちゃんとか、よっちゃんとか、そんな感
じです。けんちゃんといわれても、本名が「山田謙一」なのか「田中健
太郎」なのか分かりません。けんちゃんと呼ばれる理由が「けん玉が得
意だから」だったりするかもしれません。

  あだ名と本名との対応関係を知っているのは、システム(シェルも含
む)だけです。しかもどのタスクも相手はメール友達でしかありません
。だから、シェルがこっそり対応関係を入れ替えても、ばれません。こ
の入れ替えは、タスクが動いている最中だってできます。もちろん、シ
ェルはなんでも知っているんですから、「僕はジョンだよ」と嘘のメー
ルを書くこともできます。タスクはあっさりとだまされてしまうことで
しょう。

  シェルができることはこんなものではありません。全てのメールを検
閲することだって可能です(これは、タスク間通信に関するデバッグに
は有効だと思う)。そして、このシェルもユーザーのいいなりになるん
ですから(セキュリティーがある場合は除く)、アプリユーザーやプロ
グラマーの支配力は絶大です。

  他のタスクに、自分の友達を紹介したい、なんてこともあるでしょう
。その場合、ボブのメールアドレスをトムに伝えなきゃいけない、など
というややこしい状態になります。でも、ボブのメールアドレスは知ら
ないし、だからメールに書くことができません。トムに向かってボブと
言っても、トムは「ボブ」というあだ名を既に他に使っているかもしれ
ませんし、全然通じません。ということで、紹介はシステムに頼みます
(コピーハンドル)。トムの方では紹介される前にあだ名を決めておき
(ここでは太郎とする)、システムコールによって、太郎=ボブとなる
わけです。

  もちろん、タスクはいつでもいくらでも自分の友達を他の友達に紹介
できるというわけではありません。シェルが許さなければできません。
シェルは誰と誰が交友関係にあるかを知ることができますし、いつでも
それを妨害したり、捻じ曲げたりもできるわけです。

  ちなみに、各タスクは自分の本名さえも知りません。そもそも本名な
んてないんです。だから自分の本名を友達に教えることもできません。
全ては相対的な関係で、全てを知るのはシステムだけです。

  もちろん、タスク間通信は同じマシンの間でやり取りされるとは限ら
ず、他のマシンでもいいです。ネットワークによるタイムラグはありま
すが、タスクからは全く同じようにみえます。

  それでは。

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