[kernel-ml 36] Multi TASK

藤永清和 (NBA01614@niftyserve.or.jp)
Tue, 13 Jun 1995 20:57:00 +0900

 kernel-mlのみなさん、こんばんは藤永です。

    非同期処理をしたいためにマルチタスクが望まれる。

  「タスクとプロセス」
隆一さん より>
プロセスというオブジェクトを中心核で関知しないものとすれば、TCB は変更
の必要がないと思います。B-Free OS では、BTRON の他に POSIX のインタフェー
スも動くようにする予定ですが、BTRON プロセスと POSIX プロセスは同じ動
きをするわけではありません。
中心核からみると同じプロセスに属するタスクは、仮想空間を共有しているタ
スクに見えるだけです。
<<
 「中心核はプロセスを認知しない」ということ、了解しました。
 LOWLIBのページフォールトハンドラの登録(vset_vmh)もタスク毎ですね。

 メモリマネージャとプロセスマネージャは、タスクとプロセスの関係を管理する必
要が有ると思いますが、プロセスマネージャが管理して、メモリマネージャは参照(
問い合わせ)すればよいでしょうか。>Joyさん

  「プロセス内タスクでスタックを共有」

 隆一さんのお考えは、だいたい分かりました。と思う。

Joyさん>>
 もともと同一プロセス内ではファイルディスクプリタ等の共有を行います
し、当然使うべきスタック領域もプログラム作成者が管理しているとして良い
でしょう。
<<

 Joyさんの言われるように、同一プロセス内のデータについてはプログラマが管理
するという前提なら、スタックの共有をしても良いと考えます。

同一プロセス内のタスクは、同じ仮想空間のことなるアドレスにスタックを置いて相
互にアクセス可能とするが、「タスク間でスタックの中身を共有する」のを保証する
のはプログラマの仕事。スタックオーバーフローはシステムで監視る。
ということですね。

隆一さん>>
簡単に言えば、「あるタスクが子供のタスクを生成した場合、子供のタスクの
処理が終わるまで処理を中断する」というのが基本になると思います。
<<
というのは、プログラマがやることで、システムがそのように制限するわけではない
のですね。
 そうであれば、あとは、スタックチェックの複雑さ(困難さ)がどの程度かだけの
問題です。

 子タスクを関数のように呼び出す場合でも、大域変数でなく、static変数は使えま
す。また、大域変数であっても必ずしも排他処理が必要とは限りません。

 ところで、他タスクを関数のように呼び出す場合、子タスクを生成して実行させる
方が、先に生成、起動しておいて(子タスクは待ち状態)、メッセージやイベントフ
ラグで起床させるより効率が良いのでしょうか?