2010年6月26日土曜日

「12ステップで作る 組込みOS自作入門」 - KOZOSのスレッド生成を変えてみるpart1

「12ステップで作る 組込みOS自作入門」、非常に良い本ですが、第8ステップのスレッド生成あたりから少し説明が難しくなってきます。

KOZOSのスレッド生成は、システムコールから呼び出されるthread_runで行われるようです。これ以外にもコンテキストスイッチのみをシステムコールで実装する、という考え方もあるかと思います。この場合、(3)は必要に応じてということになるでしょう。

(1)TCB(スレッドオブジェクト)にスレッド生成に必要な情報を格納する
(2)TCBをreadyListに挿入する
(3)現在動作しているスレッド(つまりスレッド生成の関数を呼んだスレッド)よりも、たった今生成したスレッドのプライオリティが高いなら、コンテキストスイッチする

(a) KOZOSでのコンテキストスイッチは_dispatch(pp.296)で行われています。このコードを良く見てみると、スタックに詰まれた値からER0~ER6を復旧してrteを呼び出すことが行われています。

(b)別の実装としては、TCB(スレッドオブジェクト)に格納しておいた値からER0~ER6を復旧してrteを呼び出すといことが考えられます。

(a),(b)、いずれにせよCSRとPCはスタックに保存しておいてrteを呼び出す必要があります。次回は(b)の方法について更に検討してみます。

0 件のコメント: