隆一さん[kernel-ml 29]より>
注意しなければいけないのは、C 言語では、局所変数は必ずしもひとつの関数
の中でのみ見ることのできるデータを意味していないということです。
局所変数のアドレスを大域変数(ポインタ)に入れたり、引数で渡すことによっ
て、その関数以外でも見ることができるようになります。
<<<
そのとおりです。しかし、局所変数は、呼び出された関数では保証されますが、変
数を定義した関数が終了したら消えて亡くなるものでしょう。だから、局所変数(自
動変数)を引数で引き渡すことはあっても、大域変数に入れて別の関数に参照させる
ようなコーディングをしたことがありません。
たとえば、隆一さんが[kernel-ml 21]で示されたプログラムで、task1が、終了し
たあとでは、task2は、あらぬデータをアクセスします。
局所変数を大域変数に入れて他の関数やタスクに渡すのは非常に危険なだけで利点
があるとは思えないのですが?
隆一さんの趣旨は、「スタック上の局所変数なのか、それとも大域変数なのか判別
すること」が困難だから、
*というわけで、私は「タスク間でスタックの中身を共有できない」という仕様
*には反対です。
なのですね。
しかし、スタックの共有を許したところで、スタック上の変数が保証できるわけで
はありません。
プロセス間でも、スタックに積まれたデータを共有メモリを介して参照するコード
を書くことは可能です。しかし、それは認めませんでしょう?
「タスク間でスタックの中身を共有する」ことを保証する方法が思い付きません。
まだ、私の勘違いや誤解が有るかもしれません。で、この件については次回ミーテ
ィングのときに議論して、結論はしばらく待っていただきたいと思います。
いまのところは、「プロセスは、一つ以上(一つまたは複数)のタスクを持てる。
」ことを実現するためには、TCBやPCB(プロセス管理情報)にどんなデータが
必要か考えておきたいです。(プロセス内マルチタスクは電祭までに実現しなくても
よいと思いますが)
ブートシーケンスとメモリ管理のおさらいをしたい 藤永
追伸:システムコール以外の周辺核同士のインターフェースも考えなくちゃ。