「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)の方法について更に検討してみます。
2010年6月26日土曜日
2010年6月12日土曜日
2010年6月5日土曜日
x86の割込み(MSI)
最近のx86の割込みは大きく3種類あるようです。
・8259PIC(古典的な割込みコントローラ)
・IOAPIC MSI
・そしてPCIeの場合は PCIe MSI
Atomの例がここにあります。
それにしてもLINT0とLINT1に何かつながるような書き方がされてますが、本当でしょうか?
LINT1はNMIだとして、LINT0には一体何がつながるのでしょうか? 8259は別の線になってますし。
・8259PIC(古典的な割込みコントローラ)
・IOAPIC MSI
・そしてPCIeの場合は PCIe MSI
Atomの例がここにあります。
それにしてもLINT0とLINT1に何かつながるような書き方がされてますが、本当でしょうか?
LINT1はNMIだとして、LINT0には一体何がつながるのでしょうか? 8259は別の線になってますし。
登録:
投稿 (Atom)