(toppers-users 1003) Re: ACTIVATED_STACK_SIZEについて質問

Hiroaki TAKADA hiro @ ertl.jp
2003年 7月 27日 (日) 21:43:20 JST


堀江様

> swest5の徹夜部屋で伺った「移植の作業は実質一日」にショックを受けて再度勉
> 強中です(^^;

SWEST ではお世話になりました。「実質一日」はちょっと言い過ぎと思います。
一日で動くかもしれませんが、今回ご質問いただいたところまで詰めるのは難
しいように思います。

> スタック上にデータを積んでいるのはactivate_contextです。ところが
> これは最初にスタックポインタをスタック領域の最上位に設定しますので
> ext_tskの処理には影響を受けないはずです。

ご指摘の通り、activate_context は、スタックポインタを初期値に設定し、
そこを書き換えます。そのため、ext_tsk がスタックが空の状態で呼ばれた場
合に(タスクのメイン関数からリターンしたらこうなります)、ext_tsk が使っ
ているスタック領域を activate_task が壊してしまうおそれがあります。つ
まり、ext_tsk の足元が壊れるわけです。

実際にそういうことが起るかどうかは、ターゲットプロセッサやコンパイラに
依存しますが、ここは安全側に倒して、ext_tsk が「create_context と 
activate_context が書き換えるスタック領域のサイズ」分を確保してから 
exit_task を呼んでいます。exit_task から戻ることはありませんので、これ
でかなり安全側に倒れています。

高田広章
名古屋大学